首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL主从复制维护与常见问题诊断全攻略

MySQL主从复制维护与常见问题诊断全攻略

作者头像
IT咸鱼
发布于 2025-06-09 17:55:57
发布于 2025-06-09 17:55:57
7620
举报

在深入维护与排查前,先理清本环境中组件关系和各部分职责,方便理解后续操作。

服务器

容器名称

MySQL角色

主要职责

命令执行场景

master

mysql-master

主库

负责写操作、记录变更日志(binlog)

服务器master终端,容器内操作

node1

mysql-node1

从库

实时同步主库数据,提供读操作

服务器node1终端,容器内操作

node2

mysql-node2

从库

实时同步主库数据,提供读操作

服务器node2终端,容器内操作

  • 主库通过**二进制日志(binlog)**记录所有数据变更
  • 从库通过relay log读取binlog,保持数据同步
  • 日常维护涉及主从同步状态检查、错误日志查看及同步中断的修复

二、MySQL主从复制维护的重要命令及其使用场景

以下命令主要在各自服务器的终端执行,且都需进入对应 MySQL 容器后运行。

进入对应容器:

代码语言:javascript
复制

# master服务器进入主库容器
dockerexec-it mysql-master bash

# node1服务器进入从库容器
dockerexec-it mysql-node1 bash

# node2服务器进入从库容器
dockerexec-it mysql-node2 bash

进入MySQL客户端:

代码语言:javascript
复制

mysql -uroot-p

注意:如果执行 docker命令时报错 bash: docker: 未找到命令,请先安装Docker,方法见下文【命令不存在问题解决】

三、重要命令及详细用法

3.1 查看主库当前状态(主库容器内执行)

代码语言:javascript
复制

SHOW MASTER STATUS;
  • 作用:显示当前主库的binlog文件和位置,复制从库时需用到。
  • 示例输出:

File

Position

Binlog_Do_DB

Binlog_Ignore_DB

mysql-bin.000005

120

3.2 查看从库复制状态(从库容器内执行)

代码语言:javascript
复制
SHOW SLAVE STATUS\G
  • 关键字段解释

字段

说明

Slave_IO_Running

IO线程状态,Yes表示连接主库正常

Slave_SQL_Running

SQL线程状态,Yes表示同步执行正常

Last_IO_Error

最近IO线程错误,若为空表示正常

Last_SQL_Error

最近SQL线程错误,若为空表示正常

  • 判断复制是否正常:两个Running字段都为Yes,且无错误信息。

3.3 停止和启动从库复制线程(从库容器内执行)

代码语言:javascript
复制

STOP SLAVE;
START SLAVE;
  • 作用:遇复制异常时,先停止线程,检查错误后修复,再重新启动。

四、常见问题及排查步骤详解

4.1 复制异常:Slave_IO_Running或Slave_SQL_Running为No

4.1.1 检查从库到主库的网络连通性(在从库服务器执行)
代码语言:javascript
复制

ping 主库IP地址
telnet 主库IP地址 3306
  • 目标:确保从库服务器能访问主库MySQL端口(默认3306)
  • 若 ping/telnet 报错:检查防火墙、网络策略,确保端口开放

4.1.2 登录从库MySQL,查看详细错误信息
代码语言:javascript
复制

SHOW SLAVE STATUS\G
  • 重点关注 Last_IO_Error和 Last_SQL_Error

4.1.3 常见错误示例及解决方案

错误信息

可能原因

解决方案

Access denied for user 'repl'@'xxx'

复制账号权限或密码错误

重新在主库创建复制账号,确认密码,赋予权限

Could not connect to master

网络不通或主库MySQL未启动

检查网络连通、主库MySQL状态,防火墙设置

Relay log read failure

relay log 损坏或权限问题

清理relay log,重启复制线程

Duplicate entry(主键冲突)

数据不同步导致冲突

查看错误SQL,手动处理冲突或重建从库


4.2 relay log 损坏导致复制停止,修复方法(从库容器内执行)

  1. 停止复制线程:
代码语言:javascript
复制

STOP SLAVE;
  1. 清除 relay log:
代码语言:javascript
复制

RESET SLAVE;
  1. 重新配置主库信息(示例):
代码语言:javascript
复制

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password',
  MASTER_LOG_FILE='mysql-bin.000005',
  MASTER_LOG_POS=120;
  1. 启动复制:
代码语言:javascript
复制

START SLAVE;
  1. 查看状态确认:
代码语言:javascript
复制

SHOW SLAVE STATUS\G

4.3 “命令不存在”情况排查

命令

可能原因

解决方案

使用场景

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

编辑配置文件


五、主从复制维护日常操作实战步骤


5.1 日常检查主从同步状态

  • 登录从库容器,查看复制状态:
代码语言:javascript
复制

dockerexec-it mysql-node1 bash
mysql -uroot-p
SHOW SLAVE STATUS\G
  • 确认:
代码语言:javascript
复制

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Error:
Last_SQL_Error:

5.2 遇到复制中断,快速排查和恢复流程

  1. 检查网络连通性
  2. 查看复制状态错误信息
  3. 按错误原因执行对应修复(如重置复制)
  4. 确认修复后启动复制线程
  5. 记录日志便于后续追踪

5.3 查看MySQL错误日志(容器内)

代码语言:javascript
复制

cat /var/log/mysql/error.log

或

代码语言:javascript
复制

docker logs mysql-master
docker logs mysql-node1
docker logs mysql-node2

六、配置文件修改与持久化建议

MySQL容器重启后,配置文件若未持久化将恢复默认,建议:

  • 在宿主机挂载自定义配置文件目录到容器

示例docker-compose或docker run命令:

代码语言:javascript
复制

docker run -d--name mysql-master \
-v /path/on/host/my.cnf:/etc/my.cnf \
-eMYSQL_ROOT_PASSWORD=yourpassword \
  mysql:8.0
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 二、MySQL主从复制维护的重要命令及其使用场景
  • 三、重要命令及详细用法
    • 3.1 查看主库当前状态(主库容器内执行)
    • 3.2 查看从库复制状态(从库容器内执行)
    • 3.3 停止和启动从库复制线程(从库容器内执行)
  • 四、常见问题及排查步骤详解
    • 4.1 复制异常:Slave_IO_Running或Slave_SQL_Running为No
      • 4.1.1 检查从库到主库的网络连通性(在从库服务器执行)
      • 4.1.2 登录从库MySQL,查看详细错误信息
      • 4.1.3 常见错误示例及解决方案
    • 4.2 relay log 损坏导致复制停止,修复方法(从库容器内执行)
    • 4.3 “命令不存在”情况排查
  • 五、主从复制维护日常操作实战步骤
    • 5.1 日常检查主从同步状态
    • 5.2 遇到复制中断,快速排查和恢复流程
    • 5.3 查看MySQL错误日志(容器内)
  • 六、配置文件修改与持久化建议
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档