mysql迁移写入TiDB时出错

【 TiDB 使用环境】测试
【遇到的问题:问题现象及影响】显示主键冲突,不兼容该怎么解决额,附图有mysql建表语句
【附件:截图/日志/监控】


看报错你数据有冲突啊

1 个赞

目标端是空表恢复的吗

有数据可以覆盖吗

可选不同处理方式,参考:https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-logical-import-mode-usage#冲突数据检测

1 个赞

逻辑导入吗,是不是目的表不为空,导致主键冲突

:thinking:如果两边表结构一致的话,有没有可能是大小写的问题?mysql是大小写敏感,tidb是大小写不敏感,这样mysql导入到tidb的时候,也可能出现主键冲突的情况。

他这个应该不是,主键是int 类型

你去看看原表的这条记录

刚注意到是自增主键,大家一般导数据的时候,自增主键列也会导么?

还有一个可能,源端表有id=0的

id=0导出的时候也会生成一个新的id吧

:thinking:如果是迁移指定id的话,应该不会自增,会使用指定的值吧。

前段时间我碰到的一个问题,也是迁移过来发现主键冲突,因为源端id=0,解决方法是NO_AUTO_VALUE_ON_ZERO这个sql mode
https://docs.pingcap.com/zh/tidb/stable/sql-mode#sql-mode-列表如下

1 个赞

重复数据就是主键和唯一键重复,tidb 表 id字段改为 AUTO_RANDOM?

是不是多个数据源啊?或者是之前迁移了一部分,后来又进行了全量?

1 个赞

重复数据,你就选呗,或者替换,或者跳过。。。

如果是多数据源到同一目标端,还是根据业务逻辑来确定ETL方案吧。

主键冲突你只能选择跳过或者删除目标表的记录,再或者修改一下主键值

你数据的的问题。没有主键,数据冲突了