MySQL主从复制故障排查及解决方案

 更新时间:2026年03月04日 08:51:58   作者:·云扬·  
在 MySQL 生产运维里,主从复制是数据备份、读写分离、高可用架构的核心,但配置、网络、磁盘、数据一致性、日志清理等问题,总能让复制突然中断,因此本文给大家介绍了MySQL主从复制故障排查及解决方案,需要的朋友可以参考下

引言

在 MySQL 生产运维里,主从复制是数据备份、读写分离、高可用架构的核心,但配置、网络、磁盘、数据一致性、日志清理等问题,总能让复制突然中断。

今天我把实战中 9 类高频主从复制故障整理成文,包含问题模拟、报错分析、分步解决方案,遇到问题直接对照处理,高效救场!

1. server_id 重复导致复制中断

问题现象

从库启动复制报错:server_id of slave is equal to server_id of master,IO 线程无法启动。

解决方案

  1. 主从节点 server_id 必须唯一,修改从库:
set global server_id=唯一ID;
  1. 重启复制并验证:
stop slave;
start slave;
show slave status\G

看到 Slave_IO_Running/Slave_SQL_Running 均为 Yes 即恢复。

2. 主从 3306 端口不通

问题现象

从库状态显示 Slave_IO_Running: Connecting,报错连接超时 / 拒绝。

解决方案

  1. 主库放行从库 IP 的 3306 端口,清空拦截规则:
iptables -D INPUT 规则行号
  1. 从库验证端口连通性:
telnet 主库IP 3306
  1. 重启复制即可恢复。

3. 从库磁盘空间满

问题现象

磁盘使用率 100%,复制延迟飙升,甚至 MySQL 进程崩溃。

解决方案

  1. 清理无用大文件、过期日志:
rm -f 无用文件
  1. 磁盘释放后重启 MySQL 与复制:
/etc/init.d/mysql.server start
stop slave; start slave;

4. 主从数据冲突(对象已存在)

问题现象

从库已有主库要同步的库 / 表,SQL 线程中断。

解决方案

  • GTID 模式:跳过冲突事务
stop slave;
set @@session.gtid_next=冲突GTID;
begin; commit;
set session gtid_next='AUTOMATIC';
start slave;
  • 位点模式:跳过 1 个事务
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

5. 主库更新记录在从库缺失

问题现象

更新主库存在、从库已删的记录,报错:Can’t find record

解决方案

  1. 解析 Relay Log 定位缺失数据:
mysqlbinlog 中继日志 --start-position=位点 --base64-output=decode-rows -v > 解析文件
  1. 从库补全记录后重启复制。

6. 主库 Binlog 被清理,位点找不到

问题现象

从库提示:Could not find first log file name

解决方案

  1. 有正常从库:直接从正常从库重建复制。
  2. 无正常从库:用 XtraBackup 备份主库,重建从库复制关系。

7. GTID 空洞问题

产生原因

手动跳过事务、主从切换、盲目配置 slave-skip-errors=all

规避建议

  • GTID 模式禁止用 SQL_SLAVE_SKIP_COUNTER
  • 主从切换前保证全量同步
  • 不全局跳过所有错误

8. 主从 UUID 重复

问题原因

服务器克隆导致 auto.cnf 文件一致,UUID 相同。

解决方案

  1. 停止从库 MySQL
  2. 删除 data/auto.cnf
  3. 重启 MySQL,自动生成新 UUID
  4. 重新建立主从关系

9. 从库会读到比主库更新的数据?

在 “一主两从” 架构(1 个异步从库 + 1 个半同步从库)中,需结合 MySQL 复制类型和两阶段提交原理分析:

前置知识

  1. 两阶段提交:InnoDB 事务提交分两步:
    • Prepare 阶段:写入 Redo Log,标记事务为 “准备提交”;
    • Commit 阶段:写入 Binlog,再将 Redo Log 标记为 “已提交”。
  2. 复制类型
    • 异步复制:主库提交事务后立即返回客户端,不等待从库同步;
    • 半同步复制(after_commit):主库执行 Commit 阶段后,等待从库确认接收 Binlog 再返回;
    • 增强半同步复制(after_sync):主库执行 Prepare 阶段后,先发送 Binlog 给从库,待从库确认后再执行 Commit 阶段。

结论

特定场景会出现:增强半同步 after_sync 模式下,从库已落盘、主库未提交,从库可读到更新数据。

规避

改为 after_commit 模式,保证一致性。

排查总思路

  1. 先看线程:IO 线程问题→网络 / 配置 / 权限;SQL 线程问题→数据冲突 / 结构不一致
  2. 查日志:show slave status\G + 系统错误日志
  3. 按复制模式(GTID / 位点)选修复方案

日常运维建议

  • 定期检查磁盘、复制延迟、GTID 完整性
  • 主库 Binlog 保留足够时长
  • 禁止手动修改从库数据
  • 半同步优先用 after_commit

以上就是MySQL主从复制故障排查及解决方案的详细内容,更多关于MySQL主从复制故障排查解决的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL表的CURD使用

    MySQL表的CURD使用

    文章主要介绍了MySQL数据库操作的基本方法,包括创建表、插入数据、查询数据、更新数据和删除数据等,涵盖了表结构设计、数据插入、查询条件、排序、分页、更新和删除操作,以及聚合函数和GROUP BY子句的使用
    2025-02-02
  • 详解MySQL8的新特性ROLE

    详解MySQL8的新特性ROLE

    这篇文章主要介绍了详解MySQL8的新特性ROLE的相关资料,帮助大家更好的理解和使用MySQL8,感兴趣的朋友可以了解下
    2020-11-11
  • Canal实现MYSQL实时数据同步的示例代码

    Canal实现MYSQL实时数据同步的示例代码

    本文详细介绍了Canal部署的全过程,包括Canal-Admin、Canal-Server和Canal-Adapter的安装和配置,涵盖创建目录、修改配置文件、容器部署等步骤,适用于MYSQL8.0+环境,旨在帮助用户实现MYSQL实时数据同步
    2024-11-11
  • MySQL中表分区技术详细解析

    MySQL中表分区技术详细解析

    数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的。
    2016-06-06
  • MySQL定时任务,清理表数据方式

    MySQL定时任务,清理表数据方式

    这篇文章主要介绍了MySQL定时任务,清理表数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 解决MySQL因不能创建 PID 导致无法启动的方法

    解决MySQL因不能创建 PID 导致无法启动的方法

    这篇文章主要给大家介绍了关于解决MySQL因不能创建 PID 导致无法启动的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • MySQL 虚拟列和虚拟索引的实现

    MySQL 虚拟列和虚拟索引的实现

    虚拟列是MySQL 5.7开始引入的新特性,本文主要介绍了MySQL 虚拟列和虚拟索引的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 导致MySQL索引失效的一些常见写法总结

    导致MySQL索引失效的一些常见写法总结

    这篇文章主要给大家介绍了关于导致MySQL索引失效的一些常见写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 2017最新版windows安装mysql教程

    2017最新版windows安装mysql教程

    这篇文章主要介绍了2017最新版windows安装mysql教程,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2017-08-08
  • MySQL DQL从基础查询到实战优化全指南

    MySQL DQL从基础查询到实战优化全指南

    本文系统讲解MySQL DQL核心概念与规范,涵盖基础查询、条件筛选、聚合分析、分组排序及分页优化,强调避免SELECT*、合理使用索引、执行顺序理解,助你写出高效可读的查询语句,感兴趣的朋友跟随小编一起看看吧
    2025-09-09

最新评论