MySQL 数据库主从复制配置方法(基于 Docker 镜像)

准备 MySQL 一个主节点与两个从节点(基于 Docker 镜像部署)

# 注意替换<Root密码>
sudo docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<Root密码> --name mysql-master mysql:5.7

sudo docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=<Root密码> --name mysql-slave-01 mysql:5.7

sudo docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=<Root密码> --name mysql-slave-02 mysql:5.7

修改主节点 MySQL 配置文件(mysql-master)

  • 修改 MySQL 配置文件
# 进入主节点容器
saisimon@saisimon:~$ sudo docker exec -it mysql-master /bin/bash
# 更新 apt-get 源并安装 vim 编辑器
apt-get update && apt-get install vim
# 编辑 MySQL 配置文件
vim /etc/mysql/my.cnf
[mysqld]
server-id=100 # 同一个组下 Server ID 需要唯一
log-bin=mysql-bin # 开启二进制日志记录
# 登录 MySQL
mysql -u root -p
# 创建 slave 用户
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '<slave 密码>';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 退出 MySQL 命令行
mysql> exit
# 退出容器
exit
  • 重启 MySQL 
# 重启 mysql-master 容器
saisimon@saisimon:~$ sudo docker restart mysql-master
# 进入 mysql-master 容器
saisimon@saisimon:~$ sudo docker exec -it mysql-master /bin/bash
# 登录 MySQL
mysql -u root -p
# 查看主节点状态,记录下 File 与 Position 的值,避免对主节点有写入的操作,否则 File 与 Position的值会发生变化
mysql> show master status;

# 查看是否开启了二进制日志记录,log_bin 为 ON 即为开启
show VARIABLES like '%log_bin%';

修改从节点 MySQL 配置文件(mysql-slave-01、mysql-slave-02)

  • 修改 MySQL 配置文件
# 分别进入各个从节点容器
saisimon@saisimon:~$ sudo docker exec -it mysql-slave-01 /bin/bash
# 更新 apt-get 源并安装 vim 编辑器
apt-get update && apt-get install vim
# 编辑 MySQL 配置文件
vim /etc/mysql/my.cnf
  •  在配置文件中添加组
# mysql-slave-01 容器的 my.cnf 文件
[mysqld]
server-id=101 # 同一个组下 Server ID 需要唯一,多个从节点的Server ID 也需要唯一
log-bin=mysql-bin # 开启二进制日志记录(从节点可选)

# mysql-slave-02 容器的 my.cnf 文件
[mysqld]
server-id=102 # 同一个组下 Server ID 需要唯一,多个从节点的Server ID 也需要唯一
log-bin=mysql-bin # 开启二进制日志记录(从节点可选)
  •  重启 MySQL 
# 重启 mysql-slave-01 容器
saisimon@saisimon:~$ sudo docker restart mysql-slave-01
# 重启 mysql-slave-02 容器
saisimon@saisimon:~$ sudo docker restart mysql-slave-02
# 获取主节点 MySQL IP
saisimon@saisimon:~$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
# 进入 mysql-slave-01 容器
saisimon@saisimon:~$ sudo docker exec -it mysql-slave-01 /bin/bash
# 登录 MySQL
mysql -u root -p
# 添加主节点关联,注意替换<XXX>中的值
mysql> change master to master_host='<主节点 MySQL IP>', master_user='slave', master_password='<slave 密码>', master_port=<主节点 MySQL 端口>, master_log_file='<File>', master_log_pos=<Position>;
# 启动复制
mysql> start slave;
# 查看从节点状态
mysql> show slave status\G;

常见错误

  • ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first. 
# 从节点已启动复制,需要先停止复制才能修改与主节点的关联
mysql> stop slave;
  • 启动从节点的复制后,查看从节点的状态,Slave_IO_Running的值一直为 Connection,需要根据 Last_IO_Error 来推断出问题原因
  1. 用户的名称或密码不正确
  2.  从节点无法连接至主节点
  3.  File 或 Position 的值设置错误

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值