在 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不正确 | 查看 master 的 Position |
ID问题 | 查看 my.cnf 文件下的 server_id 是否唯一 |
参考文章:
https://juejin.im/post/5b0f91ab518825153749b1db
https://blog.csdn.net/shaobingj126/article/details/8128287
https://blog.51cto.com/8999a/1966548