当前位置: 首页 > article >正文

搭建双主四从的MySQL集群

1、创建网段

由于docker容器的ip地址是动态分配的,每次启动相同的容器,他的ip地址都会变化。这非常影响数据库集群的搭建,因此我们要给每个docker容器分配固定的ip地址。

docker默认的网段是172.71.0.x,有时候不同项目用到的容器都在一个网段里面,难免我们使用的时候会弄混淆。因此不同的项目用到的容器最好放在不同的网段。执行下面的命令创建新的网段:

docker network create --subnet=172.18.0.0/18 mynet

2、创建MySQL_1主节点

docker run -it -d \
--name mysql_1 \
-p 7001:3306 \
--net mynet \
--ip 172.18.0.101 \
-m 400m \
-v /root/mysql_1/data:/var/lib/mysql \
-v /root/mysql_1/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
--privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

3、给MySQL_1创建负责主从备份的用户

主从备份用户在开启binlog之前创建

GRANT RELOAD,REPLICATION SLAVE,SUPER ON *.* TO 'slave_user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'slave_user';

用户名: slave_user

主机: %

插件: mysql_native_password

密码:slave_user

权限:reload、replication slave、super

 4、创建MySQL_2从节点

docker run -it -d \
--name mysql_2 \
-p 7002:3306 \
--net mynet \
--ip 172.18.0.102 \
-m 400m \
-v /root/mysql_2/data:/var/lib/mysql \
-v /root/mysql_2/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
--privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

 5、创建MySQL_3从节点

docker run -it -d \
--name mysql_3 \
-p 7003:3306 \
--net mynet \
--ip 172.18.0.103 \
-m 400m \
-v /root/mysql_3/data:/var/lib/mysql \
-v /root/mysql_3/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
--privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

6、创建MySQL_4主节点

docker run -it -d \
--name mysql_4 \
-p 7004:3306 \
--net mynet \
--ip 172.18.0.104 \
-m 400m \
-v /root/mysql_4/data:/var/lib/mysql \
-v /root/mysql_4/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
--privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

 7、给MySQL_4创建负责主从备份的用户

主从备份用户在开启binlog之前创建

GRANT RELOAD,REPLICATION SLAVE,SUPER ON *.* TO 'slave_user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'slave_user';

用户名: slave_user

主机: %

插件: mysql_native_password

密码:slave_user

权限:reload、replication slave、super

  8、创建MySQL_5从节点

docker run -it -d \
--name mysql_5 \
-p 7005:3306 \
--net mynet \
--ip 172.18.0.105 \
-m 400m \
-v /root/mysql_5/data:/var/lib/mysql \
-v /root/mysql_5/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
--privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

 9、创建MySQL_6从节点

docker run -it -d \
--name mysql_6 \
-p 7006:3306 \
--net mynet \
--ip 172.18.0.106 \
-m 400m \
-v /root/mysql_6/data:/var/lib/mysql \
-v /root/mysql_6/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
--privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

10、给MySQL_1添加配置文件

在/root/mysql_1/cnf目录里面创建my.cnf文件并添加如下配置

[mysqld]
#数据库字符集
character_set_server = utf8

#服务编号
server_id = 1

#开启binlog日志
log_bin = mysql_bin

#开启relaylog日志
relay_log = relay_bin

#从库的写操作是否写入binlog日志
log-slave-updates = 1

#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启MySQL_1。

11、给MySQL_2添加配置文件

在/root/mysql_2/cnf目录里面创建my.cnf文件并添加如下配置

[mysqld]
#数据库字符集
character_set_server = utf8

#服务编号
server_id = 2

#开启binlog日志
log_bin = mysql_bin

#开启relaylog日志
relay_log = relay_bin

#限制普通账户无法进行insert、delete、update操作
read-only = 1

#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

从节点开启binlog日志是为了解决当从节点过多的时候,让从节点跟从节点去同步数据,来分担主节点的压力。

重启MySQL_2。

12、让MySQL_2订阅MySQL_1的日子文件,实现数据同步

#停止数据同步服务
stop slave;

#设置与MySQL_1同步数据
change master to master_host='172.18.0.101',master_port=3306,master_user='slave_user',master_password='slave_user';

#开启数据同步服务
start slave;

#查询数据同步状态
show slave status;

如果SQL语句执行结果中出现两个YES,就说明主从同步配置成功了。

Slave_IO_Running 和 Slave_SQL_Running 都为YES代表主从同步配置成功。

13、给MySQL_3添加配置文件

在/root/mysql_3/cnf目录里面创建my.cnf文件并添加如下配置

[mysqld]
#数据库字符集
character_set_server = utf8

#服务编号
server_id = 3

#开启binlog日志
log_bin = mysql_bin

#开启relaylog日志
relay_log = relay_bin

#限制普通账户无法进行insert、delete、update操作
read-only = 1

