You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PgBackRest备份空间远超生产数据库的优化方案咨询

问题描述

我使用PgBackRest备份PostgreSQL数据库,策略为每周一次全量备份、连续五天增量备份,备份存储在独立于生产服务器的专用备份服务器中。目前发现备份文件占用空间已超过生产数据库的两倍,其中备份服务器上的Archive文件夹体积过大,Backup文件夹体积也超出合理范围,寻求解决方法。


生产数据库磁盘信息

生产数据库磁盘信息

备份服务器磁盘信息

备份服务器磁盘信息

备份归档与备份文件夹大小信息

备份归档与备份文件夹大小信息

生产服务器PgBackRest配置

[global]
log-level-file=info
repo1-host=(备份服务器主机名)

archive-async          = y
process-max            = 2
spool-path             = /var/spool/pgbackrest

[global:archive-get]
process-max=8

[global:archive-push]
process-max=8

[my_stanza]
pg1-path=/集群路径
pg1-port=集群端口

备份服务器PgBackRest配置

[global]
repo1-path=/备份路径
repo1-retention-full=1
process-max=8
start-fast=y
log-level-console=info
log-level-file=info

[my_stanza]
pg1-host=(生产服务器主机名)
pg1-path=/集群路径
pg1-port=集群端口

pgbackrest info 输出

db (当前)
        wal归档最小/最大 (13): 000000010000018700000057/0000000100000222000000C0

        全量备份: 20240512-090003F
            时间戳开始/结束: 2024-05-12 09:00:03+03 / 2024-05-12 10:13:21+03
            wal开始/结束: 000000010000018700000057 / 000000010000018700000057
            数据库大小: 586.8GB, 数据库备份大小: 586.8GB
            repo1: 备份集大小: 560.8GB, 备份大小: 560.8GB

        增量备份: 20240512-090003F_20240513-000005I
            时间戳开始/结束: 2024-05-13 00:00:05+03 / 2024-05-13 00:14:44+03
            wal开始/结束: 000000010000018B000000AC / 000000010000018B000000AC
            数据库大小: 595.5GB, 数据库备份大小: 98GB
            repo1: 备份集大小: 569GB, 备份大小: 91.6GB
            备份参考列表: 20240512-090003F

        增量备份: 20240512-090003F_20240514-000005I
            时间戳开始/结束: 2024-05-14 00:00:05+03 / 2024-05-14 00:26:27+03
            wal开始/结束: 00000001000001AE0000008E / 00000001000001AE00000096
            数据库大小: 652.3GB, 数据库备份大小: 191GB
            repo1: 备份集大小: 623GB, 备份大小: 181GB
            备份参考列表: 20240512-090003F, 20240512-090003F_20240513-000005I

        增量备份: 20240512-090003F_20240515-000006I
            时间戳开始/结束: 2024-05-15 00:00:06+03 / 2024-05-15 00:29:44+03
            wal开始/结束: 00000001000001CD000000E5 / 00000001000001CE0000001D
            数据库大小: 704GB, 数据库备份大小: 200.2GB
            repo1: 备份集大小: 673.2GB, 备份大小: 189.3GB
            备份参考列表: 20240512-090003F, 20240512-090003F_20240513-000005I, 20240512-090003F_20240514-000005I

        增量备份: 20240512-090003F_20240516-000005I
            时间戳开始/结束: 2024-05-16 00:00:05+03 / 2024-05-16 00:44:23+03
            wal开始/结束: 00000001000001F800000051 / 00000001000001F80000006E
            数据库大小: 773GB, 数据库备份大小: 292.8GB
            repo1: 备份集大小: 738.2GB, 备份大小: 277.5GB
            备份参考列表: 20240512-090003F, 20240512-090003F_20240513-000005I, 20240512-090003F_20240514-000005I, 20240512-090003F_20240515-000006I

        增量备份: 20240512-090003F_20240517-000003I
            时间戳开始/结束: 2024-05-17 00:00:03+03 / 2024-05-17 00:33:44+03
            wal开始/结束: 000000010000020A00000008 / 000000010000020A000000A7
            数据库大小: 794.7GB, 数据库备份大小: 226.9GB
            repo1: 备份集大小: 759.0GB, 备份大小: 213.3GB
            备份参考列表: 20240512-090003F, 20240512-090003F_20240513-000005I, 20240512-090003F_20240514-000005I, 20240512-090003F_20240515-000006I, 20240512-090003F_20240516-000005I

解决方法

一、清理冗余WAL归档文件

从pgbackrest info输出可以看到,当前仅保留了1个全量备份,但WAL归档文件未自动清理,这是Archive文件夹膨胀的核心原因。

  1. 添加归档保留规则
    在备份服务器的pgbackrest.conf的[global]段中加入以下配置:
repo1-retention-archive=1
repo1-retention-archive-type=full
  • repo1-retention-archive=1:仅保留最近1个全量备份对应的WAL归档
  • repo1-retention-archive-type=full:基于全量备份数量而非时间来保留归档
  1. 手动执行归档清理
    运行命令立即清理超出保留规则的冗余归档:
pgbackrest archive-purge --stanza=my_stanza

二、优化增量备份保留策略

当前全量备份是5月12日的,后续所有增量都依赖它,若未按时生成新的全量备份,旧增量会持续堆积。

  1. 确认全量备份任务状态
    检查每周全量备份的定时任务是否正常执行,若5月12日后未生成新全量,需排查任务触发机制或手动生成一次全量备份:
pgbackrest backup --stanza=my_stanza --type=full
  1. 配置增量备份保留规则
    在备份服务器的pgbackrest.conf的[global]段添加:
repo1-retention-incr=5

新全量备份生成后,会自动清理超过5天的旧增量备份。

三、提升备份压缩率

当前全量备份压缩率不足5%,可通过调整压缩参数减少备份体积:
在备份服务器的[global]段添加:

compress-type=zstd
compress-level=6
  • zstd比gzip压缩效率更高、速度更快,优先推荐
  • compress-level取值1-9,级别越高压缩率越高,备份耗时会略有增加

四、紧急释放空间(手动清理旧备份)

若当前磁盘空间不足,可手动删除最早的增量备份(注意:不要删除全量备份,所有增量都依赖它):

pgbackrest delete --stanza=my_stanza --backup=20240512-090003F_20240513-000005I

更推荐使用自动清理命令,避免误删:

pgbackrest expire --stanza=my_stanza

五、排查异步归档堆积

生产服务器启用了异步归档archive-async=y,需检查是否有未推送的WAL堆积在本地:

ls -lh /var/spool/pgbackrest/my_stanza/archive/

若存在堆积,可:

  1. 增大archive-push的process-max(当前为8,可尝试调至16)
  2. 检查生产与备份服务器之间的网络带宽是否满足需求
  3. 手动推送堆积的WAL:
pgbackrest archive-push --stanza=my_stanza --spool

内容的提问来源于stack exchange,提问作者Abdullah Ergin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:07:03