正文
POSTGRESQL9.5之pg_rman工具
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
pg_rman是一款专门为postgresql设计的在线备份恢复的工具。其支持在线和基于时间点备份方式,还可以通过创建backup catalog来维护DB cluster备份信息。
看起来好像是模仿oracle的RMAN工具。
pg_rman特点:
- 使用简单.一个命令即可完成备份和恢复.
- 支持在线全备,增量备份,归档备份.
- 支持备份压缩.通过gzip工具实现页内压缩.
- 自动备份维护.自动删除过期的WAL备份文件.
- 支持备份验证.
- 恢复期间无事务丢失.支持基于PITR的配置文件生成器.
1. 安装过程
--下载依赖包地址 http://yum.postgresql.org/9.5/redhat/rhel-6.4-x86_64/
包:postgresql95-libs-9.5.2-1PGDG.rhel6.x86_64.rpm
--下载pg_rman,注意与其对应的数据库版本 下载地址:https://github.com/ossc-db/pg_rman/releases
包:pg_rman-1.3.2-1.pg95.rhel6.x86_64.rpm
[root@sdserver40_210 software]# rpm -ivh postgresql95-libs--1PGDG.rhel6.x86_64.rpmwarning: postgresql95-libs--1PGDG.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEYPreparing... ########################################### [%] :postgresql95-libs ########################################### [%][root@sdserver40_210 software]# rpm -ivh pg_rman--.pg95.rhel6.x86_64.rpmPreparing... ########################################### [%] :pg_rman ########################################### [%]
2. 配置环境变量
pg_rman 默认是安装在/usr目录下面;注意同时pg_rman需要一个备份目录
export PG_RMAN=/usr/pgsql-9.5
export PATH=$PATH:$HOME/bin:/opt/pgsql95/bin:$PG_RMAN/bin
export BACKUP_PATH=/data/pg_rman
3.初始化备份目录
[postgres@sdserver40_210 ~]$ pg_rman init -B /data/pg_rmanINFO: ARCLOG_PATH is set to '/home/postgres/archive'INFO: SRVLOG_PATH is set to '/data/pgdata/pg_log'
4.备份
[postgres@sdserver40_210 ~]$ pg_rman backup --backup-mode=full --progressINFO: copying database filesProcessed of files, skippedNOTICE: pg_stop_backup complete, all required WAL segments have been archivedINFO: copying archived WAL filesProcessed of files, skippedINFO: backup completeHINT: Please execute 'pg_rman validate' to verify the files are correctly copied.
--pg_rman 的备份必须都是经过验证过的,否则不能进行恢复和增量备份
Backups without validation cannot be used forrestoreand incremental backup--执行完备份要执行一次validate,因为备份后的状态是done,还不能进行恢复
[postgres@sdserver40_210 ~]$ pg_rman show========================================================== StartTime Mode Duration Size TLI Status==========================================================-- :: FULL 0m 343MB DONE[postgres@sdserver40_210 ~]$ pg_rman validateINFO: validate: "2016-05-31 16:36:45" backup and archive log files by CRCINFO: backup "2016-05-31 16:36:45" is valid[postgres@sdserver40_210 ~]$ pg_rman show========================================================== StartTime Mode Duration Size TLI Status==========================================================-- :: FULL 0m 343MB OK
5. 模拟恢复
[postgres@sdserver40_210 ~]$ lltotaldrwxrwxr-x postgres postgres May : archivedrwxrwxr-x postgres postgres May : backupdrwx------ postgres postgres May : datadrwxrwxr-x postgres postgres May : log-rw-rw-r-- postgres postgres May : out_file-rw-rw-r-- postgres postgres May : out.txtdrwxrwxr-x postgres postgres May : scripts-rw-r--r-- postgres postgres May : test.sql[postgres@sdserver40_210 ~]$ rm -rf data[postgres@sdserver40_210 ~]$ lltotaldrwxrwxr-x postgres postgres May : archivedrwxrwxr-x postgres postgres May : backupdrwxrwxr-x postgres postgres May : log-rw-rw-r-- postgres postgres May : out_file-rw-rw-r-- postgres postgres May : out.txtdrwxrwxr-x postgres postgres May : scripts-rw-r--r-- postgres postgres May : test.sql[postgres@sdserver40_210 ~]$ pg_stopwaiting for server to shut down.... doneserver stopped[postgres@sdserver40_210 ~]$ pg_rman restore --recovery-target-time "2016-05-31 17:30:00"INFO: the recovery target timeline ID is not givenINFO: use timeline ID of current database clusterINFO: calculating timeline branches to be used to recovery target pointINFO: searching latest full backup which can be used as restore start pointINFO: found the full backup can be used as base in recovery: "2016-05-31 16:36:45"INFO: copying online WAL files and server log filesINFO: clearing restore destinationINFO: validate: "2016-05-31 16:36:45" backup and archive log files by SIZEINFO: backup "2016-05-31 16:36:45" is validINFO: restoring database files from the full mode backup "2016-05-31 16:36:45"INFO: searching incremental backup to be restoredINFO: searching backup which contained archived WAL files to be restoredINFO: backup "2016-05-31 16:36:45" is validINFO: restoring WAL files from backup "2016-05-31 16:36:45"INFO: restoring online WAL files and server log filesINFO: generating recovery.confINFO: restore completeHINT: Recovery will start automatically when the PostgreSQL server is started.[postgres@sdserver40_210 ~]$ pg_startserver starting[postgres@sdserver40_210 ~]$ psql mydb lottupsql ()Type "help" for help.mydb=> \d List of relations Schema | Name | Type | Owner--------+------+-------+------- public | test | table | lottu( row)mydb=> select * from test; id | name------+-------- | lottu | rax | xuan | li0924( rows)mydb=> \q[postgres@sdserver40_210 ~]$ lltotaldrwxrwxr-x postgres postgres May : archivedrwxrwxr-x postgres postgres May : backupdrwx------ postgres postgres May : datadrwxrwxr-x postgres postgres May : log-rw-rw-r-- postgres postgres May : out_file-rw-rw-r-- postgres postgres May : out.txtdrwxrwxr-x postgres postgres May : scripts-rw-r--r-- postgres postgres May : test.sql
【参考文献】
http://ossc-db.github.io/pg_rman/index.html
https://yq.aliyun.com/articles/2274