当前位置: 首页 > news >正文

pg_rman部署和使用实例

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 清理已删除备份的残留目录

通用选项(适用于所有命令)

参数 简写 说明 示例
--pgdata=PATH -D PostgreSQL 数据目录(绝对路径) -D /data/postgresql/pgdata
--backup-path=PATH -B pg_rman 备份目录(绝对路径) -B /backup/pg_rman
--arclog-path=PATH -A WAL 归档目录(必须与 archive_command 中的目标一致) -A /data/archive
--srvlog-path=PATH -S PostgreSQL 运行日志目录(即 log_directory) -S /data/postgresql/log
--verbose -v 显示详细执行信息
--progress -P 显示进度条
--quiet -q 静默模式,不显示 INFO/DEBUG 信息
--check -c 仅检查参数和资源,不实际执行操作

环境变量:上述路径参数也可以设置环境变量简化命令行: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 命令(备份)

核心备份选项

参数 说明 可选值/示例
--backup-mode=MODE 备份模式 full(全量)、incremental(增量)、archive(归档WAL)
--with-serverlog 同时备份数据库运行日志 无需参数
--compress-data 使用 zlib 压缩备份数据 无需参数
--smooth-checkpoint 执行平滑检查点(减少IO冲击) 无需参数
--validate 备份完成后自动执行验证 无需参数
--full-backup-on-error 增量/归档备份失败时自动切换为全量备份 仅用于 incremental/archive 模式

保留策略选项

参数 说明 示例
--keep-data-generations=N 保留 N 个完整的全量备份世代 --keep-data-generations=3
--keep-data-days=N 保留最近 N 天的数据备份 --keep-data-days=10
--keep-arclog-files=N 保留 N 个归档 WAL 文件 --keep-arclog-files=100
--keep-arclog-days=N 保留最近 N 天的归档 WAL --keep-arclog-days=7
--keep-srvlog-files=N 保留 N 个服务器日志文件 --keep-srvlog-files=50
--keep-srvlog-days=N 保留最近 N 天的服务器日志 --keep-srvlog-days=7

注意:保留策略在备份时自动检查生效,无需单独运行清理命令。

从备库备份选项

参数 说明 示例
--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 恢复选项

参数 说明 示例
--recovery-target-time=TIME 恢复到指定时间戳 --recovery-target-time="2025-03-26 10:30:00"
--recovery-target-xid=XID 恢复到指定事务 ID --recovery-target-xid=123456
--recovery-target-timeline=TIMELINE 恢复到指定时间线 --recovery-target-timeline=2
--recovery-target-inclusive 是否包含恢复目标点(默认包含) 无需参数
--hard-copy 复制归档日志而非创建符号链接 无需参数

恢复流程

# 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 控制磁盘占用
http://www.jsqmd.com/news/803564/

相关文章:

  • Taotoken 官方价折扣与活动价助力个人开发者降低创新门槛
  • GetQzonehistory:3步搞定QQ空间历史说说备份的终极Python工具
  • IFN-α Receptor Recognition Peptide 1 (IRRP1)
  • 上饶装修公司靠谱性判定:从资质到落地的技术维度解析 - 奔跑123
  • 别再折腾CUDA了!用Anaconda Navigator一键搞定DeepLabCut-GPU版(附清华/阿里镜像配置)
  • 在团队协作中通过Taotoken实现API调用权限与审计管理
  • VQA实战笔记:从数据加载到特征工程的关键代码解析
  • 英特尔将雷电3集成进CPU:如何重塑高速接口生态与USB4标准
  • 查看Taotoken账单明细掌握每一分Token的消耗去向
  • 终极指南:在Windows上轻松安装安卓应用,告别笨重模拟器
  • 地面高可靠FPGA设计:应对单粒子翻转(SEU)的技术选型与加固实战
  • ChatGPT人格选择器:一键切换AI角色与外部API桥接实战
  • 5分钟掌握MOOTDX:Python通达信数据接口的终极指南
  • 拒绝只做调包侠!深度拆解 dive-into-llms:从零手写大模型的硬核实战指南
  • 3分钟搞定!Windows网络测速神器iperf3完整使用指南
  • 实测Taotoken多模型API调用的响应延迟与稳定性表现
  • 音频AI DSP:低功耗边缘智能的硬件架构与实现
  • Dalai项目详解:一键部署本地大语言模型LLaMA/Alpaca全攻略
  • 从RNN到CV:门控机制跨界之旅,看GFF如何解决特征融合的‘信息过载’难题
  • 如何在浏览器中重新解锁微信网页版?一款开源插件为你提供完美解决方案
  • 大模型上手指南:从跑通到解剖,一步步深入核心机制!
  • FastGithub深度解析:智能DNS加速GitHub访问的架构实现与性能优化
  • ARMv8架构PRFM指令:缓存预取优化实战指南
  • NCM音乐文件转换终极指南:三步解锁网易云加密音乐
  • 实测Taotoken的API调用延迟与稳定性观感分享
  • 【银河麒麟V10】【桌面】fstab配置详解:实现DEF多用户分区自动挂载与权限管理
  • 告别依赖地狱:在Ubuntu 20.04上手动补全CloudClient缺失库文件的保姆级指南
  • 3个核心功能让你的惠普OMEN游戏本性能翻倍:OmenSuperHub深度使用指南
  • 零成本串口调试神器:com0com虚拟串口驱动完全指南
  • 大模型风口已至:月薪30K+的AI Agent开发岗,你准备好了吗?