讲师中心 微信公众号
AI工具推荐 视频效率加速

何时不应跳过MySQL主从复制错误

老辰小哥_5540

老辰小哥_5540

发布时间:2026-09-02 10:57:17

|

187人浏览过

|

来源于php中文网

原创

表结构变更失败时不能跳过,因“Table 'db.t1' doesn't exist”等错误表明schema不一致,跳过将导致后续依赖持续报错;应停SQL线程、从库补对象或比对SHOW CREATE TABLE。

何时不应跳过mysql主从复制错误

遇到表结构变更失败时不能跳过

主从复制中若 Last_SQL_Error 显示类似 “Table 'db.t1' doesn't exist” 或 “Unknown column 'x' in 'field list'”,基本说明从库缺失建表语句、字段或索引。这类错误本质是 schema 不一致,跳过只会让后续所有依赖该表/字段的操作持续报错。

常见诱因包括:

  • 主库执行了 CREATE TABLE 或 ALTER TABLE,但该语句未成功写入 binlog(如事务被回滚、binlog_format=STATEMENT 下含非确定性函数)
  • 从库曾手动删表或改结构,且未同步到主库
  • 主从 sql_mode 不一致导致 DDL 解析失败

此时应停掉 SQL 线程,先在从库补上缺失对象,再 START SLAVE;若不确定变更内容,直接比对主从 SHOW CREATE TABLE 输出。

relay log 损坏或位置错乱时禁止跳过

当 SHOW SLAVE STATUS\G 中 Relay_Log_File 和 Relay_Log_Pos 明显异常(如文件名不连续、pos 跳变极大),或错误日志出现 “Corrupted replication event”、“Invalid event in relay log” 等字样,说明 relay log 本身已损坏。

此时 sql_slave_skip_counter 或 SET GTID_NEXT 都无效——因为跳过动作依赖 relay log 的事件边界,而边界已不可信。强行跳过可能导致后续事件解析错位,SQL 线程反复崩溃。

可靠做法是:

  • 确认主库当前 SHOW MASTER STATUS 的 File 和 Position
  • 在从库执行 STOP SLAVE; RESET SLAVE ALL; 清空 relay log 和复制元数据
  • 用 CHANGE MASTER TO MASTER_LOG_FILE='xxx', MASTER_LOG_POS=yyy 重新指向主库最新合法位置
  • 再 START SLAVE

并行复制下无主键表报 1032 错误时慎跳

MySQL 8.0+ 开启并行复制(slave_parallel_workers > 0)且表无主键时,Last_SQL_Error: Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND 很可能不是真丢失数据,而是 HASH_SCAN 算法哈希冲突导致的误判。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

这种场景跳过会掩盖真实问题:

  • 跳过之后,同一事务可能在其他 worker 中重放成功,造成主从数据“部分同步”
  • 下次更新仍可能因哈希冲突再次报 1032,形成循环
  • 根本解法是给表加主键,或临时关闭并行复制:SET GLOBAL slave_parallel_workers = 0

若必须跳过,务必先查 SELECT COUNT(*) FROM db.table 主从是否一致,并确认该表近期无手工 DELETE/UPDATE 操作。

启用 slave_skip_errors 全局配置后仍报错时不要硬跳

如果已在配置文件中设置了 slave_skip_errors = 1062,1032,但 SHOW SLAVE STATUS 仍显示 Slave_SQL_Running: No,说明错误码不在白名单内,或错误类型不匹配(比如报的是 1236、1410 等严重错误)。

典型陷阱:

  • slave_skip_errors = ALL 在 MySQL 8.0.26+ 已被弃用,设了也无效
  • GTID 模式下该参数完全不生效,跳过逻辑由 GTID 集合控制
  • 某些错误(如 1236 “Could not find first log file name in binary log index file”)属于 IO 层故障,和 SQL 执行无关,跳过毫无意义

此时应优先检查主库 binlog 是否被 purge、网络是否中断、或磁盘空间是否满,而不是尝试绕过错误码。

真正危险的不是跳过那条语句,而是跳过之后没发现 auto-increment 值偏移、唯一索引残留脏数据、或 binlog_format=STATEMENT 下 NOW() 导致的时间戳错位——这些不会立刻报错,但会在下一次 INSERT 或 UPDATE 时突然爆发,且难以回溯。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2033

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1259

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

735

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2692

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4468

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1039

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4731

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4242

2023.08.14

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 178人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 282人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn