内容提要
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。
分离备份和过期操作后,如何确保备份快速响应?
通过分离操作,备份可以更频繁地执行而不受过期过程拖慢,从而保持快速响应。即使数据库增长,备份操作也不会受到影响。文章中的案例显示,过期操作曾比备份耗时多三到四倍,分离后解决了这一问题。