数据库

PostgreSQL 数据库备份与恢复

从逻辑备份到恢复演练,建立可验证的数据保护流程。

先定义恢复目标#

备份方案必须回答两个问题:最多能丢多少数据(RPO),最长能停多久(RTO)。小型博客通常可以每天做逻辑全量备份、保留 14~30 天,并把副本同步到另一台机器或对象存储。

创建可检查的归档#

自定义格式支持选择性恢复和并行恢复,比直接压缩 SQL 更适合常规演练。

bash
stamp=$(date +%Y%m%d-%H%M%S)
pg_dump --format=custom --no-owner --file="gkblog-$stamp.dump" gkblog
pg_restore --list "gkblog-$stamp.dump" | head -30
sha256sum "gkblog-$stamp.dump" > "gkblog-$stamp.dump.sha256"

在隔离数据库恢复#

bash
createdb -T template0 gkblog_restore_test
pg_restore --exit-on-error --no-owner --dbname=gkblog_restore_test gkblog-20260801-020000.dump
psql gkblog_restore_test -c 'select count(*) from "Article";'
psql gkblog_restore_test -c 'select count(*) from "User";'
dropdb gkblog_restore_test
验证层级方法
文件完整SHA-256 校验通过
归档可读pg_restore --list 无错误
结构完整迁移表、索引和约束存在
业务可用用恢复库启动应用并登录、读文章

自动化与保留策略#

  • 备份任务失败会告警
  • 副本离开生产服务器
  • 每月至少恢复一次
  • 删除策略只处理明确的备份目录
  • 记录恢复耗时并与 RTO 比较

官方 pg_dump 与 pg_restore 文档还说明了目录格式和并行恢复。真正可靠的不是“有 dump 文件”,而是最近一次恢复演练成功。

GK / OPS NOTES
把每一次变更写成可以复现的步骤

示例命令请先在测试环境验证,再根据自己的系统版本、网络和备份策略调整。

讨论区 18

分享你的经验、补充或不同观点。支持 Markdown 基础语法。

讨论区暂时为空,欢迎分享你的经验。