本人在之前已经介绍过了使用Docker搭建MySQL一主一从的主从复制模式,具体搭建步骤可以参考本人的这篇博文,使用Docker搭建MySQL主从复制(一主一从),今天介绍下使用Docker搭建一主两从的模式。一主两从是在一主一从的基础上进行的,所以对一主一从不太熟悉的同学可以先看一下本人的这篇文章使用Docker搭建MySQL主从复制(一主一从),再进行一主两从的搭建,会更容易理解。
在使用Docker搭建MySQL主从复制(一主一从)中已经搭建了Master主库和Slave从库,现在开始搭建第二台Slave从库,暂且称为Slave2吧;
Slave2:
docker run -p 3303:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
端口设置为3303,名称设置为mysql-slave2。
进入到mysql容器:
docker exec -it 123d7b3bd13b /bin/bash
进入到/etc/mysql/
目录,通过vim
命令修改mysql 的配置文件my.cnf
,添加如下配置:
[mysqld]
# 配置server-id 需唯一
server-id=102
# relay_log配置中继日志
relay-log=mysql-relay-bin
保存退出,重启使用如下命令重启mysql服务,以便配置文件生效:
service mysql restart
重启会导致docker容器停止,使用如下命令重新启动容器:
docker restart mysql-slave2 # mysql-slave2 为容器名称,也可以使用容器ID
注意:
其实后续步骤和使用Docker搭建MySQL主从复制(一主一从)这篇文章中的 开启Master-Slave主从复制 部分的内容基本一致。
进入Master库mysql客户端:输入show master status
查看Master状态:
docker exec -it mysql-master /bin/bash # 进入到master容器
mysql -uroot -p123456 # 进入到mysql客户端
查看master的状态:
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 1235 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记住File和Position,后面需要用到。此时一定不要操作Master库,否则将会引起Master状态的变化,File和Position字段也将会进行变化。
进入到Slave2库myslq客户端,执行如下命令:
change master to master_host='172.18.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='master-bin.000001', master_log_pos=1235, master_connect_retry=30;
在一主一从的文章中已经进行过说明,这里再次说明一下:
master_host :Master库的地址,指的是容器的独立ip,可以通过
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP
进行查询:
如下所示:
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave 中的mysql终端执行show slave status \G
用于查看主从同步状态。
show slave status \G
Slave_IO_Running 和 Slave_SQL_Running是查看主从是否运行的关键字段,默认为NO,表示没有进行主从复制。
使用start slave;
开启主从复制过程,然后再次查询主从同步状态show slave status \G
Slave_IO_Running
和 Slave_SQL_Running
都是Yes
,说明主从复制已经开启。此时可以测试数据同步是否成功。
具体测试可以参考一主一从中最后的测试方案,这里不再赘述。
至此,mysql的一主两从配置完成了。
简单记录,以备不时之需!!!