为什么MySQL主从复制报Error executing row event错误以及怎么重新同步?

陌静小哥_6217

陌静小哥_6217

2026-07-14

223人浏览

原创

error执行row event是因从库缺失表、字段不匹配或记录不存在,根本原因是schema或数据状态未与主库对齐;需通过show slave status定位last_errno(如1146/1032/1666)和last_error,再检查库表存在性、binlog_format一致性,并针对性导出导入缺失库或修正配置。

为什么mysql主从复制报error executing row event错误以及怎么重新同步?

这是从库执行主库发来的 row-based binlog 事件时,找不到对应表或数据导致的硬性失败,不能靠跳过事务解决,必须对齐 schema 和数据状态。

为什么出现 Error executing row event?

根本原因是:从库 SQL 线程尝试重放主库的 row event(比如 UPDATE_ROWS、DELETE_ROWS),但目标表不存在、字段不匹配、或某行记录在从库上根本不存在。

常见触发场景包括:

  • 主库删了表,但 binlog 里没记录 DROP TABLE(尤其用 binlog-ignore-db 过滤时);从库没该表,却收到对该表的 row event
  • 主库有 zabbix 库,但从库没导入,直接启 slave 就会报 Table 'zabbix.history_uint' doesn't exist
  • 主库执行了 DDL(如 ALTER TABLE),但从库 schema 没同步,row event 中列数/类型与实际表结构不符
  • 主从 binlog_format 不一致:主库是 ROW,从库设成 STATEMENT,导致从库无法解析 row event

如何确认具体出错点?

先查 SHOW SLAVE STATUS\G,重点关注三处:

  • Slave_SQL_Running: No —— SQL 线程已停
  • Last_Errno(如 1146 表不存在、1032 找不到记录、1666 binlog_format 冲突)
  • Last_Error 字段里的完整报错,例如 Error executing row event: 'Table 'zabbix.history_uint' doesn't exist'

如果报错指向某个库或表,立刻检查从库是否存在该库:SHOW DATABASES LIKE 'zabbix';,再进库查表:USE zabbix; SHOW TABLES LIKE 'history_uint';

MySQL
MySQL

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

下载

怎么安全重新同步?

跳过事务(SET GLOBAL sql_slave_skip_counter = 1)只适用于偶发性单条数据不一致,对 schema 缺失或格式错配无效,强行跳过会导致后续持续报错。

正确做法分两类:

  • 缺失库/表:从主库导出对应库(mysqldump -u root -p --master-data=2 zabbix > zabbix.sql),scp 到从库,CREATE DATABASE zabbix; 后导入,再 START SLAVE;
  • binlog_format 不匹配:在从库执行 SET GLOBAL binlog_format = 'ROW';,并确认已写入 /etc/my.cnf 的 [mysqld] 段落(否则重启失效)
  • relay log 损坏或 position 错位:用 SHOW SLAVE STATUS 查 Relay_Master_Log_File 和 Exec_Master_Log_Pos,然后 STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000025', MASTER_LOG_POS=1010663436; START SLAVE;

注意:--master-data=2 参数必须加,它会在 dump 文件里写入 CHANGE MASTER 所需的 binlog 位置,避免手动算 offset 出错。

最容易被忽略的细节

很多故障表面看是“表不存在”,实际根子在配置层:比如主库开了 binlog-do-db=traffic,但误操作在 zabbix 库建表,这部分 binlog 不会被记录,从库自然没机会同步该库——此时不是重同步问题,而是主库 binlog 过滤策略本身就不支持跨库复制。

相关专题

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

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

2023.06.20

2293

6

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

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

2023.06.21

1399

5

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

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

2023.07.18

815

5

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

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

2023.07.19

3172

5

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

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

2023.07.25

5388

4

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

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

2023.08.08

1199

3

sqlserver和mysql区别
sqlserver和mysql区别

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

2023.08.11

5651

4

mysql忘记密码
mysql忘记密码

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

2023.08.14

4922

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6574

11

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
mysql8主从复制原理底层详解
mysql8主从复制原理底层详解

共1课时 | 706人学习

SQL优化与排查(MySQL版)
SQL优化与排查(MySQL版)

共26课时 | 3.3万人学习

mysql8主从复制原理底层详解
mysql8主从复制原理底层详解

共1课时 | 706人学习