mydumper+loader迁移集群报错:Column count doesn't match value count at row 1

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:Release Version: v2.1.5-1-g0bd6b1b
  • 【问题描述】:tidb集群mydumper备份完后,用loader导入数据报错:Column count doesn’t match value count at row 1,问题看着像是用mydumper备份的时候,加上-r参数,会把sql截断,辛苦帮忙看下

备份命令:/mydumper -h “xxxxxxx” -P “xxxxxx” -u “xxxxx” -p “xxxxxx” -t 16 -F 64 --skip-tz-utc -r 100000 --logfile mydumper.log -o ./data/

导入命令:./loader -h xxxx -u xxxx -P xxxx -t 32 -d ./data/

报错:[warning] [exec][sql][USE xxxx; INSERT INTO xxxxx VALUES(xx,xx,‘xx’,xx,xx,xx,xx,xx UPDATE tidb_loader.checkpoint SET offset=xx WHERE id =‘xx’ AND filename='xx.s][error]Error 1136: Column count doesn’t match value count at row 1

方便的话 把导出的数据贴出来一部分看下是什么情况。

导出的数据大部分没有问题,在导入的时候会有单条SQL出现这个报错

拿出现问题的数据看下有没有什么特殊的地方,是不是不支持的格式。

出问题的数据也是正常的,mydumper导出的数据没有问题。

还有其他的数据库迁移方式吗?

出问题的数据拿出来直接 insert TiDB 试下。

确实不能插入,这块是什么问题?导出来的数据为啥有的能插入,有的就插不进去

对比了下表结构是一样的

麻烦给下基本信息:mysql & TiDB 版本,表结构以及报错的数据和报错信息。

TIDB版本(源和目的相同):Release Version: v2.1.5-1-g0bd6b1b 表结构:线上表结构,我就不发了,里面有个json字读不知道影响不影响 报错信息: [warning] [exec][sql][USE xxxx ; INSERT INTO xxxxx VALUES(xx,xx,‘xx’,xx,xx,xx,xx,xx UPDATE tidb_loader . checkpoint SET offset =xx WHERE id =‘xx’ AND filename ='xx.s][error]Error 1136: Column count doesn’t match value count at row 1

看报错。有可能是与备份的字段内容有关。方便根据报错内容,把该 Insert 的敏感数据脱敏后,提供一下用于排查问题吗?

刚开始我也是怀疑这里,后来把那条sql拿出来,实际上里面是没有update关键字的

关于Tidb到Tidb集群之间的在线数据迁移,还有其他方案吗?

有可能是 JSON 字段内容导致解析的时候有问题,导致与后面的 UPDATE 没有正确解析出来。方便的话最好提供下内容,方便我们复现测试。

目前的方案,都是使用 mydumper + loader 做全量,tidb binlog 做增量的方法。