结论与处理指南:当MySQL主从复制中出现ER_RPL_MTS_AUTOMATIC_RECOVERY_FAILED错误时,通常是因为多线程复制(MTS)自动恢复机制失败。快速远程处理步骤:1. 在从库执行 STOP SLAVE; 2. RESET SLAVE ALL; 3. CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4; 4. START SLAVE; 检查 SHOW SLAVE STATUS\G 中的 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。如果失败,检查 relay-log 一致性并手动恢复。
阿里云开发者社区
ER_RPL_MTS_AUTOMATIC_RECOVERY_FAILED 错误是 MySQL 5.7 多线程复制(MTS)自动恢复失败导致的。当从库 SQL 线程在应用事件时发现 relay log 中的事件与主库不一致时,会尝试自动恢复,但如果恢复失败就会报这个错。原理是 MTS 下每个 worker 线程独立处理事务组,如果某个组校验失败,整个恢复过程中止。远程处理:登录从库,执行 set global slave_parallel_workers=0; stop slave; reset slave all; 然后重新配置并启动。
CSDN博客文章
多线程复制自动恢复失败的原理在于,MySQL 从 5.6 开始引入 MTS,使用 worker 线程并行应用 relay log 事件。为了确保一致性,每个事件有校验信息(如 checksum)。当 worker 发现校验失败,会触发自动恢复:暂停所有 worker,从主库拉取缺失事件。但如果主从 binlog 位置偏移太大,或网络问题导致拉取失败,就报 ER_RPL_MTS_AUTOMATIC_RECOVERY_FAILED。处理指南:临时关闭 MTS,设 slave_parallel_workers=0,重置从库。
MySQL 官方文档片段
The slave will attempt automatic recovery when certain errors occur during MTS. If recovery fails, error ER_RPL_MTS_AUTOMATIC_RECOVERY_FAILED is raised. To resolve, stop the slave, reset it, and restart with correct coordinates. Note that MTS recovery is limited and may not handle all inconsistency cases.
知乎专栏解析
遇到这个错误,直接在从库执行:STOP SLAVE IO_THREAD; STOP SLAVE SQL_THREAD; RESET SLAVE; 然后 SHOW MASTER STATUS; 从主库复制 binlog 文件和位置,CHANGE MASTER TO ... START SLAVE; 如果是云环境,远程 SSH 到从库执行这些命令即可。原理是自动恢复依赖于主从 binlog checksum 匹配,网络抖动或版本不一致常导致失败。
Percona 博客摘录
In multi-threaded slave setups, automatic recovery kicks in for soft errors like checksum mismatches. However, if the recovery window is exceeded or coordination fails between coordinator and workers, it throws ER_RPL_MTS_AUTOMATIC_RECOVERY_FAILED. Recommendation: Disable MTS temporarily (SET GLOBAL slave_parallel_workers=0;) and fall back to single-threaded replication for stability during recovery.
腾讯云社区帖子
远程处理脚本:ssh user@slave_ip "mysql -u root -p'pwd' -e 'STOP SLAVE; RESET SLAVE ALL;'" 然后配置新 master info 并 start。失败原理:MTS worker 线程间的依赖事务组(Dependency)解析出错,导致无法自动对齐 binlog。
FAQ
Q: 这个错误只在多线程复制下出现吗?
A: 是的,单线程复制不会触发 MTS 自动恢复机制。
Q: 如何预防这个错误?
A: 保持主从 MySQL 版本一致,启用 binlog_checksum=NONE,监控网络延迟,避免大事务。
Q: 恢复后还能开启 MTS 吗?
A: 可以,恢复稳定后设 slave_parallel_workers=4 或更高,但先测试。
Q: 云数据库如 RDS 如何处理?
A: RDS 通常有自动 failover,重启实例或联系支持,通过控制台重置复制。