在 docker 上搭建 mysql 主从同步

在 docker 上搭建 mysql 主从同步

这一章主要讲解如何在 docker 上搭建 mysql 的主从同步

一、拉取镜像

docker pull mysql:5.6 # 拉取mysql镜像

二、准备文件

# 文件目录如下
tree -L 2
# .
# └── mysql
#     ├── master
#     │   ├── data
#     │   └── my.cnf
#     └── slaver
#         ├── data
#         └── my.cnf
# master 内的 my.cnf 文件内容为
cat mysql/master/my.cnf

# 以下为文档内容 #
[mysqld]
# 用于标识不同的数据库服务器,而且唯一
server_id=1
# 需要启用二进制
log-bin=mysql-bin
read-only=0
# 指定同步的数据库
binlog-do-db=test_db
# 忽略记录二进制日志的数据库
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
# slaver 内的 my.cnf 文件内容为
cat mysql/slaver/my.cnf

# 以下为文档内容 #
[mysqld]
# 用于标识不同的数据库服务器,而且唯一
server_id=2
# 需要启用二进制
log-bin=mysql-bin
read-only=1
# 指定同步的数据库
binlog-do-db=test_db
# 忽略记录二进制日志的数据库
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

三、启动两个 MySQL 容器

# 启动 mysql_master 容器
docker run -d --name mysql_master -p 3316:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/dev/docker/mysql/master/data:/var/lib/mysql -v ~/dev/docker/mysql/master/my.cnf:/etc/mysql/my.cnf mysql:5.6

# 启动 mysql_salvar 容器
docker run -d --name mysql_slaver -p 3326:3306 -e MYSQL_ROOT_PASSWORD=123456  -v ~/dev/docker/mysql/slaver/data:/var/lib/mysql -v ~/dev/docker/mysql/slaver/my.cnf:/etc/mysql/my.cnf mysql:5.6

四、在 mysql_master 容器内创建主从同步账号

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';

show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |     1698 | test_db      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

五、 查询容器 ip

docker inspect -f {{.NetworkSettings.IPAddress}} mysql_master

# 172.17.0.2

六、 在 mysql_slaver 容器内开启主从同步

change master to master_host='172.17.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=1698,master_port=3306;


/**
 * 参数说明
 * master_host:主库地址
 * master_user:主库创建的同步账号
 * master_password:主库创建的同步密码
 * master_log_file:主库产生的日志
 * master_log_pos:主库日志记录偏移量
 * master_port:主库使用的端口,默认为3306
 **/
start slave;

show slave status;

/**
 * 查看以下两个字段是否为yes
 * Slave_IO_Running: yes
 * Slave_SQL_Running: yes
 *
 */

遇到的错误

mysql 主从同步时遇到 Slave_IO_Running: Connecting 问题可以按一下步骤进行逐一排查

问题 解决方法
网络不通 互相 ping 一下,查看丢包率
密码不对
pos不正确 查看 masterPosition
ID问题 查看 my.cnf 文件下的 server_id 是否唯一

参考文章:

https://juejin.im/post/5b0f91ab518825153749b1db

https://blog.csdn.net/shaobingj126/article/details/8128287

https://blog.51cto.com/8999a/1966548

猜你喜欢

转载自www.cnblogs.com/pandaLIU/p/12357123.html