合 PG备份恢复工具之pg_rman
Tags: PGPostgreSQL备份恢复pg_rman
pg_rman简介(服务端工具)
GitHub:https://github.com/ossc-db/pg_rman
文档:http://ossc-db.github.io/pg_rman/index.html
参考:https://developer.aliyun.com/article/71929
pg_rman是一个开源的PostgreSQL备份软件,使用的是pg_start_backup(), copy, pg_stop_backup()的备份模式。
pg_rman跑的不是流复制协议,而是文件拷贝,所以pg_rman必须和数据库Server安装在一起。
如果在standby节点跑pg_rman,pg_rman则需要通过网络连接到主节点执行pg_start_backup和pg_stop_backup。
pg_rman的用法非常简单,支持以下几种运行模式。
init | Initialize a backup catalog. |
---|---|
backup | Take an online backup. |
restore | Do restore. |
show | Show backup history. The detail option shows with additional information of each backups. |
validate | Validate backup files. Backups without validation cannot be used for restore and incremental backup. |
delete | Delete backup files. |
purge | Remove deleted backups from backup catalog. |
pg_rman是postgresql在线备份恢复的工具。其支持在线和基于时间点备份方式,还可以通过创建backup catalog来维护DB cluster备份信息。
- 使用简单.一个命令即可完成备份和恢复.
- 支持在线全备,增量备份,归档备份.
- 支持备份压缩,通过gzip工具实现页内压缩.>自动备份维护.
- 自动删除过期的WAL备份文件.
- 支持备份验证.
- 恢复期间无事务丢失.支持基于PITR的配置文件生成器.
pg_rman安装
下载:https://github.com/ossc-db/pg_rman
1 2 3 4 5 6 7 8 | su - pgsql wget https://github.com/ossc-db/pg_rman/releases/download/V1.3.16/pg_rman-1.3.16-pg13.tar.gz tar -zxvf pg_rman-1.3.16-pg13.tar.gz cd pg_rman-1.3.16-pg13/ make && make install [pgsql@lhrpg pg_rman-1.3.16-pg13]$ which pg_rman /postgresql/pg13/bin/pg_rman |
1、需要根据PG Server的版本,下载安装不同的版本。
2、需要提前使用编译安装的方式来安装PG Server
使用pg_rman的前提
- 开启归档
1 2 3 4 5 6 7 8 9 10 11 12 | mkdir -p /postgresql/archive cat >> /postgresql/pgdata/postgresql.conf <<"EOF" wal_level='replica' archive_mode='on' archive_command='test ! -f /postgresql/archive/%f && cp %p /postgresql/archive/%f' restore_command='cp /postgresql/archive/%f %p' EOF pg_ctl restart select * from pg_settings where name in ('wal_level','archive_mode','archive_command'); |
备份
初始化
初始化,实际上就是需要一个目录,这个目录将用于存放备份的文件
首先需要初始化一个backup catalog,实际上就是需要一个目录,这个目录将用于存放备份的文件。 同时这个目录也会存放一些元数据,例如备份的配置文件,数据库的systemid,时间线文件历史等等。 初始化命令需要两个参数,分别为备份目标目录,以及数据库的$PGDATA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [pgsql@lhrpg bk]$ pg_rman init -B /bk INFO: ARCLOG_PATH is set to '/postgresql/archive' INFO: SRVLOG_PATH is set to '/postgresql/pgdata/pg_log' [pgsql@lhrpg bk]$ ll total 16 drwx------ 4 pgsql pgsql 4096 Apr 22 10:59 backup -rw-rw-r-- 1 pgsql pgsql 41 Apr 22 10:59 pg_rman.ini -rw-rw-r-- 1 pgsql pgsql 40 Apr 22 10:59 system_identifier drwx------ 2 pgsql pgsql 4096 Apr 22 10:59 timeline_history [pgsql@lhrpg bk]$ more pg_rman.ini ARCLOG_PATH='/postgresql/archive' SRVLOG_PATH='/postgresql/pgdata/pg_log' [pgsql@lhrpg bk]$ more system_identifier SYSTEM_IDENTIFIER='6953491984378934315' |
👉 注意
pg_rman只从postgresql.conf取log_directory和archive_command参数的值。
如果你的PostgreSQL的配置文件是include的或者配置在postgresql.auto.conf中,这两个值将不准确。
所以建议你仅仅把参数配置在postgresql.conf中,而不要使用其他配置文件。
全备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [pgsql@lhrpg bk]$ pg_rman backup --backup-mode=full -B /bk INFO: copying database files INFO: copying archived WAL files INFO: backup complete INFO: Please execute 'pg_rman validate' to verify the files are correctly copied. [pgsql@lhrpg bk]$ pg_rman show -B /bk ===================================================================== StartTime EndTime Mode Size TLI Status ===================================================================== 2021-04-22 11:11:52 2021-04-22 11:11:55 FULL 77MB 1 DONE [pgsql@lhrpg bk]$ pg_rman validate -B /bk INFO: validate: "2021-04-22 11:11:52" backup and archive log files by CRC INFO: backup "2021-04-22 11:11:52" is valid [pgsql@lhrpg bk]$ pg_rman show -B /bk ===================================================================== StartTime EndTime Mode Size TLI Status ===================================================================== 2021-04-22 11:11:52 2021-04-22 11:11:55 FULL 77MB 1 OK |
👉
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!