业务在源表加了 channel 字段,同步任务下一轮直接失败,报 1054 Unknown column 'channel' in 'field list'。目标表结构还是半个月前的。日志里能对上时间点,这种反而好排。

同步 SQL 里写的是 select 星号,列清单跟着源表走,目标表却没这个列。批量写入按源表列数生成占位符,两边对不上整条语句就报错。结构变更没有走统一流程,这类问题会一直复发。这一点先确认清楚,后面就不用反复试。

SELECT column_name FROM information_schema.columns
WHERE table_schema='src' AND table_name='orders'
AND column_name NOT IN (
  SELECT column_name FROM information_schema.columns
  WHERE table_schema='dst' AND table_name='orders');

「源表加字段未同步」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。

处理上按这个顺序:同步 SQL 把列名写全 不要用 select 星号;源表变更走统一的 DDL 流程 同时改目标表和同步配置;上线前跑一次结构比对 把缺的列列出来;失败重试加告警 别让它空转一晚上。

结果对不对很好判断,结构比对返回空 同步任务连续跑三轮没有 1054。

作者 9823189