可能原因一
在 MySQL 类型的迁移或同步(除同步至 ElasticSearch 外)任务执行过程中,如果在源端执行的 DDL 增加列的语句中同时使用了自动初始化和更新 TIMESTAMP
或 DATETIME
类型的字段,可能会导致该列数据不一致。例如:
TIMESTAMP
ALTER TABLE test ADD COLUMN update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
DATETIME
ALTER TABLE test ADD COLUMN update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
可能原因二
在 MongoDB 全量 + 增量的迁移或同步任务执行过程中,参数 expireAfterSeconds
设置得过小。
解决方案
由于 MongoDB 支持创建 TTL 索引,通过设置 expireAfterSeconds
参数,MongoDB 会定期自动删除过期的文档。因此在 MongoDB 全量 + 增量的迁移或同步任务执行过程中,如果 expireAfterSeconds
参数设置得过小,可能会导致数据不一致的风险,建议将该参数的值设置为大于 604800 秒(7 天)。关于 TTL 的更多信息,请参见设置时间序列集合 (TTL) 的自动删除。
可能原因三
结构迁移或结构初始化过程中,当遇到目标库中已存在的数据对象(如同名的表或视图等)时,会直接跳过。
解决方案
建议在执行结构迁移或结构初始化前,先确保目标库中没有与待迁移或初始化对象同名的对象。
可能原因四
在数据同步任务中,由于同步延迟,可能会导致生成的列默认值有差异。