背景
在Oracle下我們可以使用rman進(jìn)行物理備份檐晕,支持?jǐn)?shù)據(jù)庫的全量概疆、增量逗威、歸檔的備份模式
而PostgreSQL作為開源數(shù)據(jù)庫,近些時(shí)間來也一直向商業(yè)版數(shù)據(jù)庫看齊岔冀,也推出了開源功工具pg_rman凯旭,也具備了oracle rman大部分的功能
pg_rman介紹
- pg_rman是一個(gè)開源的PostgreSQL備份軟件;
- pg_rman使用的是pg_start_backup(), copy, pg_stop_backup()的備份模式;
- pg_rman跑的不是流復(fù)制協(xié)議罐呼,而是文件拷貝鞠柄,所以pg_rman必須和數(shù)據(jù)庫節(jié)點(diǎn)跑一起;
如果在standby節(jié)點(diǎn)跑pg_rman嫉柴,pg_rman則需要通過網(wǎng)絡(luò)連接到主節(jié)點(diǎn)執(zhí)行pg_start_backup和pg_stop_backup厌杜。
pg_rman的用法非常簡單,支持以下幾種運(yùn)行模式计螺。
項(xiàng)目地址
文檔地址
主要代碼命令:
命令 | 說明 |
---|---|
init | 初始化備份目錄 |
backup | 在線備份 |
restore | 恢復(fù) |
show | 查看備份歷史 |
validate | 驗(yàn)證備份 |
delete | 刪除備份文件 |
purge | 從備份目錄中刪除已刪除備份 |
安裝
下載并安裝rpm安裝包
我們一般使用的PG數(shù)據(jù)庫版本為9.6.3夯尽,那么對應(yīng)pg_rman也有相應(yīng)的版本為:
pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm
同時(shí)需要下載依賴:
postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64
或者直接使用wget下載:
[root@out-pg ~]# wget https://github.com/ossc-db/pg_rman/releases/download/V1.3.7/pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm
[root@out-pg ~]# wget https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm
下載后安裝rpm包
rpm -ivh postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm
rpm -ivh pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm
[root@out-pg ~]# rpm -ivh postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm
警告:postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64.rpm: 頭V4 DSA/SHA1 Signature, 密鑰 ID 442df0f8: NOKEY
準(zhǔn)備中... ################################# [100%]
軟件包 postgresql96-libs-9.6.11-1PGDG.rhel7.x86_64 已經(jīng)安裝
[root@out-pg ~]# rpm -ivh pg_rman-1.3.7-1.pg96.rhel7.x86_64.rpm
準(zhǔn)備中... ################################# [100%]
軟件包 pg_rman-1.3.7-1.pg96.rhel7.x86_64 已經(jīng)安裝
安裝完成后,pg_rman會安裝在默認(rèn)的/usr/psql-9.6/目錄下登馒,接下來要設(shè)置環(huán)境變量
設(shè)置環(huán)境變量
修改/root/.bash_profile
vim /root/.bash_profile
source /root/.bash_profile
PATH=$PATH:$HOME/bin
export PG_RMAN=/usr/pgsql-9.6
export PGHOME=/usr/local/pgsql
export PGDATA=/db/pgsql/data
export PGLIB=/usr/local/pgsql/lib
export SRVLOG_PATH=/var/lib/pgsql/9.6/data/pg_log
export ARCLOG_PATH=/home/postgres/arc_log
export BACKUP_PATH=/home/postgres/backup
export PATH=$PGHOME/bin:$PATH:$PG_RMAN/bin
export PATH
其中PGHOME匙握、PGDATA、PGLIB與實(shí)際目錄一致
SRVLOG_PATH陈轿、ARCLOG_PATH肺孤、BACKUP_PATH為rman需要
設(shè)置完環(huán)境變量后,輸入pg_rman命令
[root@out-pg ~]# pg_rman
pg_rman manage backup/recovery of PostgreSQL database.
Usage:
pg_rman OPTION init
pg_rman OPTION backup
pg_rman OPTION restore
pg_rman OPTION show [DATE]
pg_rman OPTION show detail [DATE]
pg_rman OPTION validate [DATE]
pg_rman OPTION delete DATE
pg_rman OPTION purge
Generic options:
--help show this help, then exit
--version output version information, then exit
生效
創(chuàng)建文件夾
mkdir /home/postgres/arc_log/
附加權(quán)限
chown postgres:postgres / /home/postgres/arc_log
初始化rman
使用rman init
命令初始化
[root@out-pg ~]# pg_rman init
pg_rman: could not open file "/db/pgsql/data/global/pg_control" for reading: 沒有那個(gè)文件或目錄
上面錯(cuò)誤是由于PG_DATA環(huán)境變量設(shè)置不正確
修改后再執(zhí)行init
[root@out-pg ~]# pg_rman init
ERROR: backup catalog already exist and it's not empty
以上錯(cuò)誤需要重新刪除backup目錄,刪除后重新初始化正常
[root@out-pg ~]# rm -rf /home/postgres/backup/*
[root@out-pg ~]# pg_rman init
INFO: ARCLOG_PATH is set to '/home/postgres/arc_log'
INFO: SRVLOG_PATH is set to '/var/lib/pgsql/9.6/data/pg_log'
生成備份元數(shù)據(jù)济欢,查看目錄
[root@out-pg ~]# ll /home/postgres/backup/
總用量 8
drwx------ 4 root root 35 11月 23 13:30 backup
-rw-r--r-- 1 root root 83 11月 23 13:30 pg_rman.ini
-rw-r--r-- 1 root root 40 11月 23 13:30 system_identifier
drwx------ 2 root root 6 11月 23 13:30 timeline_history
[root@out-pg ~]# cat /home/postgres/backup/pg_rman.ini
ARCLOG_PATH='/home/postgres/arc_log'
SRVLOG_PATH='/var/lib/pgsql/9.6/data/pg_log'
修改postgres.conf
vim /usr/local/postgresql/data/postgresql.conf
修改三個(gè)參數(shù)wal_level赠堵,archive_mode,archive_command
wal_level = archive
archive_mode = on
archive_command = 'cp %p /home/postgres/arc_log/%f'
重啟數(shù)據(jù)庫
[root@out-pg backup]# service postgresql restart
Restarting PostgreSQL: ok
備份數(shù)據(jù)庫
全量備份
備份命令
pg_rman backup -b full -U postgres -d aegis -h 127.0.0.1 -p 5432
[root@out-pg backup]# pg_rman backup -b full -U postgres -d aegis -h 127.0.0.1 -p 5432
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.
可以添加-Z參數(shù)使用zlib壓縮數(shù)據(jù)法褥,大大減少備份量茫叭,一下為對比,節(jié)省空間將近50%
[root@out-pg ~]# du /home/postgres/backup/20181123/* -slh
13G /home/postgres/backup/20181123/142131
7.0G /home/postgres/backup/20181123/154458
備份完成后需要驗(yàn)證
不驗(yàn)證的備份無法使用
[root@out-pg backup]# pg_rman validate
INFO: validate: "2018-11-23 14:21:31" backup and archive log files by CRC
INFO: backup "2018-11-23 14:21:31" is valid
最后查看備份
使用命令
pg_rman show
[root@out-pg backup]# pg_rman show
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2018-11-23 14:21:31 2018-11-23 14:26:47 FULL 13GB 1 OK