DM2.0同步出现36027错误。

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
4.0
【问题描述】
上游MYSQL,做的是过滤表和过滤所有DDL的同步。在一次业务升级中,在上游MYSQL和下游的TIDB都执行了增加表字段的DDL语句。但是在后续的同步中,执行过增加字段DDL语句的表出现了36027的错误:

现在通过operate-schema的方式可以慢慢的去掉错误,但是上游库太多,变更的表也不少,operate-schema的效率很低。

通过过滤DDL的方式同步数据,如果要在上游变更表结构,有没有什么方法表面上面错误的发生。

过滤了所有 ddl 么,发下 task 配置看看,报错是上下游列数量不一致,无法插入。

这是什么意思,手动在上下游执行的添加表字段的 DDL 么 ? 如果是这样,之前如果有同步延迟的情况,下游添加了列,导致上游开始时的表结构中的 DML 插入到下游时,无法插入。会报错。操作问题,建议先把下游的列删除掉。

1、task的配置:


2、因为dm过滤了所有的DDL,所有在业务上线变更表结构时,不仅在上游的mysql中执行了ddl语句,同时还在下游的TIDB中执行了ddl语句。而且在业务变更的时候业务是停止了的 ,不会有数据插入。

先说你这个做法,是有问题的。过滤所有 ddl 是有什么需求吗?

举个例子:
在 t3 时刻执行 ddl 语句,上下游同时执行,但是此刻下游 tidb 仅同步到 t2 时间的 dml 语句。此时 t2-t3 时间的 dml 仍然是原表结构的数据,但是下游已经多列了,上下游列数不一致。导致会报错。

从你上面的报错信息来看就是这样的,下游比上游多列。这种情况 强烈不推荐 过滤掉 DDL,会有问题的。