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)
 [email protected]:~$ cd /home/postgres/data/data_1999/arch/
 [email protected]:~/data/data_1999/arch$ ls
 20150603
 [email protected]:~/data/data_1999/arch$ cd 20150603/
 [email protected]:~/data/data_1999/arch/20150603$ ls
000000010000000100000074 000000010000000100000075 000000010000000100000076

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: