mysql 5.7 配置多实例 — mysqld_multi 方式

单机多实例可以有效的最大化服务器的利用率,mysql 多实例的实现方式也有两种:

    独立配置文件:每个实例有自己单独的配置文件 

    mysqld_multi 单一配置文件统一管理:实例在单一配置文件中统一配置管理

这里我们使用 mysqld_multi 方式来创建多实例,管理起来比较方便

假设我们在 /usr/local/mysql 目录安装了 mysql

接下来我们创建 3307 和 3308 两个新实例

创建实例数据目录

 
  1. [root@localhost ~]# mkdir /usr/local/mysql{3307,3308}/data -p

  2. [root@localhost ~]# chown mysql.mysql /usr/local/mysql{3307,3308} -R

    注意目录权限

初始化实例的数据库

扫描二维码关注公众号,回复: 8766894 查看本文章

mysql_install_db 方式已经 deprecated 了,我们使用 mysqld 的 initialize 方法来做初始化

 
  1. # --no-defaults 不读取默认的 /etc/my.cnf 全局配置文件 否则可能存在一些冲突问题

  2. # --initialize-insecure 初始化且不需要生成密码,我不太喜欢那一大串字符...

  3. # --basedir mysql 的安装目录

  4. # --datadir 本实例的数据目录

  5. # --user 这样生成的文件用户为 mysql

  6. # --explicit_defaults_for_timestamp timestamp 已经 deprecated 了

  7.  
  8. #生成 3307 的数据目录

  9. [root@localhost ~]# mysqld --no-defaults \

  10. --initialize-insecure \

  11. --basedir=/usr/local/mysql \

  12. --datadir=/usr/local/mysql3307/data \

  13. --user=mysql \

  14. --explicit_defaults_for_timestamp

  15.  
  16. #生成 3308 的数据目录

  17. [root@localhost ~]# mysqld --no-defaults \

  18. --initialize-insecure \

  19. --basedir=/usr/local/mysql \

  20. --datadir=/usr/local/mysql3308/data \

  21. --user=mysql \

  22. --explicit_defaults_for_timestamp

多实例配置文件

这里上传我的配置,你也可以使用

mysqld_multi --example > /etc/my_multi.cnf

来生成多实例配置示例。

我不想在管理多实例时再使用 --defaults-file 选项来指定单独的实例配置文件,所以就写到默认的 my.cnf 文件中了,你可以自行选择是否使用单独的配置文件

 
  1. [client]

  2. port = 3306

  3. socket = /tmp/mysql.sock

  4.  
  5. [mysqld]

  6. port = 3306

  7. socket = /tmp/mysql.sock

  8. datadir = /usr/local/mysql/data

  9. skip-external-locking

  10. key_buffer_size = 32M

  11. max_allowed_packet = 1M

  12. table_open_cache = 128

  13. sort_buffer_size = 768K

  14. net_buffer_length = 8K

  15. read_buffer_size = 768K

  16. read_rnd_buffer_size = 512K

  17. myisam_sort_buffer_size = 8M

  18. thread_cache_size = 16

  19. query_cache_size = 16M

  20. tmp_table_size = 32M

  21.  
  22. log-error = /usr/local/mysql/mysql_error.log

  23. pid-file = /usr/local/mysql/mysql.pid

  24.  
  25. explicit_defaults_for_timestamp = true

  26. #skip-networking

  27. max_connections = 100

  28. max_connect_errors = 5

  29. open_files_limit = 65535

  30.  
  31. log-bin=mysql-bin

  32. binlog_format=mixed

  33. server-id = 1

  34. expire_logs_days = 10

  35. early-plugin-load = ""

  36.  
  37. default_storage_engine = InnoDB

  38. innodb_data_home_dir = /usr/local/mysql/data

  39. innodb_data_file_path = ibdata1:10M:autoextend

  40. innodb_log_group_home_dir = /usr/local/mysql/data

  41. innodb_buffer_pool_size = 128M

  42. innodb_log_file_size = 32M

  43. innodb_log_buffer_size = 8M

  44. innodb_flush_log_at_trx_commit = 1

  45. innodb_lock_wait_timeout = 50

  46.  
  47. [mysqldump]

  48. quick

  49. max_allowed_packet = 16M

  50.  
  51. [mysql]

  52. no-auto-rehash

  53.  
  54. [myisamchk]

  55. key_buffer_size = 32M

  56. sort_buffer_size = 768K

  57. read_buffer = 2M

  58. write_buffer = 2M

  59.  
  60. [mysqlhotcopy]

  61. interactive-timeout

  62.  
  63. # 多实例配置 可以把下面的内容拿出来单独放一个配置文件 启动时 --defaults-file 即可

  64. [mysqld_multi]

  65. mysqld = /usr/local/mysql/bin/mysqld_safe

  66. mysqladmin = /usr/local/mysql/bin/mysqladmin

  67. user = root

  68. pass = 123456 #这里要注意5.7后用 pass 最方便, 5.6 用默认的 password 就好

  69.  
  70. # 实例3307

  71. [mysqld3307]

  72. port = 3307

  73. socket = /tmp/mysql3307.sock

  74. datadir = /usr/local/mysql3307/data

  75. skip-external-locking

  76. key_buffer_size = 32M

  77. max_allowed_packet = 1M

  78. table_open_cache = 128

  79. sort_buffer_size = 768K

  80. net_buffer_length = 8K

  81. read_buffer_size = 768K

  82. read_rnd_buffer_size = 512K

  83. myisam_sort_buffer_size = 8M

  84. thread_cache_size = 16

  85. query_cache_size = 16M

  86. tmp_table_size = 32M

  87.  
  88. log-error = /usr/local/mysql3307/mysql3307_error.log

  89. pid-file = /usr/local/mysql3307/mysql3307.pid

  90.  
  91. explicit_defaults_for_timestamp = true

  92. #skip-networking

  93. max_connections = 100

  94. max_connect_errors = 5

  95. open_files_limit = 65535

  96.  
  97. log-bin=mysql-bin

  98. binlog_format=mixed

  99. server-id = 1

  100. expire_logs_days = 10

  101. early-plugin-load = ""

  102.  
  103. default_storage_engine = InnoDB

  104. innodb_data_home_dir = /usr/local/mysql3307/data

  105. innodb_data_file_path = ibdata1:10M:autoextend

  106. innodb_log_group_home_dir = /usr/local/mysql3307/data

  107. innodb_buffer_pool_size = 128M

  108. innodb_log_file_size = 32M

  109. innodb_log_buffer_size = 8M

  110. innodb_flush_log_at_trx_commit = 1

  111. innodb_lock_wait_timeout = 50

  112.  
  113. # 实例3308

  114. [mysqld3308]

  115. port = 3308

  116. socket = /tmp/mysql3308.sock

  117. datadir = /usr/local/mysql3308/data

  118. skip-external-locking

  119. key_buffer_size = 32M

  120. max_allowed_packet = 1M

  121. table_open_cache = 128

  122. sort_buffer_size = 768K

  123. net_buffer_length = 8K

  124. read_buffer_size = 768K

  125. read_rnd_buffer_size = 512K

  126. myisam_sort_buffer_size = 8M

  127. thread_cache_size = 16

  128. query_cache_size = 16M

  129. tmp_table_size = 32M

  130.  
  131. log-error = /usr/local/mysql3308/mysql3308_error.log

  132. pid-file = /usr/local/mysql3308/mysql3308.pid

  133.  
  134. explicit_defaults_for_timestamp = true

  135. #skip-networking

  136. max_connections = 100

  137. max_connect_errors = 5

  138. open_files_limit = 65535

  139.  
  140. log-bin=mysql-bin

  141. binlog_format=mixed

  142. server-id = 1

  143. expire_logs_days = 10

  144. early-plugin-load = ""

  145.  
  146. default_storage_engine = InnoDB

  147. innodb_data_home_dir = /usr/local/mysql3308/data

  148. innodb_data_file_path = ibdata1:10M:autoextend

  149. innodb_log_group_home_dir = /usr/local/mysql3308/data

  150. innodb_buffer_pool_size = 128M

  151. innodb_log_file_size = 32M

  152. innodb_log_buffer_size = 8M

  153. innodb_flush_log_at_trx_commit = 1

  154. innodb_lock_wait_timeout = 50

