mysql主从同步报错,提示Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most

本文详细记录了一次MySQL主从复制过程中遇到的错误解决过程。通过检查错误日志、定位异常数据、对比主从库数据差异,最终通过跳过特定事务解决了主从不同步的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql主从不同步,提示Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction

昨天zabbix突然发送告警信息,告警说是mysql的slave停掉了,登录到数据库从库,进去看mysql的进程是正常的,然后去看下mysql的error日志
在这里插入图片描述

1,进入数据库查看主从状态 show slave status\G;
根据提示查询到的错误信息
Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ‘d393d2e3-9b61-11e5-82bf-141877342ba0:171661170’ at master log mysql-bin.000063, end_log_pos 171661170. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

在这里插入图片描述

2,根据上图的提示,查询到的异常数据出现在opp_strack表中
select * from performance_schema.replication_applier_status_by_worker\G;
确定事务发生在表 opp_strack 上,定位到表,再去排查是哪一条记录
在这里插入图片描述

3,去主库的对应的binlog日志中去查找数据库操作记录
mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /zdata/mysql_data/mysql-bin.000063 | grep -A 20 “171661170” --color

–/zdata/mysql_data/mysql-bin.000063是在主从状态中查找的
在这里插入图片描述
binlog日志中查询到opp_strack表的更新操作,然后对比主从库opp_strack表中字段“1683”的数据,我这边得到的数据是不一致的,发现从库opp_strack中被插入进来三条数据,冲掉了主库的id值,然后将从库中的三条数据删除掉

4,主从数据恢复一致后需要在slave上跳过报错的事务
在从库中执行
Stop slave;
Set @@SESSION.GTID_NEXT=’ d393d2e3-9b61-11e5-82bf-141877342ba0:171661170’
Begin;
Commit;
Set @@SESSION.GTID_NEXT = AUTOMATIC;
Start slave;
再次查看从库状态,恢复正常即解决
Show slave status\G
在这里插入图片描述

