使用dm下游字段比上游多报Column count doesn't match value count错误

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.1
dm版本:v5.4

背景:
tidb作为下游的从库,字段是一直比mysql多的,之前都运行的好好的,但是今天突然报了一个Column count doesn’t match value count错误

目前问题已经解决,解决方案为运行一下命令

tiup dmctl --master-addr 192.168.10.148:8261 operate-schema set -s xxxx xxxx -dxxxx -t h_thirdcommunityid_communityid 1.sql

发这个贴的目的有2个

1:反馈个官方文档的bug,这个文档里这个用法是错的
https://docs.pingcap.com/zh/tidb/stable/migrate-with-more-columns-downstream
如果是 binlog-schema 那么正确的语法应该是这样的

dmctl binlog-schema update <task-name> <database> <table> [schema-file] [flags]

2:为什么在正常运行的情况,突然会报这个错误,如果按这篇文章的说法
https://docs.pingcap.com/zh/tidb/stable/dm-manage-schema
只有在task-mode=incremental可能会出现该问题,但是这个任务使用task-mode=all启动的,而且运行了非常久了

有重启dm-worker进程不,另外确保映射关系正确。

关于你的第一点,你提到官方文档中有一个错误。 看来文档中提供的用法不正确。 使用 dmctl 更新 binlog-schema 的正确语法应该是:

dmctl binlog-schema update <任务名称> <数据库> <表> [架构文件] [标志]

关于你的第二点,你提到错误是在一个任务模式=全部运行了很长时间的任务中突然发生的。 您在 TiDB 文档中链接到的问题指出,“列计数与值计数不匹配”错误通常发生在任务模式=增量中。 但是,在您的情况下,由于您使用的是 task-mode=all,因此意外地会遇到此错误。

chatgpt? 版主管管呀

1 个赞

没重启,之前都是正常在跑的 说明映射应该就是对的

这chatgpt回复真的恶心,没有啥实质参考意义,还写一大堆,扰乱正常的回复

1 个赞

我原来碰到过这个问题。最后binlog里面看到是上有执行了create table if not exists。
就是从binglog filter过滤create table也会导致schema发生变化。

解决方法也和你一样的,直接把schema改回来。 :joy:

你这个情况 create table if not exists执行完后 dm报的错是刚create的那个表 还是会连带着其他表也报错呀

刚create的那个表。没有执行的schema不会变。
但是上游的create table if not exists和这个表是否存在没有关系。
也就是说,你上游已经存在的表,又执行了一遍create table if not exists,这个语句即便实际什么也没做,其对应的下游schema也会变。