PostgreSQL 17 中的增量备份:实用指南

发布: (2026年4月2日 GMT+8 15:42)
6 分钟阅读
原文: Dev.to

Source: Dev.to

PostgreSQL 17 增量备份

介绍

PostgreSQL 17 引入了原生增量备份支持,这是数据库备份策略的一大飞跃。与每次都复制整个数据集不同,增量备份只捕获自上一次备份(完整或增量)以来已更改的数据块。这大幅缩短了备份时间,降低了存储消耗和系统开销。在 PostgreSQL 17 之前,实现此功能需要使用第三方工具,如 pgBackRestBarman,这会增加配置和维护负担。现在,原生支持已内置于 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.confport 参数,并使用该数据目录启动数据库服务器。验证后会发现,完整备份和所有增量备份中的记录均已完整存在。

什么是 pg_combinebackup

pg_combinebackup 是伴随工具,用于从增量备份链重建完整的、可恢复的备份。它自动化合并过程并验证备份链的一致性,消除在恢复期间手动干预的需求。

增量备份的优势

  • 成本节约 – 减少存储使用意味着成本降低,无论是在云端还是本地基础设施。
  • 性能提升 – 较少的数据传输降低系统负载,在高峰运营时段尤其有价值。
  • 可扩展性 – 非常适合大型数据库或数据频繁变更的环境,在这些情况下完整备份不切实际。

需要注意的限制

  • summarize_wal 必须启用此功能才能工作。
  • 增量备份仅适用于 pg_basebackup,且不能从备用服务器获取;必须在主实例上运行。
  • 恢复依赖完整且不中断的备份链。如果链中缺少任何备份,恢复将失败。
  • 备份在集群级别运行;不支持按表备份。
  • 为使功能正常,需要正确保留 WAL 和摘要文件。

结论

PostgreSQL 17 原生增量备份解决了两个长期存在的痛点——存储浪费和备份窗口缓慢——同时为灾难恢复奠定了更坚实的基础。pg_basebackup(使用 --incremental 标志)与 pg_combinebackup 的组合,使整个备份‑与‑恢复工作流更加简洁高效,尤其适用于大规模、高事务量的环境。

0 浏览
Back to Blog

相关文章

阅读更多 »