pgBackRest 是专为 PostgreSQL 设计的开源备份与恢复工具,以其高性能、可靠性和灵活性著称。它支持 全量备份 、增量备份 、并行备份/恢复 和 加密 等特性,适用于大规模数据库和关键业务场景。以下是其核心功能及操作指南:
一、pgBackRest 核心特性
- 多种备份类型
- 全量备份(Full Backup):完整备份数据库集群。
- 差异备份(Differential Backup):仅备份自上次全量备份后的变化。
- 增量备份(Incremental Backup):基于上一次任意类型备份的变化(更高效)。
- 并行处理
- 支持多线程压缩和传输,显著提升大数据库备份速度。
- 高效存储管理
- 通过
--repo-retention-full
自动清理旧备份,节省存储空间。
- 通过
- 时间点恢复(PITR)
- 结合 WAL 归档,恢复到任意精确时间点。
- 加密与校验
- 支持 AES-256 加密备份,确保数据安全。
二、安装与配置
1. 安装 pgBackRest
bash
# Ubuntu/Debian
sudo apt-get install pgbackrest
# CentOS/RHEL
sudo yum install pgbackrest
2. 配置 PostgreSQL
-
启用 WAL 归档(用于 PITR):
ini# postgresql.conf wal_level = replica archive_mode = on archive_command = 'pgbackrest --stanza=demo archive-push %p'
3. 配置 pgBackRest
创建配置文件 /etc/pgbackrest.conf
:
ini
[demo] # 备份集名称(Stanza)
pg1-path=/var/lib/postgresql/12/main # PostgreSQL 数据目录
[global]
repo1-path=/var/lib/pgbackrest # 备份存储路径
repo1-retention-full=2 # 保留最近2次全量备份
start-fast=y # 强制创建检查点以加速备份
三、备份操作
1. 初始化备份仓库
bash
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
2. 执行全量备份
bash
sudo -u postgres pgbackrest --stanza=demo --type=full backup
3. 执行增量备份
bash
sudo -u postgres pgbackrest --stanza=demo --type=incr backup
4. 验证备份
bash
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info verify
四、恢复操作
1. 完全恢复(最新状态)
bash
# 停止 PostgreSQL
sudo systemctl stop postgresql
# 清空数据目录
sudo -u postgres rm -rf /var/lib/postgresql/12/main/*
# 执行恢复
sudo -u postgres pgbackrest --stanza=demo --type=immediate restore
# 启动 PostgreSQL
sudo systemctl start postgresql
2. 时间点恢复(PITR)
bash
sudo -u postgres pgbackrest --stanza=demo --type=time --target="2023-10-01 14:30:00" restore
3. 恢复到指定备份点
bash
# 查看备份列表
sudo -u postgres pgbackrest --stanza=demo info
# 根据备份ID恢复
sudo -u postgres pgbackrest --stanza=demo --set=20231001-123456F restore
五、高级功能
1. 并行备份与压缩
bash
# 启用4线程压缩
sudo -u postgres pgbackrest --stanza=demo --type=full --compress-type=lz4 --process-max=4 backup
2. 备份加密
ini
# pgbackrest.conf
[global]
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=secure_password
3. 远程备份存储
-
支持备份到 S3、Azure、GCS 或 SFTP:
ini[global] repo1-type=s3 repo1-s3-endpoint=s3.amazonaws.com repo1-s3-bucket=my-backup-bucket repo1-s3-key=ACCESS_KEY repo1-s3-key-secret=SECRET_KEY
六、最佳实践
- 定期验证备份
- 使用
verify
命令确保备份可恢复。
- 使用
- 监控与日志
- 配置
--log-level-file=detail
记录详细日志。
- 配置
- 自动化清理策略
- 设置
repo1-retention-full
和repo1-retention-diff
管理备份保留。
- 设置
- 分离备份存储
- 将备份存储在与生产环境隔离的位置(如云存储)。
七、常见问题
1. 备份失败:权限不足
- 确保 PostgreSQL 用户对数据目录和备份目录有读写权限。
- 检查 SELinux/AppArmor 是否阻止访问。
2. 恢复后数据库无法启动
- 确认恢复时 PostgreSQL 已停止且数据目录已清空。
- 检查
postgresql.auto.conf
是否残留旧配置。
3. WAL 归档堆积
- 调整
archive_timeout
或优化业务写入频率。
通过 pgBackRest,PostgreSQL 用户可以高效管理备份与恢复任务,尤其适合对 RTO(恢复时间目标) 和 RPO(恢复点目标) 要求严格的场景。建议结合监控工具(如 Prometheus)实现全链路可观测性。