隐藏rds坑之dm同步错误 Column count doesn't match value count: 5 (columns) vs 6 (values)

这是使用阿里云rds当做上游mysql进行同步的掉坑系列分享 第一篇

(rds真是留了太多隐藏坑了,内牛满面)


dm在同步的时候会出现如下错误

"errors": [
 {
"Type": "UnknownError",
"msg": "[省略..... 

gen insert sqls failed, schema: ****, table: ****: 
Column count doesn't match value count: 5 (columns) vs 6 (values)\

主要错误就是同步的时候,发现字段不一致.

一般这时候会去比对上游mysql的字段与下游是否一致.

比对完后,发现是一致.只是这个表没有建立主键而已.

此时,坑来了

rds会检测这个表,如果没有主键,会自动生成一个隐藏主键

执行命令

set show_ipk_info=1;
show create table 表名;

表结构就会像下面这个样子

CREATE TABLE `user_record` (
  省略。。。
  省略。。。
  `__#alibaba_rds_row_id#__` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Implicit Primary Key by RDS',
  KEY `__#alibaba_rds_row_id#__` (`__#alibaba_rds_row_id#__`),
  省略。。。
  省略。。。
) 省略。。。

到这里你就能知道,为什么因为字段不一致,dm无法同步了.

因为坑爹rds,有个隐藏字段.

这时候,你手动加个主键也不行,隐藏主键不会消失.

只能无奈的,在下游也建一个对应的__#alibaba_rds_row_id#__字段,来委曲求全.

2 个赞

感谢分享,这个问题遇到的用户比较多,可以先搜索下报错,

[解决方案]

关掉这个设置

龙哥的解释是关掉这个设置,是关掉这个隐藏主键吗?

我这边咨询了aliyun的人,说是关不掉这个隐藏主键,不知道是不是被忽悠了.

所以我才在下游建了这个字段去解决这个问题.

找了个文档,你可以自己测测,implict_primary_key 是不是这个参数

http://www.penglixun.com/tech/database/aliyun_rds_implicit_primary_key.html

Hi,能否分享一下更详细的、关于隐藏主键的信息,我们会将判断方法整理到文档中,方便其他用户定位。也欢迎您直接帮助我们修改文档。

https://docs.pingcap.com/zh/tidb-data-migration/stable/faq#dm-是否支持迁移阿里-rds-以及其他云数据库的数据

标记一下。