最近由于业务需要,考虑使用json类型,据了解 mysql 在版本5.7中可以支持 json 类型的数据支持,但同时目前开发环境中使用的是 mysql 5.6版本,上面还有很多项目的数据库在上面,同时也没有多余的服务器可供使用,故不能直接卸载将 mysql直接升级版本。

从而想到在同一台机器上安装多个版本的 mysql 来解决问题。

上面说到之前环境已经装有mysql 5.6版本,基本配置如下:

  1. datadir=/home/mysql/data
  2. basedir=/usr/local/mysql

同时配置文件 my.cnf放在在 /etc/目录下。

此版本是通过 yum的方式来下载安装的,故5.7的版本不能再使用这种方式安装,以免数据被覆盖。

我的系统版本是centos 64位,故在官网下载 5.7 64版本的安装包。(https://downloads.mysql.com/archives/get/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

具体操作如下:

  1. mkdir /usr/local/app
  2. cd /usr/local/app
  3. wget -o https://downloads.mysql.com/archives/get/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
  4. tar -xzf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
  5. mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql-5.7.24
  6. mv mysql-5.7.24 ../
  7. cd ../mysql-5.7.24

此时已将 mysql 5.7 解压出来。这个版本的 mysql 已经不包含模板配置文件。此时初始化数据库(先授权,由于之前已经创建了mysql:mysql的用户组及用户了,但还没有5.7版本目录和数据的权限):

  1. mkdir /home/mysql-5.7.24/data
  2. chown mysql:mysql -R /home/mysql-5.7.24/data /usr/local/mysql-5.7.24
  3. ./bin/mysqld --initialize --user=mysql --datadir=/home/mysql-5.7.24/data --basedir=/usr/local/mysql-5.7.24

此时会生成默认的 root 密码,记下来。

然后再使用 mysqld_multi来管理多实例。原本我是想直接使用support-files目录下mysql_server来启动的,但是发现个问题,就是该脚本总是使用 /etc/my.cnf作为配置文件来启动的,于是我查了下资料,发现mysql读写配置顺序如下:

  1. /etc/my.cnf > /etc/mysql/my.cnf > /usr/etc/my.cnf > ~/.my.cnf

由于该配置文件已被 5.6 版本的 mysql使用,故寻找其他方法。

方法一

使用 mysqld_multi来管理。

修改 /etc/my.cnf:

  1. #[client]
  2. #port = 3306
  3. #socket = /usr/local/mysql/mysql.sock
  4. [mysqld_multi]
  5. mysqld = /usr/local/mysql-5.7.24/bin/mysqld_safe
  6. log = /var/log/mysqld_multi.log
  7. [mysqld3306]
  8. user=mysql
  9. server_id=206
  10. port = 3306
  11. basedir = /usr/local/mysql
  12. datadir = /home/mysql/data
  13. tmpdir = /home/mysql/temp
  14. socket = /usr/local/mysql/mysql.sock
  15. log-error = /home/mysql/logs/mysql_error.log
  16. pid-file = /home/mysql/mysql.pid
  17. slow-query-log-file = /home/mysql/logs/mysql-slow.log
  18. [mysqld3307]
  19. user=mysql
  20. server_id=207
  21. port = 3307
  22. basedir = /usr/local/mysql-5.7.24
  23. datadir = /home/mysql-5.7.24/data
  24. tmpdir = /home/mysql-5.7.24/temp
  25. socket = /usr/local/mysql-5.7.24/mysql.sock
  26. log-error = /home/mysql-5.7.24/logs/mysql_error.log
  27. pid-file = /home/mysql-5.7.24/mysql.pid
  28. slow-query-log-file = /home/mysql-5.7.24/logs/mysql-slow.log
  29. [mysqld]
  30. #server_id=206
  31. #binlog-do-db=testdb
  32. binlog-ignore-db=mysql
  33. log-bin=edu-mysql-slave1-bin
  34. binlog_cache_size = 1M
  35. binlog_format=mixed
  36. expire_logs_days=7
  37. slave_skip_errors=1062
  38. relay_log=edu-mysql-relay-bin
  39. log_slave_updates=1
  40. read_only=0
  41. character-set-server = utf8
  42. collation-server = utf8_general_ci
  43. skip-external-locking
  44. skip-name-resolve
  45. #user = mysql
  46. #port = 3306
  47. #basedir = /usr/local/mysql
  48. #datadir = /home/mysql/data
  49. #tmpdir = /home/mysql/temp
  50. # server_id = .....
  51. #socket = /usr/local/mysql/mysql.sock
  52. #log-error = /home/mysql/logs/mysql_error.log
  53. #pid-file = /home/mysql/mysql.pid
  54. open_files_limit = 10240
  55. back_log = 600
  56. max_connections=500
  57. max_connect_errors = 6000
  58. wait_timeout=605800
  59. #open_tables = 600
  60. #table_cache = 650
  61. #opened_tables = 630
  62. max_allowed_packet = 32M
  63. sort_buffer_size = 4M
  64. join_buffer_size = 4M
  65. thread_cache_size = 300
  66. query_cache_type = 1
  67. query_cache_size = 256M
  68. query_cache_limit = 2M
  69. query_cache_min_res_unit = 16k
  70. tmp_table_size = 256M
  71. max_heap_table_size = 256M
  72. key_buffer_size = 256M
  73. read_buffer_size = 1M
  74. read_rnd_buffer_size = 16M
  75. bulk_insert_buffer_size = 64M
  76. lower_case_table_names=1
  77. default-storage-engine = INNODB
  78. innodb_buffer_pool_size = 2G
  79. innodb_log_buffer_size = 32M
  80. innodb_log_file_size = 128M
  81. innodb_flush_method = O_DIRECT
  82. #####################
  83. #thread_concurrency = 32
  84. long_query_time= 2
  85. slow-query-log = on
  86. #slow-query-log-file = /home/mysql/logs/mysql-slow.log
  87. [mysqld-5.7]
  88. innodb_buffer_pool_dump_pct = 40
  89. innodb_page_cleaners = 4
  90. innodb_undo_log_truncate = 1
  91. innodb_max_undo_log_size = 1G
  92. innodb_purge_rseg_truncate_frequency = 128
  93. binlog_gtid_simple_recovery=1
  94. log_timestamps=system
  95. transaction_write_set_extraction=MURMUR32
  96. show_compatibility_56=on
  97. [mysqldump]
  98. quick
  99. max_allowed_packet = 32M
  100. [mysqld_safe]
  101. log-error=/var/log/mysqld.log
  102. pid-file=/var/run/mysqld/mysqld.pid

上面多余的配置根据需求可以去掉,保留关键的配置即可,主要是端口,pid,和文件路径这些要不一样。

修改完成后,可以使用 support_files目录下的 mysqld_multi.server 来管理多个版本实例了。

./mysqld_multi.serverstart,stop,report几个操作,顾名思义,使用就好了,report就是类似 status的意思。

  1. ./mysqld_multi.server report

发现

  1. MySQL server from group: mysqld3306 is running
  2. MySQL server from group: mysqld3307 is not running

然后启动3307即可,

./mysqld_multi.server start 3307

  1. MySQL server from group: mysqld3306 is running
  2. MySQL server from group: mysqld3307 is running

不指定某个具体的实例就是启动或者关闭所有的。

这样就搞定了,但在终端使用客户端的时候要注意要具体指定某一个sock文件和端口:

  1. mysql -S /usr/local/mysql-5.7.24/mysql.sock -P 3307 -u root -p

最后,可以将 mysqld_multi作为系统服务:

  1. cp /usr/local/mysql-5.7.24/support-files/mysqld_multi.server /etc/rc.d/init.d/mysqld_multi
  2. chkconfig --add /mysqld_multi

就可以直接使用了:

  1. mysqld_multi report

方法二

使用 bin/mysqld_safe指定配置文件来启动:

  1. cp /etc/my.cnf ./
  2. ##改改其中的一些配置(端口,pid,和文件路径)
  3. ./bin/mysqld_safe defaults-file=/usr/local/mysql-5.7.24/my.cnf basedir=/usr/local/mysql-5.7.24 datadir=/home/mysql-5.7.24/data &

文章有些杂乱,有时间再优化。

linux 上安装多个不同版本的mysql 踩的坑的更多相关文章

  1. 在windows上安装不同(两个)版本的Mysql数据库

    1.起因: 需要导入一个sql文件,发现死活导不进去.当执行到这一句时,就有问题.经过一番搜索,原来是我的数据库版本(原先Mysql版本5.5)低了,而支持该语句的版本应该是至少要5.7.那我索性就去 ...

  2. 在Linux上安装nginx时遇到的问题,真的好坑啊!!!!

    解决了两个小时愣是卡着没动,结果一请大神问题就迎刃而解,怪自己太粗心,一下午差点就被这个问题安排的明明白白,直接上问题: makeFile时的问题:   checking for OS + Linux ...

  3. 在Windows和Linux上安装paramiko模块以及easy_install的安装方法

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  4. 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导

    Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...

  5. 在Windows和Linux上安装paramiko模块

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  6. Linux上安装使用boost入门指导

    Data Mining Linux上安装使用boost入门指导 获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到bo ...

  7. 如何在Linux上安装Storm

    Storm是开源的分布式实时计算系统,能够让数据流处理变得简单.可靠,也因此在大数据领域有广泛的实际 应用.下面介绍一下如何在Linux系统上安装Storm.根据Storm官网介绍,安装Storm软件 ...

  8. linux上安装Drupal

    linux上安装Drupal 前言:国内用drupal的并不太多,网上资料也很少.要注意的是drupal尽量别使用apt来安装,特别是ubuntu平台的drupal做出了一定的更改,会妨碍后期的学习和 ...

  9. linux上安装php7 memcache扩展 和 安装服务端memcached

    linux上安装memcached不算太困难.唯一让本人感到困难的是 php7的memcache扩展安装.真的蛋疼! 先说安装服务端 memcached 1. 首先安装Libevent事件触发管理器. ...

随机推荐

  1. Windows Server 2008取消登录前的Ctrl+Alt+Delete组合键操作

    前言: 在Windows Server 2008服务器中,为了防止人们登录服务器时错误的将账户和密码输入其他地方导致信息泄漏,所以在我们登录Windows Server 2008服务器操作系统时会要求 ...

  2. 为什么选择Spring Boot作为微服务的入门级微框架

    摘要:1. Spring Boot是什么,解决哪些问题 1) Spring Boot使编码变简单 2) Spring Boot使配置变简单 3) Spring Boot使部署变简单 4) Spring ...

  3. U型理论

  4. Project facet Java version 1.8 not supported JDK版本不对无法启动项目解决办法

    https://jingyan.baidu.com/article/6c67b1d69a59a02787bb1e30.html

  5. 巩固java(一)----java与对象

         C语言是一种面向过程语言,在解决问题时,要先分析出问题的解决步骤,然后按顺序一步步实现,使用的时候一个一个调用.所以面向过程编程是以过程为中心的.      不同于面向过程编程,面向对象编程 ...

  6. 在MFC中UpdateData()的作用

    UpdateData()用来刷新数据,其中UpdateData(true)将控件中的数据传递到控件捆绑的变量中去.UpdateData(false)将变量值传递到控件中去.例如:窗口中用 DDX_Te ...

  7. SDOI2017 BZOJ 4820 硬币游戏 解题报告

    写在前面 此题网上存在大量题解,但本人太菜了,看了不下10篇均未看懂,只好自己冷静分析了.本文将严格详细地论述算法(避免一切意会和玄学),因此可能会比其它题解更加理论化一些,希望能对像我一样看了其它题 ...

  8. BZOJ_2529_[Poi2011]Sticks_贪心

    BZOJ_2529_[Poi2011]Sticks_贪心 Description Little Johnny was given a birthday present by his grandpare ...

  9. BZOJ_4627_[BeiJing2016]回转寿司_离散化+树状数组

    BZOJ_4627_[BeiJing2016]回转寿司_离散化+树状数组 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 ...

  10. BZOJ_3524_[Poi2014]Couriers_主席树

    BZOJ_3524_[Poi2014]Couriers_主席树 题意:给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r- ...