现在的位置: 首页 > 关系型数据库 > MySQL数据库 > 初识MySQL > 正文

rhel6下,mysql5.6.14 多实例配置

时间:2013年11月18日 | 分类:初识MySQL | 评论: 2 条 | 浏览:3,102 次
       在我们的生产环境中,很少一台db server就一个mysql实例,从节约成本和充分利用资源的角度出发,我们往往会在主从环境下,对从机的db server 安装多个mysql实例,用来同步主db server的相应实例

      1.mysql 多实例的控制原理:
       多实例通过Mysqld_multi 可以管理多个监听不同的 unix 套字节文件和 TCP/IP 端口的连接的 mysqld 进程,包括 start,stop,status。
        默认的 mysqld_multi 是读取 my.cnf 中的[mysqld/N]中的数据,N 一定是正整数,如果你是单独写的文件,可以通过--config-file 参数来指定读取的 configfile。
  1. mysqld_multi 的 option  
  2. usage:  
  3. myysqld_multi [optinos] {start|stop|report} [GNR[,GNR]..]  
  4. option:  
  5. start|stop |report 这些大家都懂得  

GNR 指的是[msyqld/N]中的 N,GNR 中不能有空格和 tab

mysqld_multi start 10 就是启动 my.cnf 中的 10 的实例;mysqld_multi start 1,4-6 就是启动 1,4 到 6 个实例

如果任何参数都不加入的话,默认会启动所有的实例

登陆会话,则指定对应mysq实例的套接字文件:mysql -uuser -ppassword -S sockpath

2.下面我们简单搭建一台DB server启动两个mysql实例[主从同步,会在下一篇文章中搭建]

(1).我默认在这台DB server上已经安装一个mysql 实例[ 我这里是源码安装的mysql,各位可以采用RPM、二进制、源码等方式安装一个mysql ]

数据库安装目录:/usr/local/mysql

3306实例数据存放目录:/home/mysql/data

(2).新建第二个mysql实例数据存放目录,目录名为:data_3307

  1. [root@client100 mysql]# mkdir -p /home/mysql/data_3307  
  2. # 修改数据目录的属主  
  3. [root@client100 mysql]# chown  mysql. -R  /home/mysql/data_3307  

(3).编辑数据库配置文件:/etc/my.cnf

  1. [root@client100 mysql]# vim /etc/my.cnf  
  2. [mysqld_multi]  
  3. # 指定相关命令的路径  
  4. mysqld     =  /usr/local/mysql/bin/mysqld_safe  
  5. mysqladmin =  /usr/local/mysql/bin/mysqladmin  
  6. # 指定用户,用于启动和关闭mysql服务[这里尽量使用root用户,默认root用户拥有所以权限,记得在两个实例中root密码一致]  
  7. user = root  
  8. password = kongzhong  
  9. # 指定错误日志路径  
  10. log = /usr/local/mysql/multi.log  
  11.   
  12. [mysqld3306]  
  13. basedir =/usr/local/mysql  
  14. datadir =/home/mysql/data  
  15. socket = /usr/local/mysql/mysqld3306.sock  
  16. pid-file = /home/mysql/data/mysql3306.pid  
  17. general_log = 1  
  18. general_log_file = /home/mysql/data/mysql3306.log  
  19. port =3306  
  20. server_id =100  
  21. user = mysql  
  22. join_buffer_size = 128M  
  23. sort_buffer_size = 2M  
  24. read_rnd_buffer_size = 2M  
  25. default_storage_engine = MYISAM  
  26. join_buffer_size = 128M  
  27. max_allowed_packet= 1M  
  28. net_buffer_length= 8K  
  29. skip-external-locking  
  30. skip-host-cache  
  31. skip-name-resolve  
  32. # InnoDB  
  33. innodb_buffer_pool_size = 128M  
  34. innodb_log_file_size = 48M  
  35. innodb_file_per_table = 1  
  36. innodb_flush_method = O_DIRECT  
  37. # MyISAM  
  38. key_buffer_size = 48M  
  39. character-set-server=utf8  
  40. collation-server=utf8_general_ci  
  41. # LOG  
  42. log_error = /home/mysql/data/mysql-error.log  
  43. long_query_time = 1  
  44. slow-query-log  
  45. slow_query_log_file = /home/mysql/data/mysql-slow.log  
  46. # Others  
  47. explicit_defaults_for_timestamp=true  
  48. max_connections = 500  
  49. open_files_limit = 65535  
  50. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  
  51.   
  52. [mysqld3307]  
  53. basedir =/usr/local/mysql  
  54. datadir =/home/mysql/data_3307  
  55. socket = /usr/local/mysql/mysqld3307.sock  
  56. pid-file = /home/mysql/data_3307/mysql3307.pid  
  57. general_log = 1  
  58. general_log_file = /home/mysql/data_3307/mysql3307.log  
  59. port =3307  
  60. server_id =101  
  61. user = mysql  
  62. join_buffer_size = 128M  
  63. sort_buffer_size = 2M  
  64. read_rnd_buffer_size = 2M  
  65. default_storage_engine = MYISAM  
  66. join_buffer_size = 128M  
  67. max_allowed_packet= 1M  
  68. net_buffer_length= 8K  
  69. skip-external-locking  
  70. skip-host-cache  
  71. skip-name-resolve  
  72. # InnoDB  
  73. innodb_buffer_pool_size = 128M  
  74. innodb_log_file_size = 48M  
  75. innodb_file_per_table = 1  
  76. innodb_flush_method = O_DIRECT  
  77. # MyISAM  
  78. key_buffer_size = 48M  
  79. character-set-server=utf8  
  80. collation-server=utf8_general_ci  
  81. # LOG  
  82. log_error = /home/mysql/data_3307/mysql-error.log  
  83. long_query_time = 1  
  84. slow-query-log  
  85. slow_query_log_file = /home/mysql/data_3307/mysql-slow.log  
  86. # Others  
  87. explicit_defaults_for_timestamp=true  
  88. max_connections = 500  
  89. open_files_limit = 65535  
  90. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  

(4).为第二个实例初始化数据库:

  1. # 进入数据库安装目录  
  2. [root@client100 mysql]# cd /usr/local/mysql/scripts/  
  3. # 执行初始化脚本,指定数据目录/用户  
  4. [root@client100 scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/home/mysql/data_3307 --user=mysql  

(5).使用mysqld_multi命令启动相应实例[如果my.cnf不在默认位置,需指明位置--defaults-extra-file=****]

  1. # 启动相应实例  
  2. [root@client100 ~]# mysqld_multi start 3306  
  3. [root@client100 ~]# mysqld_multi start 3307  
  4. # 使用如下命令检测 mysql 相应实例进程是否启动  
  5. [root@client100 ~]# ps -ef |grep mysql  
  6. # 使用netstat 检测mysql两个实例端口是否启动[看到两个端口的监听都出现,就说明搭建正常]  
  7. [root@client100 ~]# netstat -ntlp |grep mysql  
  8. # 使用如下两条命令,可登陆到对应实例数据库  
  9. [root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p  
  10. [root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3307.sock -p  
  11. # 登陆后,可查看参数,查看数据存放目录,以确认是否登陆自己要登陆的实例  
  12. mysql> show variables like '%datadir%'  
  13. # 关闭实例  
  14. [root@client100 ~]# mysqld_multi stop 3306  
  15. [root@client100 ~]# mysqld_multi stop 3307  
  16. # 如果执行以上命令,不能关闭的话,请使用以下方式关闭  
  17. [root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3307.sock shutdown  
  18. [root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3306.sock shutdown  
  19.   
  20. ## 有的朋友可能在使用 mysqld_multi stop 关闭时,始终有实例关闭不了,这里就是/etc/my.cnf中user/password的作用  
  21. ## 需要做如下操作:  
  22. ## 如果你指定的用户不是root用户,那最好拥有mysql的所有目录权限,不然会报权限不够,所以建议用mysql或root用户  
  23. ## 如果是root用户,因为root拥有所有权限,所以只要设置两个实例的密码都是一样的就行  
  24. ## 而对于mysql,则编译安装时,创建用户是就要允许此用户登录,即不要加nologin限制  
  25. ## 并登录到实例数据库后,授予shutdown权限,设置密码  
  26. mysql>  GRANT SHUTDOWN ON *.* TO 'mysql'@'localhost' IDENTIFIED BY 'kongzhong';  
  27. mysql> flush privileges  
  28. ## 现在再用 mysqld_multi stop 关闭,就可正常关闭[还是那句,建议用root]  

    • 假设在mysqld_mutli里指定的用户为shutdown,密码为kongzhong,则登陆两个实例授权:grant shutdown on *.* to ‘shutdown’@'localhost’ identified by ‘kongzhong’;即可

×