Docker 中搭建 MySQL 主从复制
2021/6/5 19:24:36
本文主要是介绍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 主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程