pg_rman部署和使用实例
目录
- pg_rman部署和使用实例
- pg_rman简介
- 安装配置
- 使用案例:
- 命令概览
- 支持的命令:
- 通用选项(适用于所有命令)
- init 命令(初始化)
- backup 命令(备份)
- restore 命令(恢复)
- PITR 恢复选项
- 管理命令
- show(查看备份)
- validate(验证备份)
- delete(删除备份)
- purge(清理残留)
- 配置文件 pg_rman.ini
- 使用建议
pg_rman简介
pg_rman是一款专门为postgresql设计的在线备份恢复的工具。其支持在线(热备份)和基于时间点备份方式。
它是一个开源的PostgreSQL备份软件,使用的是pg_start_backup(), copy, pg_stop_backup()的备份模式,因为是文件拷贝模式,所以pg_rman必须在数据库节点上运行。
它具有以下特点:
- 功能全面:支持全量备份、增量备份、在线备份和归档日志备份。
- 恢复灵活:支持时间点恢复(PITR)、事务ID恢复等。
- 自动化:提供自动化备份和恢复的能力。
- 性能优化:备份和恢复过程经过优化,适合大型数据库。
- 多平台支持:支持多种操作系统,包括 Linux、Windows 等。
其优点为:
- 功能丰富,适合复杂的备份需求。
- 性能优秀,适合大规模数据库。
- 易于管理和自动化。
其缺点为:
- 配置相对复杂,需要一定的学习曲线。
- 社区支持不如其他工具广泛。
安装配置
下载地址: (选择正确的版本)
https://github.com/ossc-db/pg_rman/releases?page=2
su - postgrestar -zxvf pg_rman-1.3.9.tar.gz
cd pg_rman-1.3.9
make
make install
使用案例:
查看帮助
pg_rman --help初始化:
pg_rman init --backup-path=/data/postgresql/pg_rman_backup
初始化时会提示没有wal日志的备份目录全备:(注意:全备时--arclog-path 的目录是wal日志的备份目录,而不是pg的wal目录 eg: archive_command = 'test ! -f /data/postgresql/archive/%f && cp %p /data/postgresql/archive/%f')
pg_rman backup --backup-mode=full --backup-path=/data/postgresql/pg_rman_backup --arclog-path=/data/postgresql/archive/增量备份
pg_rman backup --backup-mode=incremental --backup-path=/data/postgresql/pg_rman_backup --arclog-path=/data/postgresql/archive/校验:
pg_rman validate -B /data/postgresql/pg_rman_backup/查看备份:
pg_rman show detail -B /data/postgresql/pg_rman_backup/恢复:
pg_rman restore -B /data/postgresql/pg_rman_backup/ --recovery-target-time='2026-03-26 15:30:06' --arclog-path=/usr/local/pg12/wal_arch/启动数据库:pg_ctl start -D /usr/local/pg12/data/启动之后日志中会提示:2026-03-26 15:38:32.573 CST [7077] LOG: recovery stopping before commit of transaction 532, time 2026-03-26 15:30:06.063676+08
2026-03-26 15:38:32.573 CST [7077] LOG: recovery has paused
2026-03-26 15:38:32.573 CST [7077] HINT: Execute pg_wal_replay_resume() to continue.查看数据是否恢复
select pg_is_in_recovery();
select * from emp;切换为读写:
select pg_wal_replay_resume();
命令概览
pg_rman 的基本语法为:pg_rman [通用选项] 命令 [命令选项]
支持的命令:
| 命令 | 说明 |
|---|---|
init |
初始化备份目录 |
backup |
执行在线备份 |
restore |
执行恢复 |
show |
显示备份历史 |
validate |
验证备份有效性 |
delete |
删除备份 |
purge |
清理已删除备份的残留目录 |
通用选项(适用于所有命令)
环境变量:上述路径参数也可以设置环境变量简化命令行:BACKUP_PATH、PGDATA、ARCLOG_PATH、SRVLOG_PATH
init 命令(初始化)
首次使用前必须执行初始化
pg_rman init -B /backup/pg_rman -D /data/postgresql/pgdata -A /data/archive -S /data/postgresql/log初始化生成的文件:
- pg_rman.ini:备份策略配置文件
- system_identifier:数据库系统标识符
- backup/、timeline_history/ 等目录结构
backup 命令(备份)
核心备份选项
保留策略选项
注意:保留策略在备份时自动检查生效,无需单独运行清理命令。
从备库备份选项
| 参数 | 说明 | 示例 |
|---|---|---|
--standby-host=HOST |
指定备库主机地址 | --standby-host=192.168.1.100 |
--standby-port=PORT |
指定备库端口 | --standby-port=5432 |
备份示例
# 全量备份(带压缩和进度显示)
pg_rman backup --backup-mode=full --compress-data --progress# 增量备份(自动验证)
pg_rman backup --backup-mode=incremental --validate# 归档WAL备份
pg_rman backup --backup-mode=archive
restore 命令(恢复)
PITR 恢复选项
恢复流程
# 1. 停止数据库
pg_ctl -D /data/postgresql/pgdata stop# 2. 执行恢复
pg_rman restore --recovery-target-time="2025-03-26 10:30:00"# 3. 启动数据库(自动进入恢复模式)
pg_ctl -D /data/postgresql/pgdata start
复完成后,数据库可能处于只读状态,需执行 SELECT pg_wal_replay_resume(); 恢复正常写入
管理命令
show(查看备份)
# 显示所有备份
pg_rman show# 显示详细信息(含压缩状态、WAL大小等)
pg_rman show detail -B /data/postgresql/# 显示指定备份的详细配置
pg_rman show '2025-03-26 10:30:00'# 显示已删除的备份
pg_rman show --show-all
输出字段说明:
- Status:OK(已验证可用)、DONE(未验证)、RUNNING、DELETED、ERROR、CORRUPT
- Mode:FULL、INCR、ARCH
- Compressed:是否压缩(detail模式)
validate(验证备份)
# 验证所有未验证的备份
pg_rman validate# 验证指定备份
pg_rman validate '2025-03-26 10:30:00'
重要:备份后必须执行 validate,否则该备份不能用于恢复和增量备份
delete(删除备份)
# 删除指定时间之前的备份
pg_rman delete '2025-03-20 00:00:00'# 强制删除(忽略依赖检查)
pg_rman delete '2025-03-20 00:00:00' -f
purge(清理残留)
删除备份后,备份目录中可能残留空目录,执行 purge 彻底清理:
pg_rman purge
配置文件 pg_rman.ini
在备份目录下创建 pg_rman.ini 可固化参数配置,备份时自动应用
# 基础路径(如未设置环境变量)
ARCLOG_PATH=/data/archive
SRVLOG_PATH=/data/postgresql/log# 压缩
COMPRESS_DATA=YES# 保留策略
KEEP_DATA_GENERATIONS=3 # 保留3个全量备份世代
KEEP_DATA_DAYS=10 # 保留10天内备份
KEEP_ARCLOG_FILES=100 # 保留100个归档WAL
KEEP_ARCLOG_DAYS=7 # 保留7天内归档
KEEP_SRVLOG_FILES=50 # 保留50个日志文件
KEEP_SRVLOG_DAYS=7 # 保留7天内日志# 备份模式(可选)
BACKUP_MODE=full
使用建议
- 备份后立即验证:未验证的备份不可用于恢复
- 优先使用配置文件:将保留策略写入 pg_rman.ini,避免每次手动指定
- 从备库备份:可降低主库 IO 压力
- 定期清理:配置保留策略或定期执行 delete + purge 控制磁盘占用
