数据库运维9 min read

瀚高数据库V9.0备份恢复实战:HGPGBACKREST全解析

瀚高数据库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 等保合规要求
多仓库 本地 + 云端 异地容灾
备份调度 周日全量 + 日增量 平衡恢复时间和存储
校验周期 每日 确保备份可用

黄金法则:没有经过恢复演练的备份,等于没有备份。每月至少执行一次完整的异地恢复测试。

分享:

相关文章