这是一个问题分享
如果上游mysql有自增主键,dm又不想使用列值转换(column mapping)的话,很容易出现如下错误:
... { "id": 2, "name": "mysql_binlog_format", "desc": "check whether mysql binlog_format is ROW", "state": "success", "errorMsg": "", "instruction": "", "extra": "address of db instance - mysql.rds.aliyuncs.com:3306" }, { "id": 14, "name": "sharding table `库名`.`表名` consistency checking", "desc": "check consistency of sharding table structures", "state": "fail", "errorMsg": "instance agency-slave-merge-01 table `库名`.`表名` of sharding `库名`.`表名` have auto-increment key, would conflict with each other to cause data corruption", "instruction": "please handle it by yourself, read document https://pingcap.com/docs-cn/dev/reference/tools/data-migration/usage-scenarios/best-practice-dm-shard/#自增主键冲突处理 for more detail (only have Chinese document now, will translate to English later)", "extra": "auto-increment key checking" }, { "id": 7, "name": "mysql_version", "desc": "check whether mysql version is satisfied", "state": "success", "errorMsg": "", "instruction": "", "extra": "address of db instance - mysql.rds.aliyuncs.com:3306" }, ...
但是这里,官方会引导我们去打开错误里的文档进行参考。
https://pingcap.com/docs-cn/dev/reference/tools/data-migration/usage-scenarios/best-practice-dm-shard/#自增主键冲突处理
可是官方的解释里有一个误导的地方,提供了 Column mapping ,但是又不建议我们使用。
自增主键冲突处理 在 DM 中,我们提供了 Column mapping 用于处理 bigint 类型的自增主键在合并时可能出现冲突的问题,但我们强烈不推荐使用该功能。如果业务上允许,我们推荐使用以下两种处理方式。
一般的思路就会按照文档接着往下读,进行 去掉自增主键的主键属性 的下游tidb库表操作。并且文档里也给出了一个流程
此时如果按照此流程操作,问题不会解决,依旧会出现开头的错误。
错误的原因如下
简单的理解就是,如果有自增主键,就必须使用列值转换(Column mapping)否则任务会检查不成功,即使你下游tidb里按照刚才的文档进行去除自增的操作也不行,检查依旧不成功。
主要原因是提示错误的文档里 忘记引导 用户,如果不想使用列值转换(Column mapping)来进行分库分表合并,只想做下游tidb的修改,此时最重要的一步要在任务配置 跳过自增主键 检查。
配置如下:
ignore-checking-items: ["auto_increment_ID"]
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




