PostgreSQL 17 中的增量备份:实用指南
Source: Dev.to

介绍
PostgreSQL 17 引入了原生增量备份支持,这是数据库备份策略的一大飞跃。与每次都复制整个数据集不同,增量备份只捕获自上一次备份(完整或增量)以来已更改的数据块。这大幅缩短了备份时间,降低了存储消耗和系统开销。在 PostgreSQL 17 之前,实现此功能需要使用第三方工具,如 pgBackRest 或 Barman,这会增加配置和维护负担。现在,原生支持已内置于 PostgreSQL,整个过程显著更简化。
什么是增量备份?
增量备份仅记录自上一次备份(无论是完整备份还是之前的增量备份)以来所做的更改。相比于无论是否有更改都复制所有数据的完整备份,增量备份更精简、更快速且更节省存储空间。
Key Features in PostgreSQL 17
- Native Integration – 增量备份现已成为 PostgreSQL 核心的一部分,免去了对外部工具的需求。
- Storage Efficiency – 仅备份已修改的数据页,保持存储使用最小化。
- Faster Backups and Recovery – 由于每次处理的数据更少,备份创建更快,恢复也通过仅在完整备份之上应用所需更改而更简化。
工作原理:逐步说明
步骤 1 – 启用 WAL 汇总
在 postgresql.conf 中,将 summarize_wal = on。这会启动 WAL 汇总进程,用于跟踪哪些数据块已被修改。该功能可以在主服务器或备用服务器上启用(默认是 off)。
步骤 2 – 执行完整备份
使用 pg_basebackup 创建初始完整备份。它将作为后续所有增量备份的基础。
pg_basebackup -D /path/to/full_backup -F tar -z -P步骤 3 – 执行第一次增量备份
在插入或修改数据后,重新运行 pg_basebackup 并使用 --incremental 参数,指向完整备份中的 backup_manifest 文件。这样 PostgreSQL 就能知道基线是什么,只捕获自那以后发生的更改。
pg_basebackup -D /path/to/inc1_backup --incremental --manifest /path/to/full_backup/backup_manifest -P步骤 4 – 执行后续增量备份
对于后续的数据更改,再次进行增量备份——这次引用前一次增量备份的 backup_manifest。每个增量备份都通过其清单文件与前一个备份相连。
pg_basebackup -D /path/to/inc2_backup --incremental --manifest /path/to/inc1_backup/backup_manifest -P恢复备份
恢复由 pg_combinebackup 处理,这是 PostgreSQL 17 引入的全新工具。它将完整备份和所有增量备份合并为一个可用的备份目录。请按时间顺序提供备份——先提供完整备份,然后依次提供每个增量备份。
pg_combinebackup -D /path/to/combined_backup \
/path/to/full_backup \
/path/to/inc1_backup \
/path/to/inc2_backup合并完成后,修改恢复目录中 postgresql.conf 的 port 参数,并使用该数据目录启动数据库服务器。验证后会发现,完整备份和所有增量备份中的记录均已完整存在。
什么是 pg_combinebackup?
pg_combinebackup 是伴随工具,用于从增量备份链重建完整的、可恢复的备份。它自动化合并过程并验证备份链的一致性,消除在恢复期间手动干预的需求。
增量备份的优势
- 成本节约 – 减少存储使用意味着成本降低,无论是在云端还是本地基础设施。
- 性能提升 – 较少的数据传输降低系统负载,在高峰运营时段尤其有价值。
- 可扩展性 – 非常适合大型数据库或数据频繁变更的环境,在这些情况下完整备份不切实际。
需要注意的限制
summarize_wal必须启用此功能才能工作。- 增量备份仅适用于
pg_basebackup,且不能从备用服务器获取;必须在主实例上运行。 - 恢复依赖完整且不中断的备份链。如果链中缺少任何备份,恢复将失败。
- 备份在集群级别运行;不支持按表备份。
- 为使功能正常,需要正确保留 WAL 和摘要文件。
结论
PostgreSQL 17 原生增量备份解决了两个长期存在的痛点——存储浪费和备份窗口缓慢——同时为灾难恢复奠定了更坚实的基础。pg_basebackup(使用 --incremental 标志)与 pg_combinebackup 的组合,使整个备份‑与‑恢复工作流更加简洁高效,尤其适用于大规模、高事务量的环境。