本文详细讲解如何在Docker环境中配置MySQL从库以实现主从复制。通过创建容器、编写my.cnf配置文件、重启服务以及执行CHANGE MASTER TO命令,完成从库与主库的数据同步连接。
从库配置最终效果预览
完成所有配置后,从库将自动同步主库的数据变更。通过查看从库状态,可以看到I/O线程和SQL线程均处于运行状态(Running),表明主从复制链路已建立并正常工作。

前置准备说明
在开始配置从库之前,请确保已完成以下准备工作:
- 主库已就绪:主库MySQL已开启二进制日志(
log-bin),并创建了用于同步的专用账号。 - Docker环境:服务器已安装Docker,并拉取了
mysql:5.7镜像。 - 网络互通:从库容器能够访问主库容器的IP和端口。
从库配置操作步骤
第1步:创建并启动从库容器
首先,我们需要创建一个名为mysql-slave的Docker容器实例,并映射端口3308到容器内的3306。同时,将宿主机的目录挂载到容器内,以便持久化数据和配置文件。
- 执行以下命令创建容器:
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
此操作将启动一个后台运行的MySQL 5.7实例,根密码设置为root。

第2步:编写从库配置文件my.cnf
容器启动后,需要进入挂载的配置文件目录/mydata/mysql-slave/conf,新建并编辑my.cnf文件。该文件定义了从库的核心行为参数。
- 使用vim编辑器创建配置文件:
vim /mydata/mysql-slave/conf/my.cnf
- 将以下配置内容写入文件(已修复原文拼写错误):
[mysqld] ## 设置server_id,同一局域网中需唯一 server_id=102 # 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ### 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 # relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
关键参数解释:
server_id=102:从库的唯一标识,必须与主库及其他从库不同。log-bin:开启二进制日志,使从库在需要时可作为其他库的主库。read_only=1:设置从库为只读模式,防止业务数据直接写入从库导致主从不一致。log_slave_updates=1:将从库接收到的主库更新写入自己的二进制日志。

第3步:重启从库容器应用配置
配置文件修改完成后,必须重启容器才能使新配置生效。
- 回到主机终端,执行重启命令:
docker restart mysql-slave
重启后,从库将加载新的my.cnf配置,包括只读模式和二进制日志设置。

第4步:获取主库同步状态信息
在配置从库连接之前,需要知道主库当前的二进制日志文件名和位置点。请登录主库容器,执行以下命令:
show master status;
记录输出结果中的File(日志文件名)和Position(位置点)值,后续连接从库时需要用到。

第5步:进入从库并配置主从连接
最后,进入从库容器,登录MySQL,并执行CHANGE MASTER TO命令建立主从关系。
- 进入从库容器:
docker exec -it mysql-slave /bin/bash
- 登录MySQL:
mysql -uroot -proot

- 执行主从连接配置命令(请替换
master_host、master_user、master_password、master_log_file和master_log_pos为你的实际值):
CHANGE MASTER TO master_host='主库IP', master_user='同步用户名', master_password='同步用户密码', master_log_file='主库File值', master_log_pos=主库Position值;
- 启动同步线程:
start slave;
- 查看从库状态:
show slave statusG
若Slave_IO_Running和Slave_SQL_Running均显示为Yes,则主从复制配置成功。
问题与调整
- 问题:Slave_SQL_Running为No
原因:通常是由于主从数据不一致或主库执行了DDL操作导致。
解决:可尝试跳过错误set global sql_slave_skip_counter=1;后重启同步,或重新初始化从库数据。 - 问题:连接超时
原因:防火墙未开放端口或主库IP配置错误。
解决:检查网络连通性,确保从库能访问主库的3306端口。
总结
通过上述步骤,我们完成了Docker环境下MySQL从库的配置。关键在于正确编写my.cnf文件中的server_id和日志相关参数,并通过CHANGE MASTER TO命令准确指定主库的连接信息。配置完成后,建议定期监控show slave status的输出,确保数据同步的实时性和一致性。
以上就是Docker MySQL主从复制之从库配置的详细内容,更多关于Docker MySQL主从同步的资料请关注本站其它相关文章!











