问题现象
DM 版本: v1.0.6
上游执行单个 DDL 语句内添加多个字段的语句,通过 DM 同步到 TiDB 的时候报错
"error": {
"ErrCode": 10006,
"ErrClass": 1,
"ErrScope": 2,
"ErrLevel": 3,
"Message": "execute statement failed: ALTER TABLE xxxxx ADD COLUMN xxxxxx Error 8200: Unsupported multi schema change",
"RawCause": "Error 8200: Unsupported multi schema change"
}
},
问题描述
DM 会尝试将包含多个 DDL 变更操作的单条语句拆分成只包含一个 DDL 操作的多条语句,但是可能没有覆盖所有的场景。
目前支持拆分的语句类型包括:drop table/rename table/alter table
https://github.com/pingcap/dm/blob/v2.0.1/pkg/parser/common.go#L173
对于以下这种形式的 alter table 语句会进行拆分
alter table table_name
add t1 xxx,
add t2 xxx,
add t3 xxx;
但是在 v2.0.1 之前版本对于以下这种 alter 语句不会进行拆分,会直接发送给下游 TiDB ,目前 TiDB 不支持单个 DDL 语句修改多个字段的操作,所以会报错
alter table table_name
add column
(t1 xxx,
t2 xxx,
t3 xxx;
解决方案
参考 处理出错的 DDL 语句 文档跳过该报错 DDL ,手动在下游分别执行 DDL。