DTS 同步至 AnalyticDB 时 DDL 失败,核心原因是目标端不支持的 DDL 类型、源端在线 DDL 工具冲突、目标实例状态异常、配置与权限不匹配,且失败后 DTS 通常会继续同步 DML,需手动修复
快速排查步骤(按优先级)
- 查看 DTS 任务日志
登录 DTS 控制台 → 进入任务 → 查看任务日志 / 报错详情,定位失败的 DDL 语句与错误码(如 DTS-70004)。 - 校验目标端 AnalyticDB 状态
磁盘使用率:ADB MySQL 3.0 节点磁盘 > 80% 会导致写入失败;ADB PostgreSQL 需检查空间与参数。
实例状态:ADB 处于备份中会直接导致 DTS 任务失败,需等待备份完成或重启任务。
网络与白名单:确认 DTS 实例 IP 已加入 AnalyticDB 白名单,端口(3306/5432)连通。 - 核对 DDL 兼容性(核心)
ADB MySQL 3.0 支持的 DDL:
支持:CREATE TABLE(非临时表)、ALTER TABLE(仅 ADD COLUMN/DROP COLUMN/RENAME COLUMN/ADD INDEX)、DROP TABLE、CREATE INDEX/DROP INDEX。
不支持:修改主键、添加表注释、函数索引、多表合并场景的 Online DDL、自定义类型。
ADB PostgreSQL 支持的 DDL:
支持:CREATE TABLE、ALTER TABLE(仅部分列操作)、DROP TABLE、索引相关。
不支持:自定义类型、事务性 DDL、部分复杂约束。
源端限制:禁止使用 gh-ost/pt-online-schema-change 等 Online DDL 工具,否则会导致同步失败。 - 检查配置与权限
DDL 同步开关:确认任务已勾选库表结构同步,且未过滤 DDL。
账号权限:DTS 账号需具备源库 SELECT/REPLICATION SLAVE、目标库 CREATE/ALTER/DROP 权限。
Binlog 格式:源库 MySQL 需设置为 binlog_format=ROW,MIXED 格式会导致 DDL 解析失败阿里云。
三、分场景修复方案
场景 1:不支持的 DDL(如修改字段类型、主键)
非整库同步:
从同步对象中移除报错表;
删除目标库该表;
重新加入该表,DTS 会全量重同步(跳过失败的 DDL)。
整库同步:
在 ADB 新建表(如 t_new),结构与源表一致并调整字段类型;
INSERT INTO t_new SELECT * FROM t_old; 迁移数据;
重命名表:DROP TABLE t_old; RENAME TABLE t_new TO t_old;;
重启 DTS 任务。
场景 2:源端 Online DDL 工具冲突
暂停源端 Online DDL 操作;
若已产生临时表,需清理后重新初始化同步任务;
后续结构变更优先通过 DMS 执行在线 DDL,避免临时表冲突。
场景 3:目标表有触发器
删除目标表上的触发器(DTS 不支持目标表触发器,会导致主键冲突或列不存在错误);
重启 DTS 任务。
场景 4:多表归并字段不一致
统一多源表字段结构,确保字段类型、长度一致;
若无法统一,提交工单联系 DTS 技术支持处理。
场景 5:目标实例异常
扩容磁盘降低使用率至 80% 以下;
等待备份完成,或在 ADB 控制台手动终止异常备份;
修复网络 / 白名单问题,确保连通性。