如何通过AWS DMS跨AWS账户同步Postgres RDS指定Schema(低停机)
如何用AWS DMS实现Postgres RDS跨账户仅指定Schema的低停机迁移
完全可以用AWS DMS实现这个需求,而且能做到极低停机(仅在最终切换时需要短暂暂停写入),以下是具体操作步骤和关键细节:
1. 源端与目标端预配置
源Postgres RDS准备
- 开启逻辑复制:修改源RDS的参数组,设置
rds.logical_replication=1,保存后重启实例(开启该参数后,RDS会自动将wal_level调整为logical,这是CDC同步的必要条件)。 - 创建DMS专用用户:在源库执行SQL,赋予必要权限:
CREATE USER dms_replication WITH LOGIN PASSWORD 'your_secure_password'; GRANT REPLICATION LOGIN TO dms_replication; GRANT USAGE ON SCHEMA your_target_schema TO dms_replication; GRANT SELECT ON ALL TABLES IN SCHEMA your_target_schema TO dms_replication; ALTER DEFAULT PRIVILEGES IN SCHEMA your_target_schema GRANT SELECT ON TABLES TO dms_replication; - 调整安全组:允许目标账户的DMS复制实例访问源RDS的5432端口(可通过添加目标复制实例的IP段,或配置跨账户VPC peering后开放对应VPC的访问)。
目标Postgres RDS准备
- 预创建目标Schema:确保目标库中存在与源端同名的Schema(可通过
CREATE SCHEMA your_target_schema;手动创建,也可让DMS自动迁移结构,推荐先手动同步结构以避免差异)。 - 创建DMS目标用户:在目标库执行SQL,赋予权限:
CREATE USER dms_target WITH LOGIN PASSWORD 'your_secure_password'; GRANT CREATE ON SCHEMA your_target_schema TO dms_target; GRANT INSERT, UPDATE, DELETE, SELECT ON ALL TABLES IN SCHEMA your_target_schema TO dms_target; ALTER DEFAULT PRIVILEGES IN SCHEMA your_target_schema GRANT INSERT, UPDATE, DELETE, SELECT ON TABLES TO dms_target;
2. 跨账户网络配置
如果源和目标RDS在不同AWS账户,建议通过VPC对等连接实现安全的网络连通:
- 在源账户发起VPC peering请求,目标账户接受后,配置双方VPC的路由表,添加对方VPC的CIDR路由。
- 确保源RDS和目标RDS的安全组都开放5432端口给对方VPC的CIDR范围。
3. AWS DMS任务配置
创建复制实例
在目标账户的AWS DMS控制台创建复制实例,选择合适的规格(12GB数据量选t3.medium级别即可),确保实例所在VPC能连通源端RDS。
创建端点
- 源端点:选择
PostgreSQL引擎,填写源RDS的端点地址、端口、数据库名、之前创建的dms_replication用户和密码。 - 目标端点:同样选择
PostgreSQL引擎,填写目标RDS的连接信息和dms_target用户凭证。
配置表映射(核心:指定仅同步目标Schema)
在创建DMS迁移任务时,重点配置表映射,通过规则过滤仅同步指定的Schema:
- 选择“使用JSON编辑器”,输入如下规则(替换
your_target_schema为实际Schema名称):
这个规则会包含指定Schema下的所有表,自动排除其他Schema的对象。{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "include_target_schema", "object-locator": { "schema-name": "your_target_schema", "table-name": "%" }, "rule-action": "include" } ] }
任务运行模式
选择Full load plus ongoing replication模式:
- 先执行全量数据迁移,将源端指定Schema的现有数据同步到目标端。
- 全量完成后自动切换到CDC(变更数据捕获)模式,实时同步源端的增量变更(插入、更新、删除)。
4. 最终切换与验证
- 全量迁移完成后,通过DMS控制台的任务监控确认数据同步正常,也可手动对比源和目标库的表行数、关键数据验证一致性。
- 短暂暂停业务写入:等待DMS同步完最后一批增量变更(可通过查看任务的“CDC应用延迟”确认延迟为0)。
- 切换业务连接到目标RDS,验证业务功能正常。
- 确认无误后,停止DMS迁移任务,清理不必要的资源(如复制实例、端点)。
注意事项
- 源端的触发器、存储过程、函数等对象,DMS不会自动迁移,需要手动同步到目标端。
- 确保源和目标PostgreSQL版本兼容(DMS支持PostgreSQL 9.6及以上版本)。
- 如果源Schema存在外键约束,建议在全量迁移前暂时禁用,迁移完成后再启用,避免全量同步时出现约束冲突。
内容的提问来源于stack exchange,提问作者Tri Nguyen
相关产品推荐
相关产品推荐

