TiCDC 同步任务正常运行,但上下游数据存在大量不一致故障

业务使用 TiCDC 将 TiDB 全量数据同步至下游 MySQL,同步进程无报错、延迟指标正常,无任务中断。对账时发现上下游同一张订单表新增、修改的数据大量对不上,上游写入无异常,下游无手动改数据操作,表主键、字段结构完全一致。

任务配置里写了库表过滤、忽略 DML、字段映射错误,部分写入事件直接丢弃或改写,监控只看延迟不校验实际行数。

一般确认同步无异常,无延时,配置没有过滤错误之类的参数出现的上下游大量数据不一致的情况,就是分析下游binlog日志,确定是否有人操作。不能听别人说。。

检查 TiCDC 过滤与路由配置,核对字段类型、字符集,排查事务顺序、批量提交及重复同步问题

你这个 TiCDC 同步任务看似正常但数据不一致的问题,优先排查几个关键点:首先确认 TiCDC 是否开启了 old value 功能,因为同步 UPDATE/DELETE 操作需要依赖行变更的旧值,如果上游表未开启 REPLACE INTO 兼容模式或 TiCDC 未配置 enable-old-value=true,会导致部分更新无法正确同步;其次检查上下游字符集、排序规则是否一致,比如 TiDB 用 utf8mb4 而 MySQL 端用 utf8,可能导致特殊字符写入异常;另外排查上游是否存在主键 / 唯一键冲突、或者 CDC 任务配置了 filter 规则导致部分数据被过滤,同时可以通过 cdc cli changefeed query 查看同步状态和 checkpoint,对不一致的表建议使用 sync-diff-inspector 工具做数据校验和修复,确认无异常后再考虑重建同步任务或升级 TiCDC 版本规避已知 bug。

全量dump/load模式,增量基于row-based binlog复制。

  1. 检查库表过滤、路由等配置;
  2. 确认enable-old-value、字符集、字段类型是否匹配;
  3. 核查主键 / 唯一键冲突、事务顺序问题。
1 个赞

DM同步延迟检查relay log是否堆积。