PostgreSQL通过WAL机制和基础备份实现增量备份:先使用pg_basebackup创建全量备份,再持续归档WAL日志,恢复时结合基础备份与WAL重放完成PITR,第三方工具如pgBackRest可简化管理。

PostgreSQL 本身不直接提供内置的“文件级”增量备份工具,但通过其 WAL(Write-Ahead Logging)机制 和 基础备份(Base Backup) 的配合,可以高效实现增量备份。这种方案是 PostgreSQL 主流的物理备份方式,通常结合 pg_basebackup 和归档 WAL 日志来完成。
1. 增量备份的核心机制:WAL 日志
PostgreSQL 使用 WAL 来确保数据一致性。每次数据修改都会先写入 WAL 日志文件。这些日志记录了所有数据库的变更操作。
增量备份的本质就是:
- 先做一个全量基础备份(称为 base backup)
- 然后持续归档 WAL 日志文件
- 恢复时,先还原 base backup,再重放 WAL 日志,就能恢复到任意时间点
因此,WAL 归档就是增量部分。
2. 实现步骤:基础备份 + WAL 归档
要实现增量备份,需配置以下内容:
① 启用 WAL 归档编辑 postgresql.conf:
wal_level = replica archive_mode = on archive_command = 'cp %p /path/to/archive/%f'
- wal_level=replica 或 higher(如 logical)以支持归档
- archive_mode=on 开启归档模式
- archive_command 定义如何将 WAL 文件复制到归档目录(可用 scp、rsync 等)
使用 pg_basebackup 创建全量备份:
pg_basebackup -h localhost -U backup_user -D /backup/base_20250405 -Ft -z -P
- -Ft 表示输出为 tar 格式
- -z 启用压缩
- -P 显示进度
这个 base backup 是后续增量恢复的起点。
③ 持续归档 WAL 文件PostgreSQL 会自动将切换的 WAL 文件(每 16MB 一个)执行 archive_command。只要归档路径保存完整,就可以用于恢复任意时间点。
3. 时间点恢复(PITR):体现增量价值
当需要恢复时:
- 解压 base backup 到数据目录
- 在 recovery.conf(或 postgresql.conf 中设置)指定 restore_command 和 recovery_target
- 启动数据库,PostgreSQL 自动从归档中提取 WAL 并重放
例如:
restore_command = 'cp /path/to/archive/%f %p' recovery_target_time = '2025-04-05 14:00:00'
这样就能恢复到指定时间,相当于利用增量日志“补全”了基础备份之后的所有变更。
4. 第三方工具简化管理
手动管理 base backup 和 WAL 归档较复杂,推荐使用专业工具:
- pgBackRest:支持全量、增量、差异备份,自动管理 WAL 归档和备份保留策略
- Barman:由 EnterpriseDB 提供,支持远程备份、PITR、备份验证
- WAL-G:支持高速压缩和云存储(S3、GCS),适合大规模部署
这些工具在底层仍基于 WAL + base backup,但提供了更易用的接口和调度能力。
基本上就这些。PostgreSQL 的增量备份依赖 WAL 机制,通过一次全量备份加持续归档 WAL 实现。关键是配置好归档,并定期做 base backup。使用 pgBackRest 等工具能大幅降低运维复杂度。










