位置:首页 > 其他编程语言 > Docker环境下MySQL主从复制从库配置完整指南

Docker环境下MySQL主从复制从库配置完整指南

时间:2026-08-31  |  作者:实验室老王  |  阅读:0

本文详细讲解如何在Docker环境中配置MySQL从库以实现主从复制。通过创建容器、编写my.cnf配置文件、重启服务以及执行CHANGE MASTER TO命令,完成从库与主库的数据同步连接。

从库配置最终效果预览

完成所有配置后,从库将自动同步主库的数据变更。通过查看从库状态,可以看到I/O线程和SQL线程均处于运行状态(Running),表明主从复制链路已建立并正常工作。

MySQL从库容器终端界面,显示成功进入mysql命令行的状态
图1:成功进入MySQL从库容器终端界面

前置准备说明

在开始配置从库之前,请确保已完成以下准备工作:

  • 主库已就绪:主库MySQL已开启二进制日志(log-bin),并创建了用于同步的专用账号。
  • Docker环境:服务器已安装Docker,并拉取了mysql:5.7镜像。
  • 网络互通:从库容器能够访问主库容器的IP和端口。

从库配置操作步骤

第1步:创建并启动从库容器

首先,我们需要创建一个名为mysql-slave的Docker容器实例,并映射端口3308到容器内的3306。同时,将宿主机的目录挂载到容器内,以便持久化数据和配置文件。

  1. 执行以下命令创建容器:
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

Docker终端执行创建mysql-slave容器的命令及输出结果
图2:Docker终端执行创建mysql-slave容器的命令及输出结果

第2步:编写从库配置文件my.cnf

容器启动后,需要进入挂载的配置文件目录/mydata/mysql-slave/conf,新建并编辑my.cnf文件。该文件定义了从库的核心行为参数。

  1. 使用vim编辑器创建配置文件:
vim /mydata/mysql-slave/conf/my.cnf
  1. 将以下配置内容写入文件(已修复原文拼写错误):
[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:将从库接收到的主库更新写入自己的二进制日志。
vim编辑器中显示的my.cnf配置文件内容截图
图3:vim编辑器中显示的my.cnf配置文件内容截图

第3步:重启从库容器应用配置

配置文件修改完成后,必须重启容器才能使新配置生效。

  1. 回到主机终端,执行重启命令:
docker restart mysql-slave

重启后,从库将加载新的my.cnf配置,包括只读模式和二进制日志设置。

Docker终端执行docker restart mysql-slave命令后的输出结果
图4:Docker终端执行docker restart mysql-slave命令后的输出结果

第4步:获取主库同步状态信息

在配置从库连接之前,需要知道主库当前的二进制日志文件名和位置点。请登录主库容器,执行以下命令:

show master status;

记录输出结果中的File(日志文件名)和Position(位置点)值,后续连接从库时需要用到。

主库MySQL执行show master status命令后的结果截图,显示File和Position值
图5:主库MySQL执行show master status命令后的结果截图,显示File和Position值

第5步:进入从库并配置主从连接

最后,进入从库容器,登录MySQL,并执行CHANGE MASTER TO命令建立主从关系。

  1. 进入从库容器:
docker exec -it mysql-slave /bin/bash
  1. 登录MySQL:
mysql -uroot -proot
Docker终端执行docker exec命令进入mysql-slave容器并登录mysql的界面
图6:Docker终端执行docker exec命令进入mysql-slave容器并登录mysql的界面
  1. 执行主从连接配置命令(请替换master_hostmaster_usermaster_passwordmaster_log_filemaster_log_pos为你的实际值):
CHANGE MASTER TO
  master_host='主库IP',
  master_user='同步用户名',
  master_password='同步用户密码',
  master_log_file='主库File值',
  master_log_pos=主库Position值;
  1. 启动同步线程:
start slave;
  1. 查看从库状态:
show slave statusG

Slave_IO_RunningSlave_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主从同步的资料请关注本站其它相关文章!

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多