SHOW VARIABLES LIKE 'binlog_row_image';
SELECT COUNT(*) FROM src_order;
SELECT COUNT(*) FROM dst_order WHERE deleted_at IS NULL;

源库物理删除的 412 条订单,目标表里还留着,报表金额比业务后台多了 8 万。同步日志里一条 delete 都找不到。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:同步程序只订阅了 insert 和 update,delete 事件被过滤规则直接丢掉。源表又是物理删除,目标端没有任何痕迹可以对照。时间一长,两边行数只会越差越多。

「删除同步遗漏」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

处理上按这个顺序:确认 binlog_row_image 是 FULL 能拿到删除前的整行;同步配置里把 delete 事件打开 不要只订阅 insert 和 update;目标端改成软删除 保留 deleted_at 方便回溯;每天跑一次行数比对 差异超过阈值就告警。

确认没问题再收工,补同步后两边行数一致 报表金额回到和后台相同的数字。

作者 9823189