mysql> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Master_Host: Master_User: Master_Port: 3306 Connect_Retry: 60 Master_Log_File: Read_Master_Log_Pos: 4 Relay_Log_File: mysql-binlog.000001 Relay_Log_Pos: 1821 Relay_Master_Log_File: Slave_IO_Running: No Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1049 Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '28d37105-660a-11f0-bb16-8ac03ce6f98d:2' at master log , end_log_pos 2104, consensus_index 1. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any. Skip_Counter: 0 Exec_Master_Log_Pos: 1821 Relay_Log_Space: 3506 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1049 Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction '28d37105-660a-11f0-bb16-8ac03ce6f98d:2' at master log , end_log_pos 2104, consensus_index 1. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any. Replicate_Ignore_Server_Ids: Master_Server_Id: 0 Master_UUID: Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: 250721 19:27:29 Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: 03f40bd3-6608-11f0-9943-16f83da9284e:1-3, 28d37105-660a-11f0-bb16-8ac03ce6f98d:1-7 Executed_Gtid_Set: 28d37105-660a-11f0-bb16-8ac03ce6f98d:1 Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row in set, 1 warning (0.00 sec) ERROR: No query specified mysql>
最新发布
07-22
<think>嗯,用户遇到了MySQL复制中的错误1396,具体是Worker失败执行事务的问题。我需要先理解这个错误代码的含义。根据之前处理过的类似问题,错误代码通常对应特定的问题。比如,1032是键冲突,而1396可能不同。 首先,我应该查一下MySQL官方文档,看看错误1396代表什么。根据记忆,1396通常与权限相关,比如用户权限问题或者操作失败。可能在复制过程中,从库尝试执行一个需要特定权限的操作,但权限不足,导致Worker失败。 接下来,用户提到这是与Worker失败相关的问题,所以需要检查复制状态。使用SHOW SLAVE STATUS命令查看Last_ErrorLast_Errno确认错误信息。此外,查看performance_schema.replication_applier_status_by_worker表获取更详细的信息,这可能帮助定位具体的事务和操作。 然后,考虑可能的解决方案。根据引用中的例子,比如跳过错误或者处理数据不一致。但1396可能涉及权限,所以需要检查主从库的用户权限是否一致。例如,如果主库上执行了CREATE USER或ALTER USER语句,而从库上用户已经存在或不存在,可能导致错误。 另外,可能需要临时跳过这个错误,使用SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1或者GTID跳过。但需谨慎,确保跳过不会导致数据不一致。如果错误是权限问题,可能需要同步主从的用户权限,或者在从库手动修复。 还有,查看错误日志获取更多上下文,确认具体失败的事务和操作。例如,是否是某个特定的DDL语句导致的。如果是,可能需要手动在从库执行或调整复制过滤规则。 最后,预防措施,比如确保主从环境一致,定期检查复制状态,使用pt-table-checksum工具检测数据一致性。如果用户权限是问题根源,确保所有权限变更也在从库正确应用。 需要提醒用户处理这类错误时要备份数据,并在测试环境验证方案,避免生产环境进一步问题。</think>### MySQL复制错误1396的解决方案分析 根据错误信息`Last_Errno: 1396`和`Worker failed executing transaction`的描述,结合MySQL复制机制和引用内容,以下是逐步排查和解决方案: --- #### **一、错误定位与日志分析** 1. **查看完整错误信息** 执行以下命令获取具体的错误上下文: ```sql SHOW SLAVE STATUS\G ``` 重点关注: - `Last_Error`: 错误描述 - `Last_SQL_Error`: 具体失败的SQL语句 - `Executed_Gtid_Set`: 当前执行的GTID位置 2. **查询performance_schema表** 通过以下语句定位具体失败Worker线程: ```sql SELECT * FROM performance_schema.replication_applier_status_by_worker\G ``` 这将显示每个Worker线程的报错详情,包括事务的GTID和错误类型[^3]。 --- #### **二、错误1396的常见原因** 根据MySQL官方定义,错误`1396 (HY000)`通常表示**操作失败**,可能涉及以下场景: 1. **用户权限冲突** 主库执行了`CREATE USER`或`ALTER USER`语句,但从库上目标用户已存在/不存在。 2. **复制环境不一致** 主从库的用户表(`mysql.user`)结构或数据不一致。 3. **GTID事务冲突** 从库尝试执行已被跳过或重复的事务。 --- #### **三、具体解决方案** ##### **场景1:用户权限冲突** 1. **手动同步用户信息** - 主库导出用户信息: ```sql SHOW CREATE USER 'target_user'@'host'; ``` - 从库删除冲突用户后重建: ```sql DROP USER 'target_user'@'host'; CREATE USER 'target_user'@'host' IDENTIFIED BY 'password'; ``` 2. **临时跳过错误** ```sql STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; -- 仅非GTID模式适用 START SLAVE; ``` **或**(GTID模式) 在从库配置文件中添加: ```ini [mysqld] slave_skip_errors=1396 -- 参考引用[3]的跳过错误方法 ``` ##### **场景2:主从用户表不一致** 1. **全量同步用户表** - 主库导出用户数据: ```bash mysqldump --single-transaction mysql user > user_dump.sql ``` - 从库导入前先清空用户表: ```sql TRUNCATE TABLE mysql.user; ``` 2. **修复后重启复制** ```sql RESET SLAVE ALL; CHANGE MASTER TO ...; -- 重新配置主从 START SLAVE; ``` --- #### **四、预防措施** 1. **权限操作规范** 确保所有用户权限变更通过`CREATE/ALTER USER`而非直接操作`mysql.user`表。 2. **定期校验数据一致性** 使用`pt-table-checksum`工具检测主从差异: ```bash pt-table-checksum --replicate=test.checksums h=主库IP ``` 3. **启用增强型复制过滤** 通过`replicate_ignore_db`或`replicate_wild_ignore_table`忽略系统库的复制[^2]。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值