pgBackRest是一款专为PostgreSQL设计的企业级备份恢复工具,由Crunchy Data团队开发并开源。相比pg_basebackup这类原生工具,它提供了增量备份、并行处理、压缩加密、备份校验等更完整的特性,被广泛应用于生产环境。这篇文章将从安装、目录规划、配置文件编写一直讲到实际执行备份,把整套流程完整走一遍。

一、安装pgBackRest的两种常见方式
在CentOS、RHEL或者Rocky Linux上,最推荐的方式是通过PGDG仓库安装。先确认系统已经配置了PostgreSQL官方的YUM源,然后直接用yum命令安装即可:
# 安装PGDG仓库(如果还没有配置) sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 安装pgBackRest sudo yum install -y pgbackrest # 验证安装结果 pgbackrest version
执行pgbackrest version后能看到版本号输出,说明安装成功。如果系统用的是Debian或Ubuntu,可以直接执行apt install pgbackrest,不过要注意发行版自带的版本可能偏旧,建议从PostgreSQL官方仓库获取最新版。
第二种方式是源码编译,适合有定制需求或者系统不在官方支持列表里的场景。源码在GitHub的pgbackrest项目仓库可以获取,编译依赖gcc、make、libxml2开发包和OpenSSL开发包。源码编译的好处是可以自由选择版本,缺点是后期升级维护要自己管理,一般生产环境如果没有特殊需求,还是优先选择包管理器安装。
二、目录规划与用户权限设置
pgBackRest有一套自己的目录约定,规划清楚能避免很多后续的麻烦。它把数据目录分成两大块:仓库目录(repo)用来存放备份数据和WAL归档,数据目录(data)就是PostgreSQL的数据目录本身。常见的做法是在根目录下建立/var/lib/pgbackrest作为仓库的根路径,内部再按仓库名细分。
# 创建仓库目录结构 sudo mkdir -p /var/lib/pgbackrest/repo1 sudo mkdir -p /var/log/pgbackrest # 创建专用的系统用户(也可以直接用postgres用户) sudo useradd -r -s /bin/bash pgbackrest 2>/dev/null || true # 设置目录属主和权限 sudo chown -R postgres:postgres /var/lib/pgbackrest sudo chown -R postgres:postgres /var/log/pgbackrest sudo chmod 750 /var/lib/pgbackrest
权限方面有个容易踩坑的点:pgBackRest要求仓库目录权限不能开放给所有用户,权限过宽会直接报错拒绝运行。另外一个经典报错是日志目录不存在,安装包默认不会自动创建/var/log/pgbackrest,需要手动建立并授权,否则第一次运行就会提示无法写入日志。
如果备份仓库和数据库不在同一台机器上(这也是生产环境推荐的做法),还需要打通SSH免密通道。在数据库服务器上为postgres用户生成密钥对,把公钥复制到仓库服务器,同时仓库服务器上也要有反向的免密配置,因为pgBackRest在远程执行命令时是双向通信的。配置完成后可以用ssh 仓库IP -l pgbackrest 'echo ok'验证连通性。
三、编写pgbackrest.conf配置文件
主配置文件位于/etc/pgbackrest/pgbackrest.conf(老版本也可能是/etc/pgbackrest.conf),配置采用stanza的概念,一个stanza对应一个需要备份的PostgreSQL集群。下面是一份可以直接使用的单机配置示例:
[global] repo1-path=/var/lib/pgbackrest/repo1 repo1-retention-full=2 repo1-cipher-type=none process-max=4 compress-type=zst compress-level=3 log-level-console=info log-level-file=detail start-fast=y delta=y [demo] pg1-path=/var/lib/pgsql/16/data pg1-port=5432 pg1-user=postgres
逐个解释关键参数。repo1-path指定仓库存储路径,从2.x版本开始支持多仓库,最多可以配置四个(repo1到repo4),方便做异地容灾。repo1-retention-full=2表示保留2份全量备份,超出的旧备份会在下次备份完成后自动清理,注意如果全量备份数量不足这个值,增量备份是不会被清理的,这是防止误删有效备份的保护机制。
process-max=4开启4个并行进程,对大数据库的备份和恢复速度提升非常明显。compress-type=zst使用Zstandard压缩算法,这是目前推荐的选项,压缩率和速度都比早期的gzip表现更好,compress-level一般设3到6之间即可。delta=y允许恢复时只对比并恢复有差异的数据块,大幅缩短恢复时间。
配置写好后需要创建stanza,这一步会校验数据库连接并初始化仓库结构:
# 创建并校验stanza sudo -u postgres pgbackrest --stanza=demo stanza-create # 检查配置是否正常 sudo -u postgres pgbackrest --stanza=demo check
这里别忘了PostgreSQL那边的配合:pg1-path指向的数据目录必须真实存在,而且postgresql.conf里的archive_mode要设为on,archive_command改成pgbackrest --stanza=demo archive-push %p,改完重启数据库。check命令通过后,说明整条备份链路已经就绪。
四、执行备份与常用维护操作
一切就绪后,先做一次全量备份作为基础:
# 全量备份 sudo -u postgres pgbackrest --stanza=demo --type=full backup # 增量备份(基于最近一次全量或差异备份) sudo -u postgres pgbackrest --stanza=demo --type=incr backup # 差异备份(总是基于最近一次全量备份) sudo -u postgres pgbackrest --stanza=demo --type=diff backup # 查看备份集信息 sudo -u postgres pgbackrest --stanza=demo info
三种备份类型的区别要理清楚:全量备份拷贝整个数据库集群,体积大但恢复最简单;增量备份只备份自上次任意备份以来变化的数据,体积最小但恢复时依赖整条备份链;差异备份则备份自上次全量以来的变化,恢复只需要全量加最近一次差异。生产环境通常采用每周一次全量加每日增量或差异的策略,配合repo1-retention-full控制保留周期。
日常运维中还有几个高频命令值得记住。pgbackrest info可以随时查看各备份集的状态、大小和时间线;expire命令可以手动触发过期清理;恢复时使用restore命令,配合--type=time和--target参数可以做时间点恢复(PITR),这也是pgBackRest相比简单逻辑备份最大的优势之一。恢复前建议先用--dry-run参数演练一遍,确认恢复目标正确再实际执行,避免覆盖错数据目录。
最后补充一点监控方面的建议:备份做了不代表有效,建议把pgbackrest check和info纳入定时巡检脚本,检查最近一次备份时间是否超出预期、WAL归档是否有延迟堆积,必要时接入Prometheus等监控平台做告警,这样整套备份体系才算真正闭环。
pgBackRestPostgreSQL备份备份恢复修改时间:2026-09-05 10:32:42