温馨提示×

Linux PostgreSQL数据恢复有哪些方法

小樊
41
2025-12-24 09:29:58
栏目: 云计算

Linux 上 PostgreSQL 数据恢复方法概览

  • 逻辑恢复:使用 pg_dump/pg_restore 对单个库或对象做导出/导入,适合误删表/库、迁移与选择性恢复。
  • 时间点恢复 PITR:基于基础备份 + WAL 归档,可将库恢复到任意时间点或最近一致性点。
  • 物理恢复:用 文件系统/块级备份pg_basebackup 做整库恢复,适合实例级故障、介质损坏。
  • 单用户模式修复:数据库无法正常启动时,进入单用户模式执行检查/修复(如重建索引、VACUUM)。
  • 第三方工具:如 pgBackRest 等,提供并行、压缩、加密与更简化的备份恢复流程。

方法对比与适用场景

方法 前提条件 典型命令 适用场景 优点 局限
逻辑恢复(pg_dump/pg_restore) 有逻辑备份文件(.sql 或 -F c 自定义归档) pg_dump -U u -F c db > db.backup;pg_restore -U u -d db db.backup 误删表/库、跨版本迁移、选择性对象恢复 灵活、粒度细、跨平台 非崩溃一致性;大数据量恢复较慢
PITR(基础备份 + WAL 归档) 已开启 WAL 归档,有基础备份 基础备份(pg_basebackup 或文件系统拷贝);设置 restore_command、recovery_target_time;启动至恢复完成 误删数据后按时间点回滚、合规审计回退 可精确到时间点、连续性好 需提前配置归档与备份
物理恢复(文件系统/块级) 有可用的文件系统/块级备份 停库;用备份覆盖 $PGDATA;启动 实例损坏、磁盘故障、无法启动 恢复快、一致性好 依赖同平台/版本;粒度粗
单用户模式修复 实例无法正常启动 postgres --single -D $PGDATA;执行 REINDEX/VACUUM 系统表/索引损坏、启动失败 可在不启动服务时修复 风险高,需有经验
第三方工具(pgBackRest 等) 已部署工具并配置仓库 pgbackrest --stanza=demo backup/restore 大规模、自动化、加密压缩备份 易用、功能强、可并行 需学习成本与额外部署

关键操作要点

  • 逻辑恢复

    • 备份:pg_dump -U postgres -F c -b -v -f mydb.backup mydb
    • 恢复:先创建空库 createdb mydb;再 pg_restore -U postgres -d mydb -v mydb.backup
    • 若备份为纯 SQL 脚本(非 -F c),用 psql -d mydb -f mydb.sql 导入。
  • PITR(时间点恢复)

    • 准备:已开启 WAL 归档(postgresql.conf 中 archive_mode=on,archive_command 如 ‘cp %p /path/%f’),并有基础备份。
    • 恢复:将基础备份恢复到 $PGDATA;在 $PGDATA 下创建 recovery.signal;在 postgresql.auto.conf 中设置 restore_command=‘cp /path/%f %p’ 与 recovery_target_time=‘2024-12-07 14:14:29.975833+08’(或 recovery_target_timeline=‘latest’);启动数据库,完成恢复后自动切为读写。
  • 物理恢复(文件系统/块级)

    • 停库:systemctl stop postgresql 或 pg_ctl -D $PGDATA stop
    • 用备份覆盖 $PGDATA(文件系统拷贝或 tar 包解压)
    • 启动:systemctl start postgresql 或 pg_ctl -D $PGDATA start
  • 单用户模式修复

    • 停库后执行:postgres --single -D /var/lib/pgsql/data mydb
    • 在单用户提示符下可执行:REINDEX DATABASE mydb; VACUUM FULL; 等修复命令;完成后重启。

恢复前检查与恢复后验证

  • 恢复前

    • 备份当前状态:对现有 $PGDATA 与关键配置文件做快照/拷贝,避免恢复失败导致二次损失。
    • 校验备份完整性:对备份文件做 MD5/SHA-256 校验,确认可读、大小合理。
  • 恢复后

    • 基本校验:连接数据库,核对关键表行数、抽样数据、约束与索引可用性。
    • 一致性检查:外键、触发器、存储过程是否能正常运行;必要时执行 VACUUM ANALYZE。

常见注意事项与风险提示

  • 误删后应立即停止写入,避免新 WAL 覆盖可回滚窗口;尽快进行备份(哪怕是文件系统级拷贝)。
  • 使用 pg_resetxlog/pg_resetwal 仅在极端情况下、且已做好完整备份后尝试,操作不当会导致数据丢失。
  • 恢复路径与参数(如 restore_commandrecovery_target_time)务必核对,避免恢复到错误时间点。
  • 生产环境建议在恢复演练环境验证流程与时效,再对生产执行。

0