SELECT id, status, update_time FROM orders WHERE update_time >= '2026-03-01 14:03:07' ORDER BY update_time, id LIMIT 500;
订单增量同步每 5 分钟跑一次,条件是 update_time > 上次水位。对账发现昨天 14:03:07 改过的 37 条订单,目标表里还是旧状态。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,update_time 精度只到秒,一次批量更新会把几百行写成同一个值。水位存成严格大于时,边界那一秒的记录整批被跳过,下一轮又从下一秒开始。取大于等于再配合主键去重,才能把这一秒收干净。
围绕「增量同步按时间戳漏数」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。
处理上按这个顺序:水位改成大于等于上一批的最大时间 不要用严格大于;同一时间戳内再按主键排序 记住最后一条的 id 作为第二段水位;条件写成时间大于水位 或者时间等于水位且 id 大于 last_id;每轮把水位和写入行数一起落库 方便回查。
改完只确认一件事:重跑那五分钟窗口 37 条全部进目标表 水位表里的 last_id 跟着往后推。
