这是《PostgreSQL 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 备份是最后的安全网。生产方案必须能恢复,并且恢复能力被演练验证过。
29.1 备份类型
| 类型 | 说明 |
|---|---|
| 逻辑备份 | SQL 或归档文本 |
| 物理备份 | 数据目录和 WAL |
| 基础备份 + WAL | 支持 PITR |
| 快照 | 存储层一致性快照 |
29.2 pg_dump
pg_dump -h localhost -U postgres -Fc -d shop -f shop.dump
恢复:
createdb shop_restore
pg_restore -d shop_restore shop.dump
适合小库和单库迁移,大库恢复较慢。
29.3 pg_dumpall
pg_dumpall -f cluster.sql
包含角色、表空间和数据库定义。全局对象需要定期备份。
29.4 PITR
要素:
基础备份
连续 WAL 归档
恢复目标时间
配置和密码等外部资源
归档配置:
archive_mode = on
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f'
29.5 备份工具
常见工具:
| 工具 | 用途 |
|---|---|
| pgBackRest | 物理备份和仓库管理 |
| Barman | 备份与恢复 |
| wal-g | WAL 和对象存储 |
| pg_dump | 逻辑导出 |
选择标准:
- 全量 / 增量能力;
- 对象存储支持;
- 压缩加密;
- 并行恢复;
- 与云环境兼容;
- 团队熟悉度。
29.6 恢复流程
1. 确认故障和恢复目标
2. 准备新实例
3. 恢复基础备份
4. 配置 restore_command
5. 设置 recovery_target
6. 启动恢复
7. 校验数据
8. 切换应用
9. 保留故障现场
29.7 校验
SELECT count(*) FROM orders;
SELECT max(created_at) FROM orders;
SELECT pg_current_wal_lsn();
还应校验:
- 关键表行数;
- 业务指纹;
- 索引完整性;
- 应用登录;
- 复制状态。
29.8 RPO 与保留策略
全量:每周
差异 / 增量:每日
WAL:连续归档
异地:按灾备等级
RPO 取决于 WAL 归档连续性,而不是备份文件本身。
本章小结
逻辑备份适合小规模和迁移,物理备份加 WAL 是生产恢复主流方案。备份必须加密、异地保存、容量监控,并定期做真实恢复演练。
思考题
- pg_dump 和物理备份有什么区别?
- PITR 为什么需要连续 WAL?
- RPO 如何确定?
- 恢复后如何校验?
- 哪些全局对象容易被漏备份?