使用 pgBackRest 在 PostgreSQL 中分离备份和过期操作

使用 pgBackRest 在 PostgreSQL 中分离备份和过期操作

💡 原文英文,约2900词,阅读约需11分钟。
📝

内容提要

pgBackRest是一个管理数据库备份的工具,本文介绍了如何将备份和过期操作分开以优化备份管理。通过分离备份和过期操作,可以更频繁地执行备份,定制调度,并减少备份操作对系统的影响。文章提供了调整配置和分别执行备份和过期操作的步骤。它还建议使用cron作业将备份和过期调度为单独的任务。分离备份和过期操作有助于确保即使数据库增长,备份操作也能快速响应。

🔎

延伸解读

分离备份与过期操作的核心动机

文章指出,当数据库规模庞大或网络带宽有限时,过期操作(删除旧备份)可能比备份本身更耗时。默认配置将两者绑定,导致备份频率受限于过期操作的执行时间。分离后,备份可以更频繁地运行,而过期操作可以按更低频率独立调度,从而缩短备份窗口并减少对系统的影响。

配置调整与保留策略的权衡

在pgbackrest.conf中,通过注释掉备份保留设置并设置归档保留类型为full,可以实现备份无限期保留,同时确保恢复全量备份所需的归档日志被保留。但备份命令会发出警告,提示未设置repo1-retention-full,仓库可能耗尽空间。这要求管理员在灵活性与存储容量之间做出权衡,并依赖独立的过期命令来清理旧备份。

过期操作的依赖处理与PITR保障

执行过期命令时,即使未指定差异备份的保留策略,pgBackRest也会自动删除依赖于过期全量备份的差异备份。同时,它会保留与最新全量备份关联的差异备份和必要的归档日志,从而确保时间点恢复(PITR)能力不受影响。文章示例中,过期后仅保留一个全量备份及其差异备份,归档日志范围也相应调整。

调度分离的实践示例

文章建议使用独立的cron作业分别调度备份和过期。例如,工作日凌晨3点执行差异备份,周六凌晨3点执行全量备份,周日凌晨4点执行过期并设置repo1-retention-full=1。这种调度方式让备份更频繁,过期更少,从而在数据库增长时仍能保持备份操作的快速响应。

❓

Q&A

为什么需要将 pgBackRest 的备份和过期操作分开?

分开备份和过期操作可以带来更快的备份速度、更高的灵活性以及减少备份窗口。具体来说,备份可以更频繁地执行而不受过期操作拖慢;可以独立定制备份和过期的调度;通过更频繁地备份和较少地过期,可以最小化备份操作对系统的影响。

如何配置 pgBackRest 以分离备份和过期操作?

需要调整 pgbackrest.conf 文件,通常位于 pgBackRest 配置目录。根据备份策略调整保留设置,例如注释掉备份的保留策略,并设置归档的保留策略。示例配置:repo1-retention-archive-type=full,这样可以无限期保留备份,并持续保留 FULL 备份所需的归档,以确保恢复全量备份时不会出现问题。

执行 pgBackRest 备份时需要注意哪些警告信息?

执行备份时可能会看到警告,例如:'option 'repo1-retention-full' is not set for 'repo1-retention-full-type=count', the repository may run out of space'。提示建议:要无限期保留全量备份(不出现警告),将 'repo1-retention-full' 设置为最大值。这些警告是预期的,因为分离操作后备份命令不再负责过期。

如何执行 pgBackRest 的过期操作来删除旧备份?

运行过期命令,例如:pgbackrest --stanza=main --config=/etc/pgbackrest/pgbackrest.conf --log-level-console=detail expire --repo1-retention-full=1。该命令会根据配置的保留策略删除过期的备份。注意,即使没有指定过期差异备份,pgBackRest 也会自动删除依赖于过期全量备份集的后续差异备份。

如何为 pgBackRest 的备份和过期操作设置定时任务?

可以创建单独的 cron 作业或计划任务。例如:工作日凌晨3点运行差异备份:0 3 * * 1-5 pgbackrest --stanza=main --config=/etc/pgbackrest/pgbackrest.conf backup --type=diff;周六凌晨3点运行全量备份:0 3 * * 6 pgbackrest --stanza=main --config=/etc/pgbackrest/pgbackrest.conf backup --type=full;周日凌晨4点运行过期:0 4 * * 0 pgbackrest --stanza=main --config=/etc/pgbackrest/pgbackrest.conf expire --repo1-retention-full=1。

分离备份和过期操作后,如何确保备份快速响应?

通过分离操作,备份可以更频繁地执行而不受过期过程拖慢,从而保持快速响应。即使数据库增长,备份操作也不会受到影响。文章中的案例显示,过期操作曾比备份耗时多三到四倍,分离后解决了这一问题。

🏷️

标签

➡️

继续阅读