- 用在Hot Streaming中shipping log用
- 用在Incremental backup做為Archive log用(continuous archiving)
實作PITR,從設定、備份到還原主要有幾個步驟,以下將實作每個步驟並針對各步驟說明。
0. 準備工作
a. 建立Archive要存放的資料夾,並設定權限 (mkdir -p /pg_backup/arlog && chown postgres.postgres /pg_backup/arlog)
b. 建立Full Backup檔要存放的資料夾,並設定權限 (mkdir -p /pg_backup/fullbackup && chown postgres.postgres /pg_backup/fullbackup)
c. 建立Restore要存放的資料夾,並設定權限 (mkdir -p /pg_backup/restore && chown postgres.postgres /pg_backup/restore)
1.設定WAL(Write Ahead Log) archiving
於postgresql.conf內定義三個主要參數
wal_level = archive # or hot_standby for hot streaming...
archive_mode = on
archive_command = 'cp %p /pg_backup/arlog/%f'
設定完成後重啟Service當超過conf檔定義的wal log大小跟segement後就會開始copy到archive folder.
psql# -- 長出arlog...
psql# create table testPITR1 as select * from pg_class, pg_description;
psql# select current_timestamp;
psql# comment on table testpitr1 IS 'created at YYYY-MM-DD HH:MI:SS';
--於psql下進行
a. psql# select pg_switch_xlog();
b. psql# select pg_start_backup('Backup-'||current_timestamp);
--於shell下進行 (tar檔名的命名規則一般以施作日期+pg_start_backup的回傳值,這樣方便管理)
c. bash# tar -zcvf /pg_backup/fullbackups/bk20140315_12000028.tar data--於psql下進行
d. psql# select pg_stop_backup();
可於Backup後看到pg_xlog裡會多出.backup的檔。cat它能看到備份的資訊。
3. Recovering
a. 先將Full Backup 的Tar檔解到Data目錄
bash# tar -zxvf /pg_backup/fullbackups/bk20140315_12000028.tar
b. 清空pg_xlog下所有檔案
bash# rm -rf /opt/PostgreSQL/9.3/data/pg_xlog/*
c. mv ARLOG/* RESTORELOG/
bash# mv /pg_backup/arlog/* /pg_backup/restore/
d. 編輯recovery.conf
restore_command = 'cp /pg_backup/restore/%f %p'
#recovery_target_time = '2014-03-15 15:20:00'
e. 重啟PostgreSQL
bash# bin/pg_ctl -D /opt/PostgreSQL/9.3/data start
- 注意事項:
- 如果是recovery到Server crash前一秒,要記得把原有data folder下的pg_xlog下的所有檔案copy到新的data/pg_xlog下。
- 如果是recovery到某個time line,記得一定要清空tar檔解開的data folder下的pg_xlog內的所有檔案。
由下圖可看出recovery的情形,可注意到
1. recovery是從0...013開始一直到0...023並不是所有檔案。
2. 0...012之前的archive log在此Full backup 的tar下是沒有用的,可以直接purge掉。
沒有留言:
張貼留言