一、先看判断主从是否正常(万能命令)
show slave status\G
只看 3 个字段:
- Slave_IO_Running: Yes/No
- Slave_SQL_Running: Yes/No
- Seconds_Behind_Master: 0/数字
只要有一个 No,就是同步失败!
二、主从故障两大分类(必背)
1. IO 线程挂掉(Slave_IO_Running = No)
原因:网络、权限、位置、binlog 不存在→ 从库拿不到主库的 binlog
2. SQL 线程挂掉(Slave_SQL_Running = No)
原因:主从数据不一致、主键冲突、表不存在、DDL 冲突→ 从库拿到了 binlog,但执行失败
口诀:IO 是连接问题,SQL 是数据/执行问题。
三、高频故障 1:IO 线程挂掉(最常见)
1. 主库 IP 变更/网络不通
- 报错:
error connecting to master - 排查:
ping、telnet 端口、防火墙、安全组
2. 主从同步账号密码错/权限不足
- 报错:
access denied - 排查:主库授权账号是否存在
grant replication slave on *.* to 'user'@'%' identified by 'xxx';
3. 主库 binlog 被 purge 删除(从库要读的文件不存在)
- 报错:
could not find first log file name in binary log index - 解决:重新 change master 指向最新 binlog,或重做全量同步
4. 主库开启 GTID,从库没有开启
- 报错:
GTID mode is off - 解决:主从都要开启/关闭 gtid_mode=ON
5. 主库重启、重置 binlog
- 从库位点丢失 → IO 线程挂
四、高频故障 2:SQL 线程挂掉(90% 开发/运维踩坑)
1. 主键冲突(Duplicate entry)
- 原因:从库被手动写入数据,主库又插入相同 ID
- 报错:
Error 1062 - 最常见!
2. 表不存在(Table doesn’t exist)
- 原因:主库建表,从库没同步;或从库误删表
3. 从库执行了 DDL,主库又执行一遍
- 报错:
Table already exists
4. 大事务回滚/长事务导致同步卡住
- 现象:Seconds_Behind_Master 一直涨
- 原因:主库大事务,从库单线程回放慢
5. 主库执行了 drop database,从库库不存在
- SQL 线程直接挂
五、高频故障 3:主从延迟(Seconds_Behind_Master > 0)
1. 从库配置太低(CPU/IO 差)
2. 大事务、慢 SQL 在从库执行
3. 从库是单线程 SQL 回放(MySQL 5.6 以前)
4. 从库被业务查询,压力大
5. 主库写入 TPS 太高,从库跟不上
六、高频故障 4:主从复制中断,误操作跳过错误
跳过 1 个错误(临时修复,不根治)
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
GTID 模式跳过错误
stop slave;
set gtid_next = 'xxxxxx';
begin;commit;
set gtid_next = automatic;
start slave;
七、万能排查流程(面试必背,直接说这套)
1. 看状态
show slave status\G
2. 看错误
看 Last_IO_Error、Last_SQL_Error
- 有 connect/network/access → IO 故障
- 有 1062/1146 等错误码 → SQL 故障
3. 定位原因
- IO 挂:网络、权限、binlog 丢失
- SQL 挂:数据不一致、从库写入、DDL 冲突
4. 修复
- 临时:skip 跳错误
- 根治:重新做主从全量同步
八、面试标准答案(直接存入 Obsidian)
tags: #MySQL #主从 #故障排查 #面试
题型:简答/实操
难度:中高级
题目:MySQL主从同步常见故障及排查思路?
精简答案:
1. 先通过 show slave status\G 判断 IO 和 SQL 线程状态。
2. IO 线程挂掉:网络不通、同步账号权限错、主库 binlog 被删除、位点不对。
3. SQL 线程挂掉:从库手动写入导致主键冲突、表不存在、DDL 执行冲突、数据不一致。
4. 主从延迟:大事务、从库性能低、从库压力大。
5. 排查顺序:看状态→看错误信息→区分IO/SQL故障→定位原因→修复。
易错点:从库写入数据是导致 SQL 线程挂掉的最主要原因。
你要我继续讲哪个?
- MySQL 主从一致性校验(pt-table-checksum)
- MySQL 主从切换实战步骤
- GTID 主从原理与故障
- MyCat 分库分表面试题
直接说 数字 我继续!
关联文档 -../MySQL 复制原理与配置 — 复制原理 -../MySQL 主从复制备份方式对比 — 备份方式
- ../面试题/MySQL 日志与复制 — 面试题