源端与目标端数据不一致
本篇文章主要介绍出现数据不一致时可能的原因及排查步骤。
简述
数据迁移同步过程中,数据不一致的原因较多,从我们的认知来看,可能包含以下原因:
- 数据约束冲突,比如对端主键、唯一键、外键等约束冲突
- 对端有数据写入
- 使用了自定义代码进行了数据处理或存在数据过滤
- 特殊场景、负载下触发的 bug
- 特殊数据、结构触发的 bug
排查步骤
- 找到 1~5 条确认不一致的数据。
- 对比数据所在数据库源端和目标端表结构,确认是否可能为约束冲突。
- 查找数据在源端审计日志(可选)、变更日志(如 binlog )中是否存在。
- 查找数据在 CloudCanal 任务 apply_commit.log 中是否存在。
Tips: apply_commit.log 保存在 sidecar 容器:/home/clougence/logs/cloudcanal/tasks/${taskName}/apply_commit.log,日志格式: 事件类型$dbName$schemaName$tableName$主键值$对端数据源响应时间(单位ms)
- 查找数据在目标端审计日志(可选)、变更日志(如binlog)中是否存在。
- 根据3、4、5 步骤查询到的日志确认数据是否已正确读取并写入对端,如果读取、写入过程无问题,则怀疑对端有非 CloudCanal 系统写入数据。
- 步骤3、4可查到,步骤5查不到,则怀疑是否有约束冲突、特殊负载、特殊结构导致丢数据。
- 步骤3可查到,但是步骤4、5均查不到,可能为工具 bug,可加群反馈问题。
- 步骤3、4、5均查不到,可能源端数据写入存在问题。
- 如果上述步骤无法自助解决问题,请加群提问,请描述问题背景并提供报错日志或截图。