以下是针对 MySQL GTID 复制模式下 id=1145
记录未同步问题的排查步骤文档:
MySQL GTID 复制模式下记录未同步问题排查步骤
背景信息
在 MySQL 主从复制环境中,发现主库中的 lkt_order
表中 id=1145
的记录在从库中不存在。通过以下步骤排查和解决此问题。
步骤1:检查 GTID 状态
首先,在主库和从库上分别执行以下命令,以检查 GTID 的状态。
主库:
SHOW MASTER STATUS\G
从库:
SHOW SLAVE STATUS\G
比较主库和从库的 GTID_EXECUTED
和 GTID_PURGED
,确保它们是同步的。
步骤2:检查主库上的 GTID 事务
在主库上查找包含 id=1145
记录的事务 GTID。
获取 GTID 集:
SELECT GTID_SUBSET(GTID_EXECUTED, GTID_SUBTRACT(GTID_EXECUTED, GTID_PURGED)) AS gtid;
查看二进制日志中的事务:
SHOW BINLOG EVENTS IN 'mysql-bin.000160' FROM 0 LIMIT 10;
逐步增加范围以找到具体包含 id=1145
记录的事务。
步骤3:在从库上应用 GTID 事务
确认从库上的 GTID 事务状态,并手动应用缺失的 GTID 事务。
检查从库状态:
SHOW SLAVE STATUS\G
手动应用 GTID 事务:
STOP SLAVE;
SET GLOBAL gtid_purged = 'GTID_SET'; -- 替换为实际的 GTID 集
START SLAVE;
步骤4:手动同步数据
如果从库上缺少 id=1145
的记录,可以手动同步数据。
在主库上导出记录:
SELECT * FROM lkt_order WHERE id = 1145 INTO OUTFILE '/tmp/lkt_order_1145.sql';
将导出的记录文件传输到从库:
scp /tmp/lkt_order_1145.sql user@slave:/tmp/
在从库上导入记录:
LOAD DATA INFILE '/tmp/lkt_order_1145.sql' INTO TABLE lkt_order;
步骤5:重启复制并验证状态
确保数据一致后,重新启动从库的复制进程。
重启复制:
STOP SLAVE;
START SLAVE;
验证复制状态:
SHOW SLAVE STATUS\G
确保没有错误并且 Seconds_Behind_Master
为零。
步骤6:检查 GTID 跳过机制
如果需要跳过有问题的 GTID 事务,可以使用以下命令:
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
总结
通过以上步骤,可以找出 id=1145
记录未同步的原因,并采取相应的措施来解决该问题。如果问题仍然存在,可能需要进一步深入分析主从库之间的 GTID 状态和配置。
如果需要进一步分析或解决其他问题,请确保主从库的配置和数据一致,并定期检查和监控复制状态。