AWS DMS迁移MongoDB到RDS Postgres任务报错无日志排查
已确认的前置配置状态
- RDS VPC与DMS VPC通过VPC Peering打通,目标端点测试连接状态为成功
- DMS VPC所属IP段已在跨AWS账号的MongoDB服务器侧完成白名单配置,源端点测试连接状态为成功
- DMS端点Schema板块可正常查看两端数据库的Schema信息
- 已创建全量+持续增量迁移任务,迁移范围为MongoDB侧单个集合
当前异常现象
- 预迁移评估(Premigration assessments)所有校验项全部通过
- 目标Postgres数据库中已自动创建与MongoDB侧同名的空Schema
- 目标Postgres库内的
awsdms_apply_execution表无任何数据,为空表 - 任务状态持续显示运行出错,查询CloudWatch日志未发现任何报错信息
根因排查与解决方案
按优先级从高到低逐一排查:
- 核对源端MongoDB连接配置与迁移模式匹配度
若源端MongoDB为副本集/分片集群架构,任务配置时误选单实例模式、未正确配置副本集节点地址、DMS连接账号无local库oplog读取权限时,任务会在增量同步初始化阶段直接失败,3.4.x早期版本DMS不会将该类错误写入默认级别的CloudWatch日志。
处理方式:副本集/分片集群架构的源端,连接串需填写所有节点地址,附加readPreference=secondaryPreferred参数;给DMS连接账号补充源库读权限、local库oplog读取权限;全量+增量任务不要勾选跳过全量阶段的配置项,避免任务找不到全量基线锚点直接报错。 - 检查表映射规则与目标端账号权限
文档型数据库到关系型数据库迁移时,若表映射规则中集合名拼写错误、存在多余转义字符,或者DMS连接Postgres的账号仅具备数据读写权限、缺少Schema下的建表/元数据修改权限,任务会在表结构初始化阶段静默失败,不会产生写入执行记录,因此
awsdms_apply_execution表为空。
处理方式:核对表映射规则的选择范围,确认要迁移的集合名称准确;给DMS使用的Postgres账号补充对应Schema的CREATE、USAGE权限;暂时关闭自定义字段类型映射规则,使用默认的文档转JSONB映射模式启动测试。 - 调整任务日志级别捕获隐藏报错
DMS任务默认日志级别仅记录ERROR级事件,初始化阶段的组件加载失败、关联IAM角色权限缺失类错误不会被默认级别捕获,就会出现任务标红但无日志的情况。
处理方式:停止当前报错任务,修改任务配置,将所有日志组件级别调整为DEBUG(排查完成后及时调回默认级别,避免产生不必要的日志存储费用),重启任务1-2分钟后即可在CloudWatch中看到具体报错点。 - 排查复制实例版本与资源问题
DMS 3.4.4及以下版本存在已知bug:使用小于
dms.c5.large规格的复制实例做MongoDB到Postgres迁移时,元数据初始化阶段可能出现内存不足进程崩溃,崩溃前不会写入日志,仅将任务标记为出错状态。
处理方式:将复制实例引擎升级到3.4.7及以上稳定版本,若任务启动时实例CPU/内存利用率飙升至100%,将实例规格升级至少1档后重启任务。
内容的提问来源于stack exchange,提问作者Aim_headshot

