温馨提示×

Ubuntu中pgAdmin的备份与恢复策略

小樊
39
2026-01-08 11:55:07
栏目: 智能运维

Ubuntu下 pgAdmin 的备份与恢复策略

一、策略总览与选型

  • 备份类型与适用场景
    • 逻辑备份:使用 pg_dump / pg_dumpall,导出为 SQL自定义格式(-F c),便于跨小版本迁移、按库/表粒度恢复,但大数据量时导入导出较慢。
    • 物理备份:使用 pg_basebackup,直接复制数据目录,恢复速度快,适合生产环境的快速整机恢复,通常要求 PostgreSQL 版本一致
    • 时间点恢复 PITR:在物理备份基础上配合 WAL 归档(archive_command),可将库恢复到任意时间点,满足误删、故障回滚等需求。
  • 角色与配置备份
    • 全局对象(角色、表空间等)建议用 pg_dumpall --globals-only 单独备份;pgAdmin 自身的配置与连接信息位于 ~/.pgadmin4/,需单独纳入备份。

二、备份策略与实施步骤

  • 逻辑备份(pg_dump,适合日常与迁移)
    • 单库导出为 SQL(便于审阅与跨版本):
      • 命令:pg_dump -U postgres -h localhost -p 5432 -f /backups/mydb_$(date +%F).sql mydb
    • 单库导出为自定义格式(便于并行与选择性恢复):
      • 命令:pg_dump -U postgres -h localhost -p 5432 -F c -f /backups/mydb_$(date +%F).dump mydb
    • 全库与全局对象:
      • 全库 SQL:pg_dumpall -U postgres -f /backups/all_$(date +%F).sql
      • 仅全局对象:pg_dumpall --globals-only -U postgres -f /backups/globals_$(date +%F).sql
    • 定时任务(cron,示例每日 02:00 备份 mydb):
      • 0 2 * * * /usr/bin/pg_dump -U postgres -h localhost -p 5432 -F c /backups/mydb_$(date +%F).dump mydb
    • 压缩与保留:建议配合 gzip 压缩与 logrotate/自定义脚本做保留策略(如保留最近 7–30 天)。
  • 物理备份(pg_basebackup,适合生产快速恢复)
    • 执行备份:pg_basebackup -U postgres -h localhost -D /backups/base_$(date +%F) -F t -X fetch -P
    • 建议与 WAL 归档配合启用 PITR(见第四部分)。
  • pgAdmin 图形化备份
    • 备份:在左侧树中右键数据库 → 备份 → 选择格式(Plain/自定义)、勾选 Pre-data / Data / Post-data → 指定路径开始备份。
    • 恢复:先创建同名空库 → 右键数据库 → 恢复 → 选择备份文件 → 开始恢复。

三、恢复策略与步骤

  • 逻辑备份恢复
    • SQL 文件(纯文本):psql -U postgres -h localhost -p 5432 -f /backups/mydb_2025-08-01.sql mydb
    • 自定义格式(-F c):pg_restore -U postgres -h localhost -p 5432 -d mydb /backups/mydb_2025-08-01.dump
    • 常用选项:-j N(并行)、-c(先清理目标对象)、-C(自动 CREATE DATABASE)。
  • 物理备份恢复
    • 停止数据库:systemctl stop postgresql@12-main(版本号按实际)
    • 清空数据目录并解压基础备份到数据目录(/var/lib/postgresql/12/main)
    • 配置恢复(见第四部分),然后启动:systemctl start postgresql@12-main
  • pgAdmin 图形化恢复
    • 新建同名数据库(编码/所有者与原库一致)→ 右键数据库 → 恢复 → 选择备份文件 → 开始恢复。

四、时间点恢复 PITR 配置与演练

  • 启用 WAL 归档(主库 postgresql.conf)
    • wal_level = replica
    • archive_mode = on
    • archive_command = ‘test ! -f /archive/%f && cp %p /archive/%f’
    • 创建归档目录并授权:mkdir -p /archive && chown postgres:postgres /archive
    • 重启生效:systemctl restart postgresql@12-main
  • 获取基础备份
    • pg_basebackup -U postgres -h localhost -D /backups/base_$(date +%F) -F t -X fetch -P
  • 执行时间点恢复
    • 停止数据库并清空数据目录,将基础备份解压至数据目录
    • $PGDATA 创建 recovery.signal(PostgreSQL 12+),并配置:
      • restore_command = ‘cp /archive/%f %p’
      • recovery_target_time = ‘2025-08-01 14:30:00’(按需设置目标时间/事务)
    • 启动服务,PostgreSQL 将自动回放 WAL 至指定时间点后进入只读,确认无误后执行 SELECT pg_wal_replay_resume(); 完成恢复
  • 演练与校验
    • 建议每月在测试环境演练一次 PITR,校验 恢复点目标 RPO恢复时间目标 RTO,并验证备份完整性与可用性。

五、安全、合规与运维要点

  • 备份存储与保留
    • 备份文件与归档目录应置于安全位置,建议 异地/云存储 留存,至少保留 7–30 天;对敏感数据启用 加密访问控制
  • 权限与账号
    • 执行备份/恢复使用具备足够权限的 数据库超级用户(如 postgres);操作系统层面限制备份目录访问权限(仅 postgres 可读写)。
  • 版本与兼容性
    • 逻辑备份便于 跨小版本 迁移;物理备份与 PITR 通常要求 相同主版本 的 PostgreSQL。
  • 配置与元数据
    • 定期备份 pg_dumpall --globals-only(角色/表空间等)与 ~/.pgadmin4/(连接与偏好设置);变更前后及时更新备份清单与校验值(如 sha256sum)。
  • 变更窗口与回滚
    • 恢复操作对业务有影响,建议在 低峰时段 执行,并在恢复前对当前库做一次备份以便快速回滚。

0