You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨VPC同区域复制AWS RDS PostgreSQL及快照提取指定数据库

我来帮你梳理这两个AWS RDS PostgreSQL场景的具体解决方案,都是实际运维中常用的实操方法:

1. 同一区域不同VPC的两个RDS PostgreSQL实例间数据库复制

首先得解决网络连通性,因为不同VPC默认是网络隔离的,先选一种方式打通两个VPC:

  • 配置VPC Peering:在AWS控制台创建两个VPC的 peering 连接,更新双方的路由表,让彼此的子网能互相访问
  • 或者用Transit Gateway:适合多VPC场景,统一管理网络连通

连通之后,有两种主流复制方案可选:

方案一:逻辑复制(支持增量/近实时同步)

适合需要持续同步数据的场景:

  1. 修改源实例的参数组:将wal_level设置为logical,保存参数组后重启源实例(注意会有短暂停机,提前安排维护窗口)
  2. 在源实例创建复制专用用户:
CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'your_strong_password';
  1. 在源实例创建发布(可以指定全表或特定表):
-- 同步整个数据库的所有表
CREATE PUBLICATION db_replication FOR ALL TABLES;
-- 或者只同步指定表
CREATE PUBLICATION db_replication FOR TABLE table1, table2;
  1. 在目标实例创建订阅:先确保目标端已经创建好同名数据库(如果没有就执行CREATE DATABASE target_db;),然后运行:
CREATE SUBSCRIPTION db_subscription 
CONNECTION 'host=source-rds-endpoint.xxx.region.rds.amazonaws.com port=5432 dbname=source_db user=replicator password=your_strong_password' 
PUBLICATION db_replication;
  1. 验证同步:在源库插入/更新一条数据,检查目标库是否能同步到即可

方案二:快照+跨VPC恢复(全量一次性迁移)

适合只需要全量复制一次的场景:

  1. 给源RDS实例创建手动快照:可以通过AWS控制台操作,或者用CLI命令:
aws rds create-db-snapshot --db-instance-identifier source-db --db-snapshot-identifier source-db-snapshot
  1. 共享快照(如果两个实例属于不同AWS账号):在快照的权限设置里添加目标账号ID,目标账号在自己的RDS控制台接受共享快照
  2. 在目标VPC中恢复快照:创建新的RDS实例,选择共享的快照,指定目标VPC、子网组和安全组(安全组要允许必要的访问权限)
  3. 注意:这种方法是全量迁移,没有增量同步,如果后续需要持续同步,需要再搭配逻辑复制
2. 从原RDS快照提取指定数据库到新VPC实例

因为RDS快照是整个实例的完整备份,没法直接恢复单个数据库,所以需要借助临时中转实例来提取:

  1. 创建临时中转RDS实例:在新VPC(或者能和新实例连通的VPC)中,用原快照恢复一个临时RDS实例(这个实例只是临时用,用完可以删除,避免浪费成本)
  2. 确保临时实例和新实例网络连通:比如放在同一个VPC,或者配置VPC Peering,安全组开放5432端口的访问权限
  3. 导出指定数据库:用pg_dump工具连接临时实例,导出目标数据库:
pg_dump -h temp-rds-endpoint.xxx.region.rds.amazonaws.com -U master_username -d target_db_name -f db_dump.sql
  1. 导入到新实例:
    • 先在新实例上创建目标数据库(如果还没创建):
    psql -h new-rds-endpoint.xxx.region.rds.amazonaws.com -U master_username -c "CREATE DATABASE target_db_name;"
    
    • 然后导入备份文件:
    psql -h new-rds-endpoint.xxx.region.rds.amazonaws.com -U master_username -d target_db_name -f db_dump.sql
    
  2. 清理资源:确认数据导入成功后,删除临时中转RDS实例,释放资源

如果你有大量数据或者需要自动化操作,也可以用AWS DMS(数据库迁移服务)来实现,但对于单个数据库的提取,pg_dump+psql是最轻量化的方案。


内容的提问来源于stack exchange,提问作者Eric Mamet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:10:44