#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启MySQl_3。

14、让MySQL_3订阅MySQL_1的日子文件,实现数据同步

#停止数据同步服务
stop slave;

#设置与MySQL_1同步数据
change master to master_host='172.18.0.101',master_port=3306,master_user='slave_user',master_password='slave_user';

#开启数据同步服务
start slave;

#查询数据同步状态
show slave status;

15、给MySQL_4添加配置文件

在/root/mysql_4/cnf目录里面创建my.cnf文件并添加如下配置

[mysqld]
#数据库字符集
character_set_server = utf8

#服务编号
server_id = 4

#开启binlog日志
log_bin = mysql_bin

#开启relaylog日志
relay_log = relay_bin

#从库的写操作是否写入binlog日志
log-slave-updates = 1

#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启MySQL_4。

15、给MySQL_5添加配置文件

在/root/mysql_5/cnf目录里面创建my.cnf文件并添加如下配置

[mysqld]
#数据库字符集
character_set_server = utf8

#服务编号
server_id = 5

#开启binlog日志
log_bin = mysql_bin

#开启relaylog日志
relay_log = relay_bin

#限制普通账户无法进行insert、delete、update操作
read-only = 1

#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启MySQL_5。

16、让MySQL_5订阅MySQL_4的日子文件,实现数据同步

#停止数据同步服务
stop slave;

#设置与MySQL_1同步数据
change master to master_host='172.18.0.104',master_port=3306,master_user='slave_user',master_password='slave_user';

#开启数据同步服务
start slave;

#查询数据同步状态
show slave status;

18、给MySQL_6添加配置文件

在/root/mysql_6/cnf目录里面创建my.cnf文件并添加如下配置

[mysqld]
#数据库字符集
character_set_server = utf8

#服务编号
server_id = 6

#开启binlog日志
log_bin = mysql_bin

#开启relaylog日志
relay_log = relay_bin

#限制普通账户无法进行insert、delete、update操作
read-only = 1

#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

重启MySQL_6。

19、让MySQL_6订阅MySQL_4的日子文件,实现数据同步

#停止数据同步服务
stop slave;

#设置与MySQL_1同步数据
change master to master_host='172.18.0.104',master_port=3306,master_user='slave_user',master_password='slave_user';

#开启数据同步服务
start slave;

#查询数据同步状态
show slave status;

20、配置MySQL_1和MySQL_4双向主从同步

在MySQL_1节点上执行

#停止数据同步服务
stop slave;

#设置与MySQL_1同步数据
change master to master_host='172.18.0.104',master_port=3306,master_user='slave_user',master_password='slave_user';

#开启数据同步服务
start slave;

#查询数据同步状态
show slave status;

在MySQL_4节点上执行

#停止数据同步服务
stop slave;

#设置与MySQL_1同步数据
change master to master_host='172.18.0.101',master_port=3306,master_user='slave_user',master_password='slave_user';

#开启数据同步服务
start slave;

#查询数据同步状态
show slave status;


http://www.kler.cn/news/284669.html

相关文章:

  • 【大模型】LangChain基础学习
  • 某大厂前端面试题
  • 自然语言处理与深度学习的结合
  • Eureka简介与开发
  • Axure RP实战:打造高效文字点选验证码
  • 销冠大模型案例
  • (一) 初入MySQL 【认识和部署】
  • Promise学习
  • k8s-pod 实战六 (如何在不同的部署环境中调整startupprobe的参数?)
  • [QCTF2018]X-man-A face1
  • 基于STM32的智能物料运载小车:OpenMV和OpenCV结合图像识别与运动控制算法优化(代码示例)
  • Linux和Unix的区别及为什么鸿蒙系统不用Unix的原因
  • 安卓中synchronized 关键字 的作用和介绍
  • java篇 常用工具类 0x05:基本类型的自动装箱拆箱
  • 通过Amazon Bedrock上的Stability AI模型开发生成式AI应用(上篇)
  • MySQL——基础操作
  • 证书学习(三).p12证书颁发的5个步骤、如何在线生成证书、证书工具网站推荐
  • 设计模式 14 命令模式
  • 算法训练营|图论第二天 99.岛屿数量 100.岛屿的最大面积
  • 1999-2023年上市公司年报文本数据(PDF+TXT)
  • 一文解决CLion控制台(cmd)问题【超详细】
  • SQL SUM() 函数
  • Mac环境下Python3虚拟环境创建、Flask安装以及创建运行第一个最小的Flask项目
  • k8s-pod 实战五 (Startup Probe 详细分析)
  • YoloV8实战:使用YoloV8实现OBB框检测
  • C++(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例2
  • hadoop技术
  • mmitmproxy 抓包工具使用
  • 本地搭建XSS 漏洞接收平台实践分享
  • 【Centos】制作一键安装包.bin 文件