pgsql 如何手動觸發歸檔
方法:
pg10.0之前:
select pg_switch_xlog();
pg10.0之後:
select pg_switch_wal();
備註:執行 pg_switch_xlog() 後,WAL 會切換到新的日志,這時會將老的 WAL日志歸檔。
除瞭手動觸發歸檔,還有什麼情況下,pg會進行歸檔?
兩種情況:
①WAL 日志寫滿後觸發歸檔。
wal日志被寫滿後會觸發歸檔,wal日志默認是16MB,這個值可以在編譯PostgreSQL時通過參數”–with-wal-segsize”設置,編譯後不能修改。
②archive_timeout時間控制。
可以設置archive超時參數 archive_timeout ,假如設置archive_timeout=60,那麼每 60s , 會觸發一次 WAL 日志切換,同時觸發日志歸檔,這裡有個隱含的假設: 當前 WAL 日志中仍有未歸檔的WAL。
補充:postgresql開啟歸檔日志
步驟一:
修改postgresql的配置文件(postgresql.conf)
wal_level=hot_standby archive_mode =on archive_command ='DATE=`date +%Y%m%d`;DIR="/home/postgres/arch/$DATE";(test -d $DIR || mkdir -p $DIR)&& cp %p $DIR/%f'
ps:%p 是指相對路徑 %f是指文件名
步驟二:
創建歸檔路徑
mkdir -p /home/postgres/arch chown -R postgres:postgres /home/postgres/arch
步驟三:
重啟數據庫
步驟四:
驗證歸檔是否正常
postgres=# checkpoint; CHECKPOINT postgres=# select pg_switch_xlog(); pg_switch_xlog ---------------- 1/760000E8 (1 row) postgres@ubuntu:~$ cd /home/postgres/data/data_1999/arch/ postgres@ubuntu:~/data/data_1999/arch$ ls 20150603 postgres@ubuntu:~/data/data_1999/arch$ cd 20150603/ postgres@ubuntu:~/data/data_1999/arch/20150603$ ls 000000010000000100000074 000000010000000100000075 000000010000000100000076
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- postgresql 利用xlog進行熱備操作
- Postgresql 如何清理WAL日志
- 使用pg_basebackup對Postgre進行備份與恢復的實現
- postgresql 切換 log、xlog日志的實現
- PostgreSQL pg_archivecleanup與清理archivelog的操作