跳到主要内容

增量同步数据不一致

现象

  • 源端数据库有写入,但是目标端没有出现相应变更数据。

排查

可能的原因

  • 任务报错,同步任务未有效运行
  • 数据库、表未配置到同步任务中
  • 数据约束冲突,比如对端主键、唯一键、外键等约束冲突
  • 对端有数据写入
  • 使用了自定义代码进行了数据处理或存在数据过滤
  • 特殊场景、负载下触发的 bug
  • 特殊数据、结构触发的 bug

步骤

排除任务运行异常

  • 任务详情 > 查看日志,看是否有错误堆栈

排除结构约束不对等

  • 对比数据所在数据库源端和目标端表结构,确认是否可能为约束冲突(如对端有唯一键或外键,源端没有)

排除自定义代码或过滤条件影响

  • 任务详情,查看库表映射或自定代码管理,确认是否存在自定义代码或过滤条件

排除源端无写入

  • 找到 1~5 条确认不一致的数据
  • 查找数据在源端审计日志(可选)、变更日志(如 binlog )中是否存在

排除 CloudCanal 无写入

  • 找到 1~5 条确认不一致的数据
  • 查找数据在 CloudCanal 任务 apply_commit.log 中是否存在

排除对端有写入

  • 找到 1~5 条确认不一致的数据
  • 根据数据变更时间查找数据在目标端审计日志(可选)、变更日志(如binlog)中是否存在

Tips

  • apply_commit.log 保存在 sidecar 容器中的 /home/clougence/logs/cloudcanal/tasks/${taskName}/ 目录下
  • apply_commit.log 日志格式为: 事件类型$dbName$schemaName$tableName$主键值$对端数据源响应时间(单位ms)