基于 docker 搭建 mysql5.7 主从复制

该教程详细介绍了如何在Docker环境下搭建MySQL主从复制,包括创建容器,避免端口冲突,安装必要的工具,修改配置文件,设置主从复制用户权限,以及处理可能出现的错误。通过阿里云源更新apt-get,确保软件安装顺利。最后,提供了主机和从机的配置步骤,以及查看主从同步状态的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装 docker 的教程可以看我的另一篇文章,拉取 mysql 镜像的步骤也在里面,在这不再重复:https://blog.youkuaiyun.com/wanzijy/article/details/128695674

1. 主机搭建

因为本人虚拟机中已经存在了 mysql ,所以在使用镜像创建容器的时候,就不使用 3306 端口,以防有影响

1.1 创建容器

docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
  • --name mysql-master : 指定容器的名字为 mysql-master
  • -p 3307:3306 : 对外暴露的 3307 接口,对应的映射到内部的 3306 接口
  • -e MYSQL_ROOT_PASSWORD=root :指定 mysql 中 root 用户的密码为 root

创建完后,进入容器

docker exec -it mysql-master /bin/bash

1.2 安装 vim 与 net-tools

apt-get install net-tools
apt-get install vim

如果正常安装成功的话,本章节就不用继续往下看了

1.2.1 安装 vim 与 net-tools 报错解决

如果这个时候出现以下信息,不要慌,往下看

在这里插入图片描述

出现上面的信息的话,其实只要更新一下 apt-get 就好,输入以下命令

apt-get update

如果正常更新成功的话,就像刚刚一样安装 net-tools 和 vim 就好,本章节也不用继续往下看了

1.2.2 更新 apt-get 报错解决

此时可能会如下出现报错信息

在这里插入图片描述

在容器内进入 /etc/apt/ 目录
因为要改配置文件,保险起见,还是复制一份备份的较好

# 备份 source.list
cp sources.list sources.list.bak

然后执行下面命令添加 apt 镜像源

echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list

然后再执行:apt-get update
成功后再安装:vim 和 net-tools
出现下面的警告,可以忽略
在这里插入图片描述

1.3 修改配置

打开 mysql 的配置文件

vim /etc/mysql/my.cnf

配置如下:

server-id=100  
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
  • server-id :同一局域网内注意要唯一
  • log-bin :开启二进制日志功能
  • binlog-ignore-db :复制过滤;不需要备份的数据库,mysql库一般不同步
  • binlog_cache_size :为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
  • binlog_format :主从复制的格式(mixed, statement, row),默认格式是 statement

配置好后,ctrl + d 退出容器
然后重启容器

docker restart mysql-master

2. 从机搭建

2.1 创建容器

docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root  -d mysql:5.7.13

像上述一样安装 vim 与 net-tools

2.2 修改配置

配置如下:

server-id=102
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
binlog-ignore-db=mysql
log_bin_trust_function_creators=true
binlog_cache_size=1M
binlog_format=mixed

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
  • relay_log :配置中继日志
  • log_bin_trust_function_creators :如果需要同步函数或者存储过程设置为 true
  • slave_skip_errors :跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断;如 1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致

3. 配置

3.1 主机操作

进入主机所在容器,登录 mysql

创建数据同步用户 slave,并授予 REPLICATION SLAVE 权限和 REPLICATION CLIENT 权限,用于在主从库之间同步数据,然后刷新

# 创建用户 slave,密码为 123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

# 授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

# 刷新
flush privileges;

查看 File(日志文件) 和 Position(复制开始的位置) 的值

show master status;

在这里插入图片描述

3.2 从机操作

3.2.1 绑定主机

进入从机所在容器,登录 mysql

change master to master_host='192.168.56.130', master_user='slave', master_password='123456', master_port=3307 , master_log_file='mysql-bin.000002',master_log_pos=761, master_connect_retry=30;
  • master_host :主机的地址,指的是容器的独立 IP
  • master_port:主机的端口号,指的是容器的端口号,要和 docker 启动时, 3306 端口向外暴露的端口号一致
  • master_user:用于数据同步的用户
  • master_password:用于同步的用户的密码
  • master_log_file:指定从机从哪个日志文件开始复制数据,即上面中提到的 File 字段的值
  • master_log_pos:从哪个位置开始读,即上面中提到的 Position 字段的值
  • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

3.2.2 启动

# 启动主从复制
start slave;

# 查看主从同步状态
show slave status\G;

在这里插入图片描述

当看到上面图片出现的两个值时,即为搭建成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lt0_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值