外键类型为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 也不会自动更新这些信息。为了解决这个问题,你可以按照以下步骤操作:
- 停止 DM 任务:首先,确保你已经停止了正在进行的数据同步任务。
- 清理元数据:DM 会在上游 MySQL 实例中创建一个名为
dm_meta的数据库,用于存储同步任务的元数据。你需要手动清理这些元数据,以便 DM 重新读取表结构。
那只能去掉了
dm的同步对外键支持不是很好,要是实在没法处理,拿到最新的binlog建个新任务去重新同步
去掉外键后,可以试下重置数据迁移任务。
当数据迁移过程中发生异常且无法恢复时,需要重置数据迁移任务,对数据重新进行迁移:
- 使用
stop-task停止异常的数据迁移任务。 - 清理下游已迁移的数据。
- 从下面两种方式中选择其中一种重启数据迁移任务:
- 修改任务配置文件以指定新的任务名,然后使用
start-task {task-config-file}重启迁移任务。 - 使用
start-task --remove-meta {task-config-file}重启数据迁移任务。
去掉外键,不支持在导入的时候有外键
最后是这么干的,不过要删除 dm_meta
基本上是这么干的,最初是停止任务,删除已经同步的数据,然后新建一个任务(名称不一样,如果一样还是报错)
后来发现应该是删除dm_meta就可以完全重新开始了;
另外一开始外键没有清理完全,期间又遇到,后面有要重新建一个任务