PostgreSQL教程(11)第三方物理备份工具pg_rman使用教程

PostgreSQL教程(11)第三方物理备份工具pg_rman使用教程

pg_rman是一款PostgreSQL第三方物理备份工具,支持对整个数据库集群、归档日志和服务器日志进行在线备份。由于pg_rman是基于本地数据拷贝的方式,而不是流式备份,所以要求 pg_rman 与 PostgreSQL 在同一服务器。

一、安装 pg_rman

1、配置环境变量

安装前确保已经配置好数据库环境变量,这样编译安装的时候会将pg_man存放在正确的目录中

vi ~/.bashrc
export PATH=/usr/local/postgersql_16_10/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/postgersql_16_10/lib:$LD_LIBRARY_PATH


2、下载pg_rman

通过Github(https://github.com/ossc-db/pg_rman)下载pg_rman,需要注意pg_rman的版本要和数据库相对应,这里以16版本进行演示

wget https://github.com/ossc-db/pg_rman/releases/download/V1.3.16/pg_rman-1.3.16-pg16.tar.gz


3、编译安装pg_rman

由于环境变量里已经配置,所以编译完成后,pg_rman应该在数据库bin目录下

tar zxf pg_rman-1.3.16-pg16.tar.gz
make 
make install


pg_rman1.png

二、pg_rman 选项说明

1、数据库连接选项

-d,--dbname=DBNAME:指定数据库名

-h,--host=HOSTNAME:指定数据库地址

-p,--port=PORT:指定数据库端口

-U,--username=USERNAME:指定数据库用户名

-W,--no-password:不提示密码

2、备份策略配置

pg_rman的备份策略配置配置在$BACKUP_PATH/pg_rman.ini文件中,包含备份保留时间、保留个数等

KEEP_ARCLOG_FILES:保存归档文件个数

KEEP_ARCLOG_DAYS:保存归档的天数

KEEP_DATA_DAYS:保存备份集时间

KEEP_SRVLOG_FILES:保存日志文件个数

KEEP_SRVLOG_DAYS:保存日志文件天数

3、备份选项

-D,--pgdata=PATH:指定数据目录

-A,--arclog-path=PATH:指定归档日志目录

-S,--srvlog-path=PATH:指定数据库日志路径

-B,--backup-path=PATH:指定备份文件路径

-V,--verbose:显示备份详情

-P,--progress:显示备份进度

-b,--backup-mode=MODE:备份模式,full为全备,incremental为增量备份

-Z,--compress-data:压缩备份

4、还原选项

--recovery-target-time:恢复到指定时间戳

--recovery-target-xid:恢复到指定事务ID

--recovery-target-inclusive:是否包含恢复目标

--recovery-target-timeline:恢复到特定的时间线

--hard-copy:恢复的时候采用复制归档日志的方式,而不是通过软连接,建议加上该选项

三、pg_rman 备份与还原

1、初始化备份目录

在初次使用 pg_rman进行备份时,必须先执行初始化,生成元信息文件,比如记录数据库集群的唯一标识的system_identifier文件,如果没有该文件备份将无法执行并出现类似 ERROR: could not open system identifier file "/data/pg_rman/system_identifier" 这样的报错

pg_rman init -D /data/postgresql_16_10/data -B /data/pg_rman/
INFO: ARCLOG_PATH is set to '/data/postgresql_16_10/archive'
INFO: SRVLOG_PATH is set to '/data/postgresql_16_10/data/log'


初始化完成后生成目录结构

pg_rman2.png

2、执行全量备份

pg_rman backup --backup-mode=full  -D /data/postgresql_16_10/data -B /data/pg_rman/ -A /data/postgresql_16_10/archive/ --progress
INFO: copying database files
Processed 1311 of 1311 files, skipped 0
INFO: copying archived WAL files
Processed 22 of 22 files, skipped 0
INFO: backup complete
INFO: Please execute 'pg_rman validate' to verify the files are correctly copied


3、校验备份文件

pg_rman  validate -B /data/pg_rman/ 
INFO: validate: "2025-09-18 04:25:10" backup and archive log files by CRC
INFO: backup "2025-09-18 04:25:10" is valid


4、执行增量备份

执行增量备份后,备份数据存放路径和原全量备份目录同级

pg_rman backup --backup-mode=incremental  -D /data/postgresql_16_10/data -B /data/pg_rman/ -A /data/postgresql_16_10/archive/ --progress

5、查看可用备份集

如果status为ok表示备份是可以直接使用,如果为done表示备份完成了但是还没有经过validate校验

#如果加上--detail可以详细更详细的信息,比如日志多大、数据多大、是否压缩等
pg_rman show -B /data/pg_rman/
=====================================================================
 StartTime           EndTime              Mode    Size   TLI  Status 
=====================================================================
2025-09-18 10:44:10  2025-09-18 10:44:14  INCR   134MB     2  DONE
2025-09-18 10:41:08  2025-09-18 10:41:11  INCR   134MB     2  OK
2025-09-18 04:25:10  2025-09-18 04:25:19  FULL  1095MB     2  OK


6、使用pg_rman恢复数据

恢复pg_rman备份前需要先停止PostgreSQL数据库,恢复时将直接覆盖之前的数据库目录。通过recovery-target-time参数指定一个需要恢复的备份时间点,如果指定了时间点恢复,数据库在启动后将进入恢复状态,需要登录数据库手动调整状态才可以写入数据。如果不指定recovery-target-time,则默认为恢复到最新时间,并且为正常读写的状态。

由于 pg_rman 的增量备份会依赖原有的全量备份以及 WAL 序列,而在基于时间点恢复后,数据库会产生一个新的时间线,此时建议立即进行一次全量备份,这样后续的增量备份才会采用新的时间线,避免增量备份还会基于旧的 timeline,从而导致 恢复链断裂而无法使用。

#1、停止数据库
pg_ctl -D /data/postgresql_16_10/data stop -m fast

#2、不指定 --recovery-target-time将会恢复到 FULL + 所有增量的最新状态
pg_rman restore -B /data/pg_rman/ -D /data/postgresql_16_10/data --hard-copy


7、删除pg_rman备份集

删除备份集时需要指定备份的Endtime,如果删除的是增量备份,会自动删除之前被依赖的其他增量和全量备份

#将备份集删除,备份集status被标记为deleted状态
pg_rman delete 2025-09-18 10:44:14

#将备份完全删除,无法再查看到被删除的备份信息
pg_rman purge


文章评论

猜你喜欢

MySQL教程(11)物理备份工具Xtrabackup使用教程

MySQL MySQL教程(11)物理备份工具Xtrabackup使用教程

一、Xtrabackup 介绍Xtrabackup是Percona出品的一款针对MySQL的物理备份工具。物理备份通常是指直接对数据文件、日志文件、配置文件等对象直接进行复制的一种备份方法。...

MySQL教程(10)逻辑备份工具mysqldump使用教程

MySQL MySQL教程(10)逻辑备份工具mysqldump使用教程

一、MySQL逻辑备份介绍逻辑备份是指通过导出数据库中的逻辑信息(如表结构、视图、索引、存储过程、数据内容等)并保存为可读格式的过程。它将数据库数据以SQL语句或其他标准格式(如CSV、JSON)输出...

PostgreSQL教程(12)基于流复制的主从集群

PostgreSQL PostgreSQL教程(12)基于流复制的主从集群

一、PostgreSQL 流复制概念在PostgreSQL中,通过流复制(Streaming Replication)实现主从架构,保证数据安全性的同时提高读写性能与容灾能力。流复制的实现方...

PostgreSQL教程(10)物理备份工具pg_basebackup使用教程

PostgreSQL PostgreSQL教程(10)物理备份工具pg_basebackup使用教程

一、PostgreSQL 物理备份介绍物理备份是通过复制整个数据目录来对数据库实现备份的一种高效手段,备份对象包括所有的数据文件、WAL 日志以及相关的配置文件。在 PostgreSQL 中核心物理备...

PostgreSQL教程(9)逻辑备份工具pg_dump使用教程

PostgreSQL PostgreSQL教程(9)逻辑备份工具pg_dump使用教程

一、PostgreSQL 逻辑备份介绍PostgreSQL 原生支持的逻辑备份工具为pg_dump和pgdump_all。数据库逻辑备份的原理都相同,都是将数据以SQL语句的形式输出到一个文本文件,然...