信息发布→ 登录 注册 退出

mysql主从复制不同步怎么办_mysql数据一致性修复

发布时间:2026-01-05

点击量:
MySQL主从复制不同步应优先定位差异、停写入、安全修复:先查SHOW SLAVE STATUS中的Seconds_Behind_Master、IO/SQL线程状态及Last_SQL_Error;再用pt-table-checksum/sync精准修复;差异过大时重建从库。

MySQL主从复制不同步,核心是定位差异点、停止写入干扰、安全修复数据,而不是直接跳过错误或重做从库——后者成本高、风险大。

快速判断不同步程度和原因

先登录从库执行:
SHOW SLAVE STATUS\G
重点关注三项:

  • Seconds_Behind_Master:大于0说明有延迟,但为NULL或0不一定代表完全一致(可能IO/SQL线程已停止)
  • Slave_IO_RunningSlave_SQL_Running:必须都是Yes,任一为No即复制中断
  • Last_SQL_Error:直接暴露SQL执行失败原因(如主键冲突、表不存在、语句被过滤等)

再比对主从的Exec_Master_Log_PosRead_Master_Log_Pos,若差距持续扩大,说明IO线程拉日志正常但SQL线程处理不过来(常见于大事务、从库性能差、慢查询未优化)。

轻量级修复:跳过单条错误(仅限明确可丢弃的操作)

适用于DDL已存在、重复插入主键冲突等“无业务影响”的场景。操作前务必确认主库该事件确实不该在从库执行:

  • 停止复制:STOP SLAVE;
  • 跳过一条事件:SET GLOBAL sql_slave_skip_counter = 1;
  • 启动复制:START SLAVE;

⚠️ 注意:该方式不推荐用于GTID模式;GTID下应使用SET GTID_NEXT + 空事务方式跳过,否则会破坏GTID一致性。

精准修复:用pt-table-checksum + pt-table-sync校验并修复

Percona Toolkit是生产环境最稳妥的数据一致性修复组合:

  • 在主库上运行pt-table-checksum,生成校验和并同步到从库
  • 从库执行pt-table-sync --replicate=... --sync-to-master,自动比对并生成修复SQL(建议先加--print预览)
  • 修复时加--execute执行,全程不锁表,支持分批、限速、指定库表

优势在于只修差异行,不影响正常业务;缺点是需安装Perl依赖,且主从表结构、字符集必须严格一致。

终极方案:重建从库(当差异过大或修复失败时)

不是重装MySQL,而是重新构建一个干净的从库:

  • 主库执行FLUSH TABLES WITH READ LOCK;,记下SHOW MASTER STATUS的文件名和位置
  • mysqldump --single-transaction --master-data=2导出(确保一致性快照)
  • 从库导入后,用记录的binlog位置执行CHANGE MASTER TO ... MASTER_LOG_FILE='...', MASTER_LOG_POS=...
  • 启动复制:START SLAVE;

整个过程主库只读锁时间极短(几秒),适合中大型系统。关键点是--master-data=2会把CHANGE语句写进dump文件,避免手动定位位置出错。

不复杂但容易忽略:修复后务必持续观察Seconds_Behind_Master是否稳定归零,并抽查几个核心表的COUNT和SUM结果是否一致。

标签:# 跳过  # 再用  # 会把  # 不存在  # 适用于  # 几个  # 都是  # 主键  # 比对  # 过大  # mysql  # table  # 事件  # 线程  # count  # NULL  # print  # sql  # perl  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!