PostgreSQL在1995年時開始依循SQL92規範下開發, 因此PITR(Point-In-Time-Recovery)的功能一定會有的, 以下為PITR的實作.
1. 設定環境變數
# mkdir -p /opt/Backup
# mkdir -p /opt/Archive
# chown -R enterprisedb:enterprisedb /opt/Backup
# chown -R enterprisedb:enterprisedb /opt/Archive
2. 修改 postgresql.conf, 啟動 archive mode.
wal_level = archive
archive_mode = on
archive_command = 'cp -rf %p /opt/Archive/%f'
3. 重新啟動 postgresql
# service postgresql-9.2 restart
4. 建置測試表單
# edb-psql -U labuser labs
edb=# create table alexlab(id number,val varchar2(1000));
edb=#\q
5. 資料庫完整備份
# edb-psql -U enterprisedb edb
edb=# select pg_start_backup('label',true);
edb=#\q
# cd /opt/PostgresPlus/9.1AS/
# tar cfz /opt/Backup/fullbackup.tgz data
# edb-psql -U enterprisedb edb
edb=# select pg_stop_backup();
edb=# select pg_switch_xlog();
edb=# select pg_switch_xlog();
edb=#\q
6. 確認備份時間 (T1)
edb=# select now();
7. 新增 100 筆資料
declare
i number := 1;
MAX_CNT number := 100;
begin
loop
if i > MAX_CNT then
exit;
end if;
insert into alexlab values(i,'****************************************************************************************************');
i := i + 1;
commit;
end loop;
end;
8. 確認異動時間 (T2)
edb=# select now();
9. 回復到 T1 時間時的資料
9.1. 假設資料庫crash.
9.2. 將fully backup的資料回復到database的目錄.
9.3. 設定 recovery.conf檔, 可以指定回復時間點.
restore_command = 'cp /opt/Archive/%f %p'
recovery_target_time = '2012-12-14 14:33:22'
9.4. 重新啟動 postgresql
9.5. 確認alexlab資料表為 0 筆.
10. 完功.

沒有留言:
張貼留言