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

如何在Postgres RDS多数据库实例中恢复单个数据库?

术语定义

我将使用的术语对应的定义
Database Instance/Cluster(数据库实例/集群)AWS RDS服务页面中显示的名称
Database(数据库)通过CLI连接到数据库实例后,使用\l命令看到的对象

问题描述

我不想恢复整个数据库实例,仅需恢复Postgres RDS中的单个数据库。这些数据库需通过PgAdmin等GUI工具或pg cli连接Postgres后才能查看,据我所知(AFAIF)无法在AWS控制台中查看,但可在GCP的CloudSQL中查看。

我希望仅恢复其中一个数据库,其余保持原样,但使用备份恢复选项会恢复实例中的所有数据库。查阅官方文档后未找到相关解决方案。

若需提取并恢复该单个数据库,pg_dump和pg_restore是否适用?或是有其他更便捷的方法?

解决方案

方法一:pg_dump + pg_restore(最常用方案)

这两个工具完全适用,具体步骤如下:

  1. 创建临时RDS实例
    先把RDS的自动/手动备份恢复成一个临时RDS实例(无法直接从RDS备份文件提取单个库),确保临时实例的Postgres版本与原实例一致。
  2. 导出目标数据库
    连接到临时实例,执行pg_dump导出指定数据库:
    pg_dump -h <临时实例端点> -U <数据库用户名> -d <目标数据库名> -Fc -f target_db.dump
    
    -Fc参数指定用自定义格式备份,方便后续精准恢复。
  3. 恢复到原实例
    确保原实例中目标数据库已存在(如需覆盖可先清空/删除),执行pg_restore完成恢复:
    pg_restore -h <原实例端点> -U <数据库用户名> -d <目标数据库名> -Fc target_db.dump
    
  4. 清理临时资源
    恢复完成后删除临时RDS实例,避免额外成本。

方法二:RDS快照导出到S3(适合大规模数据库)

如果数据库体积较大,可通过S3中转提取单个库:

  1. 将RDS快照导出到S3(需配置IAM权限允许RDS访问目标S3桶)。
  2. 下载S3中的备份文件到本地或EC2实例。
  3. 使用pg_restore指定目标数据库恢复:
    pg_restore -d <原实例目标库名> --dbname=<要恢复的数据库名> <S3下载的备份文件>
    

注意事项

  • 操作前务必备份原实例中的目标数据库,防止数据丢失。
  • 确保操作使用的数据库用户拥有足够权限(如CREATEDB、数据库OWNER权限)。
  • 恢复过程中尽量避开业务高峰,减少对线上服务的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:30:12