翼度科技»论坛 编程开发 mysql 查看内容

如何单机部署多个 MySQL 8.0 实例 ?

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
在服务器资源有限的情况下,可利用该方案快速搭建各类 mysql 架构方案。各 MySQL 实例共享一个 mysqld 主程序,但各实例数据目录是独立的,存放在不同的文件夹中;好了、废话不多说,直接上干货,具体搭建步骤如下
环境介绍

实例主机mysql portmysqlx portdatadirmysql1192.168.31.100330633060/var/lib/mysql1/mysql2192.168.31.100330733070/var/lib/mysql2/mysql3192.168.31.100330833080/var/lib/mysql3/部署 MySQL 主程序

1、通过官方二进制包解压安装
  1. wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-el7-x86_64.tar.gz
  2. tar xzf mysql-8.0.30-el7-x86_64.tar.gz
  3. mv mysql-8.0.30-el7-x86_64 /usr/local/mysql
  4. # vim /etc/profile 添加环境变量,执行 source /etc/profile 使配置在当前 shell 下生效
  5. export PATH=$PATH:/usr/local/mysql/bin/
  6. # 创建各 mysql 服务器实例的数据目录 datadir
  7. useradd -r -M mysql -s /bin/false
  8. mkdir -p /var/lib/mysql{1..3} && chown mysql.mysql /var/lib/mysql{1..3}
复制代码
修改 MySQL 实例配置

设置各 mysql 实例的配置文件
  1. cat > /etc/my.cnf << EOF
  2. [mysqld_multi]
  3. mysqld = /usr/local/mysql/bin/mysqld_safe
  4. mysqladmin = /usr/local/mysql/bin/mysqladmin
  5. user = root
  6. pass = root             # 后续变更各 mysql 实例 root 账号的初始随机密码为简单密码 root,因为停止各 mysql 实例时需使用此密码
  7. log = /var/log/mysql_multi.log
  8. # mysql 实例一
  9. [mysqld1]
  10. server-id = 1
  11. socket = /var/lib/mysql1/mysql.sock
  12. port = 3306
  13. bind_address = 0.0.0.0
  14. datadir = /var/lib/mysql1
  15. user = mysql
  16. performance_schema = off
  17. innodb_buffer_pool_size = 32M
  18. skip_name_resolve = 1
  19. log_error = error.log
  20. pid-file = /var/lib/mysql1/mysql.pid
  21. mysqlx = 1        # 设置 0 则禁用 mysqlx, 其默认监听端口 33060
  22. mysqlx-port = 33060
  23. # mysql 实例二
  24. [mysqld2]
  25. server-id = 2
  26. socket = /var/lib/mysql2/mysql.sock
  27. port = 3307
  28. bind_address = 0.0.0.0
  29. datadir = /var/lib/mysql2
  30. user = mysql
  31. performance_schema = off
  32. innodb_buffer_pool_size = 32M
  33. skip_name_resolve = 1
  34. log_error = error.log
  35. pid-file = /var/lib/mysql2/mysql.pid
  36. mysqlx = 1
  37. mysqlx-port = 33070
  38. # mysql 实例三
  39. [mysqld3]
  40. server-id = 3
  41. socket = /var/lib/mysql3/mysql.sock
  42. port = 3308
  43. bind_address = 0.0.0.0
  44. datadir = /var/lib/mysql3
  45. user = mysql
  46. performance_schema = off
  47. innodb_buffer_pool_size = 32M
  48. skip_name_resolve = 1
  49. log_error = error.log
  50. pid-file = /var/lib/mysql3/mysql.pid
  51. mysqlx = 1
  52. mysqlx-port = 33080
  53. EOF
复制代码
启动 mysql 实例

设置多实例启动程序
  1. /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql1
  2. #> 2023-03-15T01:22:52.092218Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 15026
  3. #> 2023-03-15T01:22:52.119703Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
  4. #> 2023-03-15T01:22:55.237170Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
  5. #> 2023-03-15T01:23:00.616679Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lqYujqcue7*_
  6. # 同理,初始化其它 mysql 实例(mysql2、mysql3)
  7. /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql2
  8. /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql3
复制代码
更新 root 账号密码

1、使用初始随机密码登录各 MySQL 实例
  1. cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multid
  2. chmod +x /etc/init.d/mysqld_multid
  3. # 启动 各 mysql 实例
  4. /etc/init.d/mysqld_multid start
  5. chkconfig mysqld_multid on              # 可选,设置开机启动
  6. /etc/init.d/mysqld_multid report        # 查看运行情况
  7. #> Reporting MySQL servers
  8. #> MySQL server from group: mysqld1 is running
  9. #> MySQL server from group: mysqld2 is running
  10. #> MySQL server from group: mysqld3 is running
  11. netstat -ntlp | grep mysqld
  12. #> Active Internet connections (only servers)
  13. #> Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
  14. #> tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      19867/mysqld
  15. #> tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      19869/mysqld
  16. #> tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      19876/mysqld
  17. #> tcp6       0      0 :::33080                :::*                    LISTEN      19876/mysqld
  18. #> tcp6       0      0 :::33060                :::*                    LISTEN      19867/mysqld
  19. #> tcp6       0      0 :::33070                :::*                    LISTEN      19869/mysqld
  20. # 停止 各 mysql 实例,需先更新 root 账号密码为 root,因为其实现原理是通过 mysqladmin 登录到各 mysql 实例执行 shutdown
  21. /etc/init.d/mysqld_multid stop
复制代码
2、设置 MySQL root 账号为简单密码 root,且允许从任意主机访问数据库
  1. mysql -u root -p -P3306 -S /var/lib/mysql1/mysql.sock
  2. mysql -u root -p -P3307 -S /var/lib/mysql2/mysql.sock
  3. mysql -u root -p -P3308 -S /var/lib/mysql3/mysql.sock
复制代码
参考

MySQL-5.7.x 二进制包,官方下载地址

来源:https://www.cnblogs.com/ywjsbang/p/17262761.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具