MySQL GTID 复制模式下记录未同步问题排查步骤

以下是针对 MySQL GTID 复制模式下 id=1145 记录未同步问题的排查步骤文档:

MySQL GTID 复制模式下记录未同步问题排查步骤

背景信息

在 MySQL 主从复制环境中,发现主库中的 lkt_order 表中 id=1145 的记录在从库中不存在。通过以下步骤排查和解决此问题。

步骤1:检查 GTID 状态

首先,在主库和从库上分别执行以下命令,以检查 GTID 的状态。

主库:

SHOW MASTER STATUS\G

从库:

SHOW SLAVE STATUS\G

比较主库和从库的 GTID_EXECUTEDGTID_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 状态和配置。


如果需要进一步分析或解决其他问题,请确保主从库的配置和数据一致,并定期检查和监控复制状态。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值