tidm增量同步,上下游表结构相同但是会报Column count doesn't match value count: (columns) vs (values)的错

【 TiDB 使用环境】生产环境
【 TiDB 版本】V8.1.0 tidm版本也是8.1.0
【复现路径】做过哪些操作出现的问题
使用tidb-lightning进行全量数据迁移,根据gtid进行tidm增量数据迁移
【遇到的问题:问题现象及影响】
上下游表结构相同,但是会偶发性报错Column count doesn’t match value count: 13 (columns) vs 16 (values),排查了下游的binlog-schema以及上游binlog日志,发现上下游列数都是16。不知道为何报错。
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】



应该是历史上有同名任务,而那个任务里的 schema 是老的schema 导致的。试下用binlog-schema命令更新下schema tracker中的缓存

Use "dmctl binlog-schema [command] --help" for more information about a command.
» binlog-schema update --help
update tables schema structure

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

Flags:
      --flush         flush the table info and checkpoint immediately (default true)
      --from-source   use the schema from upstream database as the schema of the specified tables
      --from-target   use the schema from downstream database as the schema of the specified tables
  -h, --help          help for update
      --sync          sync the table info to master to resolve shard ddl lock, only for optimistic mode now (default true)

Global Flags:
  -s, --source strings   MySQL Source ID.
»
2 个赞

感谢回答!确实有同名任务,我先清理下缓存试试。

1 个赞

可以清理所有表的缓存吗?因为最近不只这张表有此报错,是偶发性报错,不一定是哪张表就出现该错误。

厉害,这都能定位到问题

只要是两次任务执行期间,有 DDL 修改的都有可能报错。 其实start-task有个参数是--remove-meta,会自动清理缓存的。 不过对你来说,这个任务就需要重建了,可能得重新找个 binlog 位置了。

另外一种方案是写个脚本,先用binlog-schema list获取所有同步的表,然后都刷新一下缓存。

好的感谢,上午我重找binlog位置,重新新建了增量同步任务。下午又报同样类型的错(另外一张表) 我试一下刷新所有缓存的脚本

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。