MySQL8主从数据库复制故障

MySQL8主从数据库复制故障

检查从库的状态,发现 Slave_IO_Running :Yes ,Slave_SQL_Running :No

报错信息如下:

Coordinator stopped because there were error(s) in the worker(s). ... Worker 1 failed executing transaction ...

SQL 线程在回放事务时遇到异常,复制被自动挂起。 MySQL 8 并行复制(slave_parallel_workers > 0)最常见的报错样式。

一、定位分析错误
  1. 登录从库
sql 复制代码
mysql> SELECT * FROM performance_schema.replication_applier_status_by_worker;

最后一行会出现类似:

1146 Worker 1 failed executing transaction 'd841e3f6-8e07-11f0-aad4-00d861733003:15155609' at master log mybinlog.000334, end_log_pos 11343248; Error executing row event: 'Table 'db.ts_list' doesn't exist'

  1. 可以直接看错误日志
bash 复制代码
grep -A5 "d841e3f6-8e07-11f0-aad4-00d861733003:15155609" mysqld.err

日志里会打印 具体 SQL / 事件类型errno

3.处理方式:

在主库上找到 表 ts_list 的创建表语句,在从库上执行创建表;

bash 复制代码
mysql> stop slave ;
mysql> start slave;
mysql> show slave status;
mysql> show processlist;

停止同步,启动同步,检查状态,看是否

Slave_IO_Running :Yes

Slave_SQL_Running :Yes

检查同步进程是否运行。

二、另外常见错误
场景 日志典型片段 出现原因 处理方案
1. 主键/唯一键冲突 Duplicate entry 'xxx' for key 'PRIMARY' 主从数据已不一致:主库 insert 时从库已有该行 pt-table-checksum / table-sync 确认是否只有这一行差异; 仅差异一行:SET GLOBAL sql_slave_skip_counter=1; START SLAVE;SKIP_TRANSACTION; 差异很多:重建从库或在线修复。
2. 行找不到(1032) Could not execute Delete_rows / Update_rows ... Can't find record 主库 delete/update 时从库已无该行 同上,用 pt-table-sync 修复后再次启动 SQL 线程; 临时应急可 sql_slave_skip_counter=1
3. 外键约束失败(1452) Cannot add or update a child row: a foreign key constraint fails 从库外键检查严格(slave_skip_errors 未忽略 1452)且数据缺失父行 ① 确认 foreign_key_checks=1 导致; ② 先修复父表数据; ③ 或临时 SET GLOBAL foreign_key_checks=OFF; START SLAVE; 再补齐数据。
4. 列不存在或类型不符 Unknown column 'col_new' ... / Incorrect integer value 主库已 DDL(加列/改列),从库未执行或执行失败 ① 手动在从库补跑缺失 DDL; ② 确保 log_slave_updates=ON 且 DDL 在 binlog 里; ③ 若 GTID 连续可 STOP/START SLAVE 重新拉取。

三、MySQL 8 推荐修复步骤(GTID 环境)
  1. 找到错误号
sql 复制代码
mysql> SELECT LAST_ERROR_NUMBER, LAST_ERROR_MESSAGE
FROM performance_schema.replication_applier_status_by_worker
WHERE WORKER_ID=1;
  1. 若确定只有 单事务 有问题,可 注入空事务跳过(无需重启):
sql 复制代码
-- 在主库执行
SET GTID_NEXT='d841e3f6-8e07-11f0-aad4-00d861733003:15155609';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';

然后从库自动继续。

四、预防配置建议
ini 复制代码
[mysqld]
slave_parallel_workers=4              # 并行复制
slave_parallel_type=LOGICAL_CLOCK
slave_preserve_commit_order=ON
binlog_transaction_dependency_tracking=WRITESET
slave_skip_errors=0                   # 除非确定要忽略指定错误码
log_slave_updates=ON                  # 级联/故障切换必备
gtid_mode=ON                          # 方便跳过事务
五、总结

报错是复制挂起,真正原因要去 replication_applier_status_by_worker 或错误日志里看 errno/消息

大部分的错误可能是 **数据不一致 → 主键冲突/1032/1452 ,按错误号,对于处理方法解决。

相关推荐
白帽小丑3 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql
Dxy12393102163 小时前
MySQL索引完整教程:创建、查看、修改、删除与日常管理
前端·javascript·mysql
Quincy_Freak5 小时前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
至乐活着6 小时前
MySQL索引底层原理与查询优化实战:从B+树到执行计划
mysql·b+树·查询优化·sql性能·索引原理
2601_962683897 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
酱学编程7 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
shushangyun_9 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
华山令狐虫10 小时前
DBAPI AI 写 SQL:支持动态 SQL 与参数占位符,自然语言一键生成
数据库·人工智能·sql·dbapi
IvorySQL10 小时前
PG 技术日报|2026-07-04
数据库·人工智能·postgresql·开源
Hoxy.R10 小时前
KingbaseES读写分离高可用集群扩容、备库重建与故障切换实战
运维·数据库