瀚高数据库V9.0备份恢复实战:HGPGBACKREST全解析
前言
数据备份是数据库运维的生命线。瀚高数据库 V9.0 自带的 HGPGBACKREST 备份还原工具,提供了从全量备份、增量备份到时间点恢复(PITR)的完整能力,并支持本地/远程/云端多仓库架构。
本文基于官方备份还原工具手册,带你从零掌握 HGPGBACKREST 的完整使用。
一、HGPGBACKREST 架构概览
HGPGBACKREST 基于 Stanza(节)+ Repo(仓库)的架构设计:
┌──────────────────────────────────────────┐
│ HGPGBACKREST │
│ │
│ Stanza: backup │
│ ├── pg1 (主库: 192.168.94.23:5866) │
│ └── pg2 (备库: 192.168.94.24:5866) │
│ │
│ Repo (存储仓库) │
│ ├── repo1: 本地 /repo │
│ ├── repo2: 远程 SSH │
│ └── repo3: S3 云端 │
└──────────────────────────────────────────┘
核心特性:
| 特性 | 说明 |
|---|---|
| 全量备份 | 完整备份数据库集群 |
| 增量备份 | 仅备份自上次备份以来的变更 |
| 差异备份 | 备份自上次全量以来的所有变更 |
| PITR恢复 | 按时间点/事务号/日志/还原点恢复 |
| 并行备份 | 多进程并行加速 |
| 压缩存储 | 节省存储空间 |
| 加密存储 | AES-256-CBC 加密 |
| 多仓库 | 同时备份到多个存储目标 |
| 备份校验 | 内置备份集完整性验证 |
二、安装与初始化配置
2.1 创建备份用户和目录
# 创建备份管理用户
useradd pgbackrest
passwd pgbackrest # 设置密码
# 创建目录结构
mkdir -p -m 770 /var/log/pgbackrest
chown pgbackrest:pgbackrest /var/log/pgbackrest
mkdir -p /etc/pgbackrest
mkdir -p /etc/pgbackrest/conf.d
touch /etc/pgbackrest/pgbackrest.conf
chown -R pgbackrest:pgbackrest /etc/pgbackrest
# 创建备份仓库目录
mkdir -p /home/pgbackrest/repo
chown pgbackrest:pgbackrest /home/pgbackrest/repo
2.2 配置主配置文件
/etc/pgbackrest/pgbackrest.conf:
[global]
# 仓库路径
repo1-path=/home/pgbackrest/repo
# 全量备份保留策略(保留最近 2 个全量)
repo1-retention-full=2
# 并行度
process-max=4
# 快速启动备份(立即触发检查点)
start-fast=y
# 启用差异备份
delta=y
# 允许从备库备份
backup-standby=y
# 压缩选项
compress-type=zst
compress-level=6
# 加密配置(生产环境必备)
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=YourStrongEncryptionKey123!
# 日志路径
log-path=/var/log/pgbackrest
[backup]
# 主库配置
pg1-host=192.168.94.23
pg1-host-user=highgo
pg1-user=highgo
pg1-database=highgo
pg1-path=/home/highgo/hgdb-v9/data
pg1-port=5866
# 备库配置
pg2-host=192.168.94.24
pg2-host-user=highgo
pg2-user=highgo
pg2-database=highgo
pg2-path=/home/highgo/hgdb-v9/data
pg2-port=5866
2.3 配置数据库归档
编辑 postgresql.conf:
# WAL 归档配置
archive_mode = on
archive_command = '/opt/highgo/hgdb-v9/tools/pgbackrest/pgbackrest --stanza=backup archive-push %p'
wal_level = replica
max_wal_senders = 5
# 备库热备
hot_standby = on
重启数据库使配置生效:
pg_ctl restart -D /home/highgo/hgdb-v9/data
2.4 创建 Stanza 并初始化
# 切换到备份用户
su - pgbackrest
# 创建 Stanza
pgbackrest --stanza=backup stanza-create
# 检查配置是否正常
pgbackrest --stanza=backup check
# 输出示例:
# WARN: option 'repo1-retention-full' is not set
# INFO: check command end: completed successfully
三、备份操作
3.1 全量备份
# 执行全量备份
pgbackrest --stanza=backup --type=full backup
# 查看备份信息
pgbackrest --stanza=backup info
输出示例:
stanza: backup
status: ok
cipher: aes-256-cbc
db (current)
wal archive min/max (14): 000000010000000000000001/000000010000000000000005
full backup: 20260701-143022F
timestamp start/stop: 2026-07-01 14:30:22 / 2026-07-01 14:32:15
wal start/stop: 000000010000000000000005 / 000000010000000000000005
database size: 25.3GB, database backup size: 25.3GB
repo1: backup size: 8.7GB
3.2 增量备份
# 基于上次备份的增量备份(体积最小)
pgbackrest --stanza=backup --type=incr backup
# 基于上次全量的差异备份
pgbackrest --stanza=backup --type=diff backup
备份策略对比:
| 类型 | 速度 | 大小 | 恢复速度 | 依赖 |
|---|---|---|---|---|
| full | 慢 | 大 | 最快 | 无 |
| diff | 中 | 中 | 较快 | 最近一次 full |
| incr | 快 | 小 | 较慢 | 完整备份链 |
3.3 推荐的备份策略
#!/bin/bash
# 生产环境推荐备份策略
# 0 2 * * 0 /scripts/pgbackrest_backup.sh # 周日凌晨2点全量
# 0 2 * * 1-6 /scripts/pgbackrest_backup.sh incr # 周一至周六增量
TYPE=${1:-full}
STANZA="backup"
LOG="/var/log/pgbackrest/backup_$(date +%Y%m%d).log"
echo "[$(date)] Starting $TYPE backup..." >> $LOG
pgbackrest --stanza=$STANZA --type=$TYPE backup >> $LOG 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] $TYPE backup succeeded" >> $LOG
else
echo "[$(date)] $TYPE backup FAILED!" >> $LOG
# 告警通知
fi
四、恢复操作
4.1 完整恢复
# 停止数据库
pg_ctl stop -D /home/highgo/hgdb-v9/data
# 恢复到最新状态
pgbackrest --stanza=backup restore
# 启动数据库
pg_ctl start -D /home/highgo/hgdb-v9/data
4.2 时间点恢复(PITR)
# 恢复到指定时间点
pgbackrest --stanza=backup \
--type=time \
--target="2026-07-01 10:30:00" \
restore
# 恢复到指定事务号
pgbackrest --stanza=backup \
--type=xid \
--target="12345" \
restore
# 恢复到指定还原点
pgbackrest --stanza=backup \
--type=name \
--target="before_deployment" \
restore
# 尽快恢复到一致状态
pgbackrest --stanza=backup \
--type=immediate \
restore
4.3 恢复后处理
# 配置 recovery.signal 触发恢复
touch /home/highgo/hgdb-v9/data/recovery.signal
# 启动后自动恢复到目标时间点
pg_ctl start -D /home/highgo/hgdb-v9/data
# 恢复完成后查看状态
psql -c "SELECT pg_is_in_recovery();"
# 返回 'f' 表示恢复完成,数据库已可读写
# 立即执行全量备份以建立新的基线
pgbackrest --stanza=backup --type=full backup
五、多仓库配置 — 本地 + 云端
5.1 S3 云端仓库
# /etc/pgbackrest/pgbackrest.conf
[global]
# 本地仓库
repo1-path=/home/pgbackrest/repo
repo1-retention-full=2
# S3 云端仓库
repo2-type=s3
repo2-s3-endpoint=cos.ap-chengdu.myqcloud.com
repo2-s3-bucket=pgbackrest-bucket
repo2-s3-key=AKIDxxxxxxxxxxxxxx
repo2-s3-key-secret=xxxxxxxxxxxxxxxxxx
repo2-s3-region=ap-chengdu
repo2-retention-full=4
5.2 多仓库备份操作
# 备份到本地仓库
pgbackrest --stanza=backup --repo=1 --type=full backup
# 备份到云端仓库
pgbackrest --stanza=backup --repo=2 --type=full backup
# 查看各仓库备份信息
pgbackrest --stanza=backup --repo=1 info
pgbackrest --stanza=backup --repo=2 info
# 恢复时指定仓库
pgbackrest --stanza=backup --repo=2 restore
六、备份验证与管理
6.1 验证备份集完整性
# 验证备份集
pgbackrest --stanza=backup \
--log-level-console=detail \
verify
# 静默验证
pgbackrest --stanza=backup verify
6.2 清理过期备份
# 查看过期备份
pgbackrest --stanza=backup --repo=1 expire --dry-run
# 执行清理
pgbackrest --stanza=backup --repo=1 expire
6.3 备份集管理命令
# 查看备份详情
pgbackrest --stanza=backup info --set=20260701-143022F
# 列出备份文件
pgbackrest --stanza=backup repo-ls /
# 删除指定备份集
pgbackrest --stanza=backup --set=20260601-100000F delete
七、透明加密数据库的备份
当数据库中启用了透明加密(TDE)时,需要额外配置:
# 每个数据库的集群密钥命令
pg1-cluster-key-command=/home/highgo/tde/get_key.sh %d
pg2-cluster-key-command=/home/highgo/tde/get_key.sh %d
# get_key.sh 示例
#!/bin/bash
# 从密钥管理服务获取数据库加密密钥
DB_NAME=$1
curl -s "https://kms.internal/api/key?db=${DB_NAME}" | jq -r '.key'
八、定时任务自动化
# Crontab 配置
su - pgbackrest
# 每日增量备份(凌晨 2 点)
0 2 * * * pgbackrest --stanza=backup --type=incr backup
# 每周日全量备份(凌晨 1 点)
0 1 * * 0 pgbackrest --stanza=backup --type=full backup
# 每日中午验证备份
0 12 * * * pgbackrest --stanza=backup verify
# 每周清理过期备份
0 3 * * 1 pgbackrest --stanza=backup expire
总结
HGPGBACKREST 是一个成熟的企业级备份恢复工具,功能对标 pgBackRest,并针对瀚高数据库做了深度优化。
生产环境建议配置:
| 配置项 | 推荐值 | 原因 |
|---|---|---|
| process-max | CPU核数/2 | 平衡备份速度和数据库性能 |
| retention-full | 4 | 保留最近 4 个全量(约 1 个月) |
| compress-type | zst | 压缩比和速度最佳平衡 |
| 加密 | aes-256-cbc | 等保合规要求 |
| 多仓库 | 本地 + 云端 | 异地容灾 |
| 备份调度 | 周日全量 + 日增量 | 平衡恢复时间和存储 |
| 校验周期 | 每日 | 确保备份可用 |
黄金法则:没有经过恢复演练的备份,等于没有备份。每月至少执行一次完整的异地恢复测试。