備份
1,配置歸檔模式
配置歸檔需要編輯postgresql.conf文件,默認爲與/usr/local/pgsql/data/目錄下
vim/usr/local/pgsql/data/postgesql.conf
wal_level = hot_standby
archive_mode= on
archive_command= ‘cp %p /usr/local/pgsql/backup/%f’ //backup的必須有postgres用戶(數據庫用戶)的權限,chown postgres backup
注:%p要被歸檔的日誌文件的路徑,%f是要被歸檔的日誌文件的文件名
2,啓動數據庫
pg_ctl start –D /usr/local/pgsql/data
3,創建數據庫arch
createdb arch
4,創建表並插入記錄
psql arch
arch=# create table tb(a int);
arch=# insert into tb(a) values(1);
5,創建基礎備份
arch=#select pg_start_backup(‘baseline’);
6,備份整個data目錄
tar –jcvf /usr/local/pgsql/backup/baseline.tar.bz2 /usr/local/pgsql/data/
7, 停止備份
psql arch
arch=# select pg_stop_backup();
8, 插入新記錄,然後切換日誌,重複3次
arch=# insert into tb(a) values(2);
arch=# select pg_switch_xlog();
arch=# insert into tb(a) values(3);
arch=# select pg_switch_xlog();
arch=# insert into tb(a) values(4);
arch=# select pg_switch_xlog();
9, 把/data/pg_xlog/下的WAL日誌文件複製到預設的歸檔目錄下,保證產生的WAL日誌都已歸檔.
恢復
1,停止數據庫
pg_ctl stop –D /usr/local/pgsql/data/
2,刪除/data/
rm –r /usr/local/pgsql/data/
3,恢復備份
tar –jxvf /usr/local/pgsql/backup/baseline.tar.bz2 –C / //如果沒有權限,可能需要root用戶執行
4,清空/data/pg_xlog/目錄下所有文件
rm –r /usr/local/pgsql/data/pg_xlog/
5, 創建/pg_xlog/及其下面的archive_status目錄
mkdir /usr/local/pgsql/data/pg_xlog/
mkdir /usr/local/pgsql/data/pg_xlog/archive_status
6, 在/data/目錄下創建recovery.conf
vim /usr/local/pgsql/data/recovery.conf
restore_command= ‘cp /usr/local/pgsql/backup/%f “%p”’
7,啓動數據庫
pg_ctl start –D /usr/local/pgsql/data/
一切正常的話數據庫就會自動應用WAL日誌進行恢復
8, 查看數據庫arch是否恢復
psql arch
arch=# select * from tb;
a
---
1
2
3
4
(4rows)
至此,數據已成功恢復!