Docker 中搭建 MySQL 主从复制

Posted poterliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 中搭建 MySQL 主从复制相关的知识,希望对你有一定的参考价值。

说明

mysql 版本 5.7

搭建一主二从架构

启动三个 MySQL5 容器

docker run -d \\
 --name=mysql5-3317 \\
 -p 3317:3306 \\
 -e MYSQL_ROOT_PASSWORD=poterliu \\
 -h mysql5-3317 \\
 --net=mysql5 \\
 mysql:5.7


docker run -d \\
 --name=mysql5-3318 \\
 -p 3318:3306 \\
 -e MYSQL_ROOT_PASSWORD=poterliu \\
 -h mysql5-3318 \\
 --net=mysql5 \\
 mysql:5.7
 
docker run -d \\
 --name=mysql5-3319 \\
 -p 3319:3306 \\
 -e MYSQL_ROOT_PASSWORD=poterliu \\
 -h mysql5-3319 \\
 --net=mysql5 \\
 mysql:5.7

修改配置文件 my.conf

可能在以下两个目录中:/etc/my.cnf 或 /etc/mysql/my.cnf文件

master

[mysqld]下面增加几行配置:

[mysqld]
log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=1

slave

[mysqld]下面增加几行配置:

[mysqld]
log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=2
[mysqld]下面增加几行配置:

[mysqld]
log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=3

重启 docker 容器!

master

CREATE USER \'repl\'@\'172.22.0.*\' IDENTIFIED BY \'poterliu\';
GRANT REPLICATION SLAVE ON *.* TO \'repl\'@\'172.22.0.*\';
FLUSH PRIVILEGES;

将 repl 的 host 手动修改为 % 才能在 slave 连接成功

其他指令

show global variables like \'%log%\';
show global variables like \'%server%\';

获取binlog名字和position

接下来要获取最新的binlog文件名和position

show master status;

记住file名字和position,后面会用到。
这个时候master不要发生写操作,否则position和file可能会变化。

slave

change master to master_host=\'mysql5-3317\', master_user=\'repl\', master_password=\'poterliu\', master_log_file=\'mysql-bin.000001\', master_log_pos=1380;

查看从节点状态

show slave status \\G;

注意,主从同步成功的标志:
IO线程和SQL线程都是成功运行的:

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

现在可以在master节点上面做任意对于库表的修改操作,slave会自动同步。
不要直接操作slave。

如果IO线程not running:

stop slave;                                                      
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;                                                      
show slave status \\G

注意事项

基于 docker 花了两个小时搭建完成,遇到的一些注意事项。

1、改完 my.conf 文件需要重启 docker 容器或 MySQL,目的是让配置文件生效。

2、master 上新增的 repl 用户授权 host 是 IP 时可能导致 slave 上不能修改 master 成功,将 host 改为 % 就可以了,目的是为了搭建成功。

3、当 slave 在执行同步时发生错误时(错误可能是因为表冲突、数据库冲突等),Slave_IO_Running 和 Slave_SQL_Running 都将关闭,需要重启 salve,即执行:

stop slave;

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

start slave。

4、docker 运行的 MySQL 容器需要处于同一个通络中。

以上是关于Docker 中搭建 MySQL 主从复制的主要内容,如果未能解决你的问题,请参考以下文章

基于Docker搭建MySQL主从复制

基于Docker搭建MySQL主从复制

基于 Docker 搭建 MySQL 主从复制

Docker 中搭建 MySQL 主从复制

基于Docker的Mysql主从复制搭建

基于Docker的Mysql主从复制搭建