MySQL主从中断常见原因解析与排查方案
当一个异常庞大的事务(包含单个或多个数据包)的尺寸超过了特定参数的大小时,该事务会暂时被保留。直到所有工作线程都清空了待处理队列,系统才会开始处理这个大型事务。在此期间,后续所有事务都会被保存起来,直到那个庞大事务最终处理完毕。这个过程有可能导致主从复制链路出现延迟。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
在生产环境中,为了确保数据库服务的高可用性,MySQL 通常会采用主从复制架构。常见的部署模式包括双向复制架构,或者是一主一从、一主多从的架构。
在主从复制架构的运行过程中,同样可能遭遇各种问题,例如复制同步中断。
本文旨在梳理常见的复制中断原因,并提供相应的解决方法。
1. 主键冲突
遇到主键冲突时,通常会看到类似下面的错误信息,错误代码为1062。
Could not execute Write_rows event on table xxx; Duplicate entry ‘xxx’ for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY......
对于主键冲突错误,一般的解决方法是直接在从库中找到并删除重复的记录即可。需要特别注意的是,删除前最好先备份数据,以备将来可能需要进行数据恢复。
2. 记录不存在
常见的“记录不存在”错误示例如下:
Could not execute Update_rows event on table xxx; Can't find record in ‘xxx’, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND......
或是:
Could not execute Delete_rows event on table xxx; Can't find record in ‘xxx’, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND......
对于1032错误,解决思路是依据报错信息,前往主库解析对应的binlog日志,找到那条具体的记录,然后手动插入到从库中。如果是在双向复制链路上操作,务必记得需要在会话级别临时关闭binlog写入,以避免操作形成循环。
无论是1062还是1032错误,大部分情况下都源自不规范的操作,例如人为直接在从库上进行了写入。因此,在生产环境中强烈建议将从库设置为只读模式。
3. 主库binlog丢失
主从同步错误码1236是我们所熟悉的,导致主库binlog不存在的报错原因可能包括:
从库未能及时同步主库的binlog,而主库的binlog由于时间过久已被自动清理。有人为在主库手动执行了purge binlog操作或直接删除了binlog文件。人为在主库误执行了reset master命令。请牢记,这是一项高风险操作。
报错信息如下:
Got fatal error 1236 from master when reading data from binary log...but the master has purged binary logs containing GTIDs that the slave requires
对于这种场景,通常只能选择对从库进行重建操作,没有其他捷径。
4. Relay Log损坏
中继日志(Relay Log)的损坏同样会导致主从同步中断,报错信息类似:
Last_SQL_Error:Error initializing relay log postion: I/O error reading the header from the binary logLast_SQL_Error:Error initializing relay log positon:Binlog has bad magic number:it’s not a binary log file that can be used by this version of MySQL.
从库服务器宕机、非法关机、电源故障、硬件故障等场景都有可能造成中继日志的损坏。
相应的解决方法是执行reset slave命令重置relay log。对于传统的基于位点的复制模式,需要依据Relay_Master_Log_File和Exec_Master_Log_Pos这两个变量的值来确定已经同步到的位置,并从这两个位置重新配置同步。
5. 参数问题
部分参数的配置不当也会导致同步中断,例如,可能看到如下报错:
Last_Error: Cannot schedule event Update_rows, relay-log name ...to Worker thread because its size 50450016 exceeds 16777216 of slave_pending_jobs_size_max
导致上述报错的原因是主从同步过程中,slave_pending_jobs_size_max参数的设置值过小。只需调大该参数即可,调整后需要重启复制进程。
slave_pending_jobs_size_max参数在MySQL 5.6版本后引入,默认单位是字节。如果未开启多线程复制,则此参数无效。其默认值为16MB,最大可设置为1GB。
需要注意的是,从库中此参数的值需要等于或大于主库的max_allowed_packet参数值,否则从库的工作队列可能会被填满。
另外,如果一个异常庞大的事件(包含一个或多个数据包)的大小超过了此参数的限制,该事件会被暂存,直到所有工作线程都有空余队列后才会进行处理。所有后续事件也会被保存,直到那个大事件完成。这可能会加剧主从链路的延迟。
相关攻略
Socket连接(准确说是Unix域套接字,Unix Domain Socket,UDS)是MySQL为本地进程间通信设计的专属连接方式,它并非网络协议,而是基于操作系统文件系统实现的进程通信机制。
新智元报道编辑:LRST【新智元导读】ContextBench首次从「过程」评测代码智能体,不再只看是否修好代码,而是追踪它是否精准找到并真正使用了关键代码片段,揭示了当前模型多读少用、被关键词误导
在之前的文章中,举了一个强制类型转换导致死锁的例子,有朋友询问是不是类型转换都不能命中索引,花1分钟细说一下。 《两个小公举,调试MySQL死锁必备!》中,举了一个强制类型转换导致死锁的例子,有朋友
MySQL 索引优化不用追求复杂,把以下五个基础技巧用熟,就能解决80%的索引问题。 MySQL索引优化是提升SQL查询效率的核心方法,用好索引能让慢查询“飞起来”,用不好反而会拖垮数据库。今天整理
今天和大家聊一个让无数 DBA 抓狂的问题:MySQL 异常宕机后,重启卡在 InnoDB。 今天想和大家聊一个让无数DBA抓狂的问题:MySQL异常宕机后,重启卡在“InnoDB: Startin
热门专题
热门推荐
4月3日消息,今日,vivo年度影像旗舰X300 Ultra正式开售,新机定位专业V单+口袋摄影机,影像能力全面拉满。vivo X300 Ultra配备蔡司大师镜头群,覆盖14mm蔡司超广角、35m
4月2日消息,微软资深Windows工程师Raymond Chen发布长文,呼吁用户和企业IT团队,不要每次在系统出现问题后就第一时间将责任归咎于Windows更新。Chen指出,许多被归咎于每月更
近期,日本玩家围绕卡普空旗下女性角色视觉风格的变迁展开了广泛讨论。有玩家将十年前以当时技术水准塑造的代表性美少女角色玛莉·萝丝,与近年运用最新技术打造的英格丽德进行对比,认为后者在角色表现力上并未体
有多少资深玩家还记得AQUAPLUS旗下那款经典的恋爱冒险作品ToHeart?多年来,关于推出第三部续作的呼声始终不绝于耳。然而,这一计划事实上已被官方终止。近日,该公司社长在一次访谈中透露了项目搁
2026年4月5日,电动自行车行业正面临双重压力:国家层面的以旧换新补贴政策正式退出,叠加原材料成本持续攀升,导致终端售价普遍上调,市场销售明显承压。根据2026年最新实施的消费品以旧换新政策,电动





