跳到主要内容

源端与目标端数据不一致

本篇文章主要介绍出现数据不一致时可能的原因及排查步骤。

简述

数据迁移同步过程中,数据不一致的原因较多,从我们的认知来看,可能包含以下原因:

  • 数据约束冲突,比如对端主键、唯一键、外键等约束冲突
  • 对端有数据写入
  • 使用了自定义代码进行了数据处理或存在数据过滤
  • 特殊场景、负载下触发的 bug
  • 特殊数据、结构触发的 bug

排查步骤

  1. 找到 1~5 条确认不一致的数据。
  2. 对比数据所在数据库源端和目标端表结构,确认是否可能为约束冲突。
  3. 查找数据在源端审计日志(可选)、变更日志(如 binlog )中是否存在。
  4. 查找数据在 CloudCanal 任务 apply_commit.log 中是否存在。

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

  5. 查找数据在目标端审计日志(可选)、变更日志(如binlog)中是否存在。
  6. 根据3、4、5 步骤查询到的日志确认数据是否已正确读取并写入对端,如果读取、写入过程无问题,则怀疑对端有非 CloudCanal 系统写入数据。
  7. 步骤3、4可查到,步骤5查不到,则怀疑是否有约束冲突、特殊负载、特殊结构导致丢数据。
  8. 步骤3可查到,但是步骤4、5均查不到,可能为工具 bug,可加群反馈问题。
  9. 步骤3、4、5均查不到,可能源端数据写入存在问题。
  10. 如果上述步骤无法自助解决问题,请加群提问,请描述问题背景并提供报错日志或截图。