DMS同步异常:RDS MySQL新建表未迁移至Redshift
问题分析与解决步骤
核心原因
DMS在「全量+CDC」模式下,新增无主键表无法同步到Redshift,主要和表映射范围、无主键表的CDC捕获配置、MySQL源端Binlog设置这几个关键点有关——默认情况下DMS不会自动同步未包含在映射规则里的表,且无主键表需要额外配置才能被CDC流程识别。
具体解决步骤
1. 调整迁移任务的表映射规则
- 检查当前任务的表映射:如果之前是指定具体表名,新增表不会被自动纳入同步范围。
- 修改表映射为
你的库名.%,用通配符匹配该库下所有新增表;如果是多库同步,可设置为%(需注意过滤不需要的库)。 - 确认没有添加排除新增表的过滤规则,比如特定前缀/后缀的排除条件。
- 修改表映射为
2. 开启源端点对无主键表的CDC支持
编辑RDS MySQL源端点,在额外连接属性中添加以下配置:
captureDDLs=1;includeNoPrimaryKeyTables=1;cdcMaxBatchInterval=5
includeNoPrimaryKeyTables=1:允许DMS捕获无主键表的变更数据captureDDLs=1:让DMS自动捕获CREATE TABLE这类DDL语句,同步表结构到Redshift
3. 验证MySQL Binlog配置
DMS CDC依赖行级Binlog,需确认RDS MySQL的以下配置:
- 执行SQL检查Binlog格式:
确保结果为SHOW VARIABLES LIKE 'binlog_format';ROW,若不是则修改RDS参数组并重启实例(注意业务停机影响)。 - 检查Binlog行镜像设置:
确保结果为SHOW VARIABLES LIKE 'binlog_row_image';FULL,保证DMS能捕获完整的行变更数据。
4. 重启DMS迁移任务
修改端点配置和表映射后,必须停止并重启迁移任务,让新配置生效。重启后DMS会重新扫描源端表结构,自动识别新增的无主键表并启动全量同步+CDC捕获。
5. 手动触发全量同步(可选)
如果重启任务后新增表仍未同步,可手动触发全量加载:
- 在DMS控制台进入目标任务,打开「表统计」页面,找到对应新增表,点击「重新加载表」即可。
注意事项
- 无主键表在CDC阶段的性能会低于有主键/唯一键的表,因为DMS需要用整行数据做匹配标识,建议业务允许的情况下给表添加主键或唯一约束。
- 确保DMS任务绑定的IAM角色拥有读取RDS Binlog、执行DDL捕获的权限。
内容的提问来源于stack exchange,提问作者Sumant Kumar
相关产品推荐
相关产品推荐

