跨VPC同区域复制AWS RDS PostgreSQL及快照提取指定数据库
我来帮你梳理这两个AWS RDS PostgreSQL场景的具体解决方案,都是实际运维中常用的实操方法:
1. 同一区域不同VPC的两个RDS PostgreSQL实例间数据库复制
首先得解决网络连通性,因为不同VPC默认是网络隔离的,先选一种方式打通两个VPC:
- 配置VPC Peering:在AWS控制台创建两个VPC的 peering 连接,更新双方的路由表,让彼此的子网能互相访问
- 或者用Transit Gateway:适合多VPC场景,统一管理网络连通
连通之后,有两种主流复制方案可选:
方案一:逻辑复制(支持增量/近实时同步)
适合需要持续同步数据的场景:
- 修改源实例的参数组:将
wal_level设置为logical,保存参数组后重启源实例(注意会有短暂停机,提前安排维护窗口) - 在源实例创建复制专用用户:
CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'your_strong_password';
- 在源实例创建发布(可以指定全表或特定表):
-- 同步整个数据库的所有表 CREATE PUBLICATION db_replication FOR ALL TABLES; -- 或者只同步指定表 CREATE PUBLICATION db_replication FOR TABLE table1, table2;
- 在目标实例创建订阅:先确保目标端已经创建好同名数据库(如果没有就执行
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;
- 验证同步:在源库插入/更新一条数据,检查目标库是否能同步到即可
方案二:快照+跨VPC恢复(全量一次性迁移)
适合只需要全量复制一次的场景:
- 给源RDS实例创建手动快照:可以通过AWS控制台操作,或者用CLI命令:
aws rds create-db-snapshot --db-instance-identifier source-db --db-snapshot-identifier source-db-snapshot
- 共享快照(如果两个实例属于不同AWS账号):在快照的权限设置里添加目标账号ID,目标账号在自己的RDS控制台接受共享快照
- 在目标VPC中恢复快照:创建新的RDS实例,选择共享的快照,指定目标VPC、子网组和安全组(安全组要允许必要的访问权限)
- 注意:这种方法是全量迁移,没有增量同步,如果后续需要持续同步,需要再搭配逻辑复制
2. 从原RDS快照提取指定数据库到新VPC实例
因为RDS快照是整个实例的完整备份,没法直接恢复单个数据库,所以需要借助临时中转实例来提取:
- 创建临时中转RDS实例:在新VPC(或者能和新实例连通的VPC)中,用原快照恢复一个临时RDS实例(这个实例只是临时用,用完可以删除,避免浪费成本)
- 确保临时实例和新实例网络连通:比如放在同一个VPC,或者配置VPC Peering,安全组开放5432端口的访问权限
- 导出指定数据库:用
pg_dump工具连接临时实例,导出目标数据库:
pg_dump -h temp-rds-endpoint.xxx.region.rds.amazonaws.com -U master_username -d target_db_name -f db_dump.sql
- 导入到新实例:
- 先在新实例上创建目标数据库(如果还没创建):
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 - 清理资源:确认数据导入成功后,删除临时中转RDS实例,释放资源
如果你有大量数据或者需要自动化操作,也可以用AWS DMS(数据库迁移服务)来实现,但对于单个数据库的提取,pg_dump+psql是最轻量化的方案。
内容的提问来源于stack exchange,提问作者Eric Mamet
相关产品推荐
相关产品推荐