这里其实有个小注意点:

在 [mysqld_multi ] 组里我并没有使用默认的 password 配置项, 而是用的 pass。

从5.6以后这货就被加密了必须用 -s 才能明文,mysqld_multi 读取的都是密文,无法 stop 实例。

运行多实例

 
  1. # 可以看到多实例已经在运行了

  2. # 多实例并不会影响默认实例的运行 我们仍可使用service mysql start|stop|restart|reload 管理默认实例

  3. [root@localhost ~]# mysqld_multi start

  4. [root@localhost ~]# mysqld_multi report

  5. Reporting MySQL servers

  6. MySQL server from group: mysqld3307 is running

  7. MySQL server from group: mysqld3308 is running

设置实例密码

我们初始化实例的时候并没有设置root密码 默认为空 这是 --initialize-insecure 选项的作用

所以使用 mysqladmin 重置密码的时输入的原密码为空

 
  1. [root@localhost local]# mysqladmin -u root -p password 123456 -S /tmp/mysql3307.sock

  2. Enter password:

  3. mysqladmin: [Warning] Using a password on the command line interface can be insecure.

  4. Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

  5.  
  6. [root@localhost local]# mysqladmin -u root -p password 123456 -S /tmp/mysql3308.sock

  7. Enter password:

  8. mysqladmin: [Warning] Using a password on the command line interface can be insecure.

  9. Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

我们可以为实例设置统一的密码,方便使用 mysqld_multi start|stop|reload 命令管理实例,否则你就得用 mysqladmin 这样玩了,自行选择

[root@localhost ~]# mysqladmin -uroot -pyourpassword -S /tmp/mysqlxxx.sock shutdown

配置完成

 
  1. [root@localhost ~]# mysqld_multi start

  2. [root@localhost ~]# mysqld_multi report

  3. Reporting MySQL servers

  4. MySQL server from group: mysqld3307 is running

  5. MySQL server from group: mysqld3308 is running

  6.  
  7. [root@localhost ~]# mysqld_multi stop

  8. [root@localhost ~]# mysqld_multi report

  9. Reporting MySQL servers

  10. MySQL server from group: mysqld3307 is not running

  11. MySQL server from group: mysqld3308 is not running

  12.  
  13. [root@localhost ~]# mysqld_multi start 3308

  14. [root@localhost ~]# mysqld_multi report

  15. Reporting MySQL servers

  16. MySQL server from group: mysqld3307 is not running

  17. MySQL server from group: mysqld3308 is running

  18.  
  19. [root@localhost ~]# mysqld_multi stop 3308

  20. [root@localhost ~]# mysqld_multi report

  21. Reporting MySQL servers

  22. MySQL server from group: mysqld3307 is not running

  23.  
发布了447 篇原创文章 · 获赞 71 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/w892824196/article/details/104067754
今日推荐