如何为未开放公网访问的Amazon RDS PostgreSQL导出数据库dump
无公网访问权限下导出Amazon RDS PostgreSQL Dump备份的操作步骤
前置要求
- 拥有一台和目标RDS PostgreSQL实例处于同一VPC的EC2实例(可以是临时创建的最小规格实例,用完即可释放),EC2的安全组需允许访问RDS实例的5432端口,且RDS实例的安全组入站规则开放EC2私有IP的5432端口访问权限。
- EC2上已安装和RDS实例大版本一致的PostgreSQL客户端:
- Amazon Linux 2下安装命令:
sudo amazon-linux-extras install postgresql<对应版本号>,例如RDS用的是PostgreSQL14就写postgresql14 - Ubuntu下安装命令:
sudo apt update && sudo apt install postgresql-client-<对应版本号>
- Amazon Linux 2下安装命令:
正式操作步骤
- 登录EC2实例,可通过SSH或者AWS Session Manager登录,无需EC2开通公网IP也可操作
- 先验证网络连通性,执行命令:
nc -zv <RDS实例私有端点地址> 5432,返回success字样即为连通正常 - 执行pg_dump命令导出全库备份,命令模板如下:
pg_dump -h <RDS实例私有端点地址> -U <RDS数据库用户名> -d <需要导出的数据库名称> -F c -b -v -f <自定义备份文件名>.dump
各参数说明:
-F c:输出PostgreSQL自定义压缩格式备份,恢复时兼容性更好-b:同步导出数据库大对象-v:输出导出过程日志,方便排查异常-f:指定备份文件的保存名称和路径- 执行命令后按照提示输入数据库密码,等待导出完成即可,导出时长由数据库大小决定
- 导出完成后将备份文件从EC2传输到本地:
- 若EC2有公网IP,本地执行scp命令拉取:
scp <EC2登录用户名>@<EC2公网IP>:<备份文件全路径> <本地保存路径> - 若EC2无公网IP,可通过AWS Session Manager的文件传输功能将备份文件下载到本地
- 若EC2有公网IP,本地执行scp命令拉取:
替代方案:直接导出备份到S3(无需EC2)
如果不想临时创建EC2实例,可以使用RDS原生的导出到S3功能:
- 先创建一个IAM角色,信任实体设置为
rds.amazonaws.com,给角色授予目标S3存储桶的写入权限 - 配置目标S3桶的桶策略,允许上述IAM角色写入对象
- 在AWS控制台RDS实例的操作菜单中选择导出到S3,按照页面提示选择要导出的库、目标S3桶、刚才创建的IAM角色,提交后等待导出完成即可,导出完成后直接从S3桶下载备份文件到本地
注意事项:导出操作建议在业务低峰期执行,避免占用过多IO资源影响正常业务;导出过程中不要重启RDS实例或修改实例网络配置,避免导出中断。
内容的提问来源于stack exchange,提问作者Jahanzaib Jb
相关产品推荐
相关产品推荐

