在 Linux 上使用 pgAdmin 进行数据库恢复
一、准备与前提
- 安装并登录 pgAdmin 4(常见访问地址为 http://<服务器IP>:5050),确保已创建目标 服务器连接 与 目标数据库(若从空库恢复,先新建数据库并设置正确的 所有者/Owner)。
- 准备与备份方式匹配的备份文件:
- 逻辑备份:.sql(纯文本 SQL 脚本)、.dump/.backup(由 pg_dump 生成,配合 pg_restore 使用)。
- 物理备份:目录形式的 basebackup(由 pg_basebackup 生成,不走 pgAdmin 图形界面恢复)。
- 权限与连接:用于恢复的数据库用户需具备相应权限(如 CREATEDB、对目标库的 OWNER 或 SUPERUSER 等),并且 pg_hba.conf 允许来自 pgAdmin 客户端的连接;必要时在 Linux 防火墙放行 5432(PostgreSQL)与 5050(pgAdmin)端口。
二、图形化恢复步骤(pgAdmin 4)
- 纯 SQL 脚本(.sql)
- 在左侧树形导航中右键目标数据库,选择 Restore。
- 在“Restore”对话框中,选择 Format: Plain,通过文件选择器指定 .sql 文件。
- 选择 Role(执行恢复的角色,如 postgres),确认后点击 Restore;右下角会显示进度,完成后刷新数据库查看对象。
- 自定义/目录格式(.dump/.backup)
- 先创建空的目标数据库(建议与备份时同名或明确指定 Owner)。
- 右键目标数据库,选择 Restore,在对话框中选择 Format: Custom 或 Directory,指定 .dump/.backup 文件或目录。
- 选择 Role,必要时勾选/调整恢复选项(如是否清理现有对象),点击 Restore 并等待完成。
- 补充:若备份时仅导出了 Schema(例如只备份了 public),也可在 Schemas → public → Restore 中执行恢复。
三、常见备份格式与恢复方式对照
| 备份格式 |
生成工具 |
在 pgAdmin 的恢复位置 |
关键选项与提示 |
| .sql(纯文本) |
pg_dump -F p |
目标数据库的 Restore |
选 Format: Plain;适合小到中等规模库;导入即执行 SQL 脚本 |
| .dump/.backup(自定义/目录) |
pg_dump -F c/-F d |
目标数据库的 Restore |
选 Format: Custom/Directory;支持并行与选择性恢复;大型库更友好 |
| Basebackup(目录) |
pg_basebackup |
不适用(不走 pgAdmin) |
需停库或用 recovery.conf/pg_rewind 做物理恢复;适合整库级快速恢复 |
四、常见问题与排查
- 权限不足或连接被拒:确认用于恢复的 数据库用户 具备足够权限,且 pg_hba.conf 与 防火墙 已放行 5432/5050。
- 目标库不存在或 Owner 不匹配:先在 pgAdmin 中 创建目标数据库 并指定正确的 Owner,再进行恢复。
- 恢复对象已存在冲突:在 Custom 格式恢复时可按需选择清理选项,或先清理目标库再恢复。
- 大文件/长时间无响应:优先使用 Custom/Directory 格式并考虑分批/并行恢复;必要时在 低峰时段 执行。
- 物理备份无法通过 pgAdmin 恢复:此类备份需采用 文件系统级 的恢复流程(如基础备份 + WAL 回放),请改用命令行工具。
五、命令行恢复备选(当图形界面不适用时)
- 纯 SQL 脚本(.sql)
- 示例:
- psql -h localhost -U postgres -d mydb -f /path/mydb.sql
- 自定义/目录格式(.dump/.backup)
- 示例:
- pg_restore -h localhost -U postgres -d mydb /path/mydb.dump
- 物理备份(Basebackup)
- 示例:
- 停止实例后,将备份目录拷贝至数据目录并配置 recovery.conf/pg_rewind 等,再启动实例完成恢复。
- 提示:命令行方式适合 自动化/批量/大库 场景,且便于精确控制恢复参数。