MySQL

MySQL 主从同步故障排查

·6 分钟阅读·2228 字

梳理MySQL 主从同步的故障定位流程、关键命令与处理方案

📋 目录

MySQL 主从同步故障排查

1. 先看判断主从是否正常(万能命令)


show slave status\G

只看 3 个字段:

  1. Slave_IO_Running: Yes/No
  2. Slave_SQL_Running: Yes/No
  3. Seconds_Behind_Master: 0/数字 只要有一个 No,就是同步失败!

2. 主从故障两大分类(必背)

3. IO 线程挂掉(Slave_IO_Running = No)

原因:网络、权限、位置、binlog 不存在→ 从库拿不到主库的 binlog

4. SQL 线程挂掉(Slave_SQL_Running = No)

原因:主从数据不一致、主键冲突、表不存在、DDL 冲突→ 从库拿到了 binlog,但执行失败

口诀:IO 是连接问题,SQL 是数据/执行问题。


5. 高频故障 1:IO 线程挂掉(最常见)

6. 主库 IP 变更/网络不通

  • 报错:error connecting to master
  • 排查:ping、telnet 端口、防火墙、安全组

7. 主从同步账号密码错/权限不足

  • 报错:access denied
  • 排查:主库授权账号是否存在

grant replication slave on *.* to 'user'@'%' identified by 'xxx';

8. 主库 binlog 被 purge 删除(从库要读的文件不存在)

  • 报错:could not find first log file name in binary log index
  • 解决:重新 change master 指向最新 binlog,或重做全量同步

9. 主库开启 GTID,从库没有开启

  • 报错:GTID mode is off
  • 解决:主从都要开启/关闭 gtid_mode=ON

10. 主库重启、重置 binlog

  • 从库位点丢失 → IO 线程挂

11. 高频故障 2:SQL 线程挂掉(90% 开发/运维踩坑)

12. 主键冲突(Duplicate entry)

  • 原因:从库被手动写入数据,主库又插入相同 ID
  • 报错:Error 1062
  • 最常见!

13. 表不存在(Table doesn’t exist)

  • 原因:主库建表,从库没同步;或从库误删表

14. 从库执行了 DDL,主库又执行一遍

  • 报错:Table already exists

15. 大事务回滚/长事务导致同步卡住

  • 现象:Seconds_Behind_Master 一直涨
  • 原因:主库大事务,从库单线程回放慢

16. 主库执行了 drop database,从库库不存在

  • SQL 线程直接挂

17. 高频故障 3:主从延迟(Seconds_Behind_Master > 0)

18. 从库配置太低(CPU/IO 差)

19. 大事务、慢 SQL 在从库执行

20. 从库是单线程 SQL 回放(MySQL 5.6 以前)

21. 从库被业务查询,压力大

22. 主库写入 TPS 太高,从库跟不上


23. 高频故障 4:主从复制中断,误操作跳过错误

24. 跳过 1 个错误(临时修复,不根治)


stop slave;

set global sql_slave_skip_counter = 1;

start slave;

25. GTID 模式跳过错误


stop slave;

set gtid_next = 'xxxxxx';

begin;commit;

set gtid_next = automatic;

start slave;

26. 万能排查流程(面试必背,直接说这套)

27. 看状态


show slave status\G

28. 看错误

看 Last_IO_Error、Last_SQL_Error

  • 有 connect/network/access → IO 故障
  • 有 1062/1146 等错误码 → SQL 故障

29. 定位原因

  • IO 挂:网络、权限、binlog 丢失
  • SQL 挂:数据不一致、从库写入、DDL 冲突

30. 修复

  • 临时:skip 跳错误
  • 根治:重新做主从全量同步

31. 面试标准答案(直接存入 Obsidian)


tags: #MySQL #主从 #故障排查 #面试

题型:简答/实操

难度:中高级

题目:MySQL主从同步常见故障及排查思路?

精简答案:

1. 先通过 show slave status\G 判断 IO 和 SQL 线程状态。

2. IO 线程挂掉:网络不通、同步账号权限错、主库 binlog 被删除、位点不对。

3. SQL 线程挂掉:从库手动写入导致主键冲突、表不存在、DDL 执行冲突、数据不一致。

4. 主从延迟:大事务、从库性能低、从库压力大。

5. 排查顺序:看状态→看错误信息→区分IO/SQL故障→定位原因→修复。

易错点:从库写入数据是导致 SQL 线程挂掉的最主要原因。

32. 你要我继续讲哪个?

  1. MySQL 主从一致性校验(pt-table-checksum)
  2. MySQL 主从切换实战步骤
  3. GTID 主从原理与故障
  4. MyCat 分库分表面试题 直接说 数字 我继续!

关联文档 -MySQL 复制原理与配置:复制原理 -MySQL 主从复制备份方式对比:备份方式

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro