DM同步数据,外键类型不兼容怎么处理?

外键类型为varchar(32),引用类型是char(32),别问我原表为啥这样;
用DM同步数据,报错说不兼容;
怎么处理?我把原表外键全删了,继续任务依然报错;应该是DM已经拉取到信息了,不会再去拉取我改过的表结构了

https://docs.pingcap.com/zh/tidb/stable/dm-manage-schema#管理-tidb-data-migration-迁移表的表结构

可以用dmctl binlog-schema修改表结构的映射。

去掉外键,重新同步呢

试试按着外键表的ER图分批同步试试

感觉可以重启然后再同步试试

在使用 DM(Data Migration)工具进行数据同步时,如果遇到了外键类型不兼容的问题,确实是因为 DM 已经记录了原始的表结构,即使之后修改了表结构,DM 也不会自动更新这些信息。为了解决这个问题,你可以按照以下步骤操作:

  1. 停止 DM 任务:首先,确保你已经停止了正在进行的数据同步任务。
  2. 清理元数据:DM 会在上游 MySQL 实例中创建一个名为 dm_meta 的数据库,用于存储同步任务的元数据。你需要手动清理这些元数据,以便 DM 重新读取表结构。

那只能去掉了

dm的同步对外键支持不是很好,要是实在没法处理,拿到最新的binlog建个新任务去重新同步

去掉外键后,可以试下重置数据迁移任务。

当数据迁移过程中发生异常且无法恢复时,需要重置数据迁移任务,对数据重新进行迁移:

  1. 使用 stop-task 停止异常的数据迁移任务。
  2. 清理下游已迁移的数据。
  3. 从下面两种方式中选择其中一种重启数据迁移任务:
  • 修改任务配置文件以指定新的任务名,然后使用 start-task {task-config-file} 重启迁移任务。
  • 使用 start-task --remove-meta {task-config-file} 重启数据迁移任务。

去掉外键,不支持在导入的时候有外键

最后是这么干的,不过要删除 dm_meta

基本上是这么干的,最初是停止任务,删除已经同步的数据,然后新建一个任务(名称不一样,如果一样还是报错)
后来发现应该是删除dm_meta就可以完全重新开始了;
另外一开始外键没有清理完全,期间又遇到,后面有要重新建一个任务