
在深入维护与排查前,先理清本环境中组件关系和各部分职责,方便理解后续操作。
服务器 | 容器名称 | MySQL角色 | 主要职责 | 命令执行场景 |
|---|---|---|---|---|
master | mysql-master | 主库 | 负责写操作、记录变更日志(binlog) | 服务器master终端,容器内操作 |
node1 | mysql-node1 | 从库 | 实时同步主库数据,提供读操作 | 服务器node1终端,容器内操作 |
node2 | mysql-node2 | 从库 | 实时同步主库数据,提供读操作 | 服务器node2终端,容器内操作 |
以下命令主要在各自服务器的终端执行,且都需进入对应 MySQL 容器后运行。
进入对应容器:
# master服务器进入主库容器
dockerexec-it mysql-master bash
# node1服务器进入从库容器
dockerexec-it mysql-node1 bash
# node2服务器进入从库容器
dockerexec-it mysql-node2 bash
进入MySQL客户端:
mysql -uroot-p
注意:如果执行
docker命令时报错bash: docker: 未找到命令,请先安装Docker,方法见下文【命令不存在问题解决】

SHOW MASTER STATUS;
File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
|---|---|---|---|
mysql-bin.000005 | 120 |
SHOW SLAVE STATUS\G
字段 | 说明 |
|---|---|
Slave_IO_Running | IO线程状态,Yes表示连接主库正常 |
Slave_SQL_Running | SQL线程状态,Yes表示同步执行正常 |
Last_IO_Error | 最近IO线程错误,若为空表示正常 |
Last_SQL_Error | 最近SQL线程错误,若为空表示正常 |
STOP SLAVE;
START SLAVE;
ping 主库IP地址
telnet 主库IP地址 3306
SHOW SLAVE STATUS\G
Last_IO_Error和 Last_SQL_Error错误信息 | 可能原因 | 解决方案 |
|---|---|---|
Access denied for user 'repl'@'xxx' | 复制账号权限或密码错误 | 重新在主库创建复制账号,确认密码,赋予权限 |
Could not connect to master | 网络不通或主库MySQL未启动 | 检查网络连通、主库MySQL状态,防火墙设置 |
Relay log read failure | relay log 损坏或权限问题 | 清理relay log,重启复制线程 |
Duplicate entry(主键冲突) | 数据不同步导致冲突 | 查看错误SQL,手动处理冲突或重建从库 |
STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=120;
START SLAVE;
SHOW SLAVE STATUS\G
命令 | 可能原因 | 解决方案 | 使用场景 |
|---|---|---|---|
docker | Docker未安装或路径未加入环境变量 | 安装Docker:sudo yum install -y docker-ce并启动 sudo systemctl start docker | 管理容器,进入MySQL容器等 |
mysql | 未安装MySQL客户端 | 安装客户端:sudo yum install -y mysql;或进入容器内执行mysql | 登录MySQL命令行 |
vi或vim | 编辑器未安装 | 安装vim:sudo yum install -y vim | 编辑配置文件 |
dockerexec-it mysql-node1 bash
mysql -uroot-p
SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Error:
Last_SQL_Error:
cat /var/log/mysql/error.log
或
docker logs mysql-master
docker logs mysql-node1
docker logs mysql-node2
MySQL容器重启后,配置文件若未持久化将恢复默认,建议:
示例docker-compose或docker run命令:
docker run -d--name mysql-master \
-v /path/on/host/my.cnf:/etc/my.cnf \
-eMYSQL_ROOT_PASSWORD=yourpassword \
mysql:8.0