- WAL 存檔日誌在 PostgreSQL 資料庫系統中,實際資料庫將資料“寫入”磁碟上名為預寫日誌 (WAL) 的附加檔案。
- 它記錄了資料庫系統中的寫入操作。當資料庫崩潰時,可以透過這些記錄來修復/恢復資料庫。
- 通常,預寫日誌會定期(稱為檢查點)記錄與資料庫匹配的內容,然後刪除,因為不再需要它。您還可以使用 WAL 作為備份,因為它記錄了對資料庫進行的所有寫入操作。
- pg_xlog 中儲存了預寫日誌。它是日誌檔案,其中儲存了已提交和未提交事務的所有日誌。它最多包含 6 個日誌,最後一個日誌將被覆蓋。如果存檔器處於開啟狀態,它會移動到那裡。
- 預寫日誌由每個 16 MB 大小的部分組成,這些部分稱為段。
- WAL 位於 pg_xlog 目錄下,它是“資料目錄”的子目錄。檔名將包含數字(0-9)和字元(az),按 PostgreSQL 例項的升序命名。要根據 WAL 執行備份,需要進行基本備份,即對資料目錄以及基本備份和當前日期之間的 WAL 段進行完整備份。
--首先使用 psql 終端檢查 postgresql 伺服器是否已啟用存檔日誌。
postgres=# show archive_mode; archive_mode -------------- off (1 row) postgres=# show archive_command;; archive_command ----------------- (disabled) (1 row)
--讓我們建立備份和存檔目錄(以 root 使用者身份登入):
mkdir -p /Archive/Location mkdir /backups chown postgres:postgres -R Archive chown postgres:postgres /backups
--check the folder permission
[root@p1 /]# ls -lrt drwxr-xr-x 2 postgres postgres 4096 Apr 10 07:54 backups drwxr-xr-x 3 postgres postgres 4096 Apr 10 07:54 Archive
--切換到postgres使用者並修改postgresql.conf。使叢集進入Archive-log模式需要RESTART。
[root@p1 /]# su postgres cd $PGDATA echo 'max_wal_senders=1' >> postgresql.conf echo 'wal_level=hot_standby' >> postgresql.conf echo 'archive_mode=on' >> postgresql.conf echo "archive_command='cp %p /Archive/Location/%f'" >> postgresql.conf
--重啟伺服器並檢查伺服器是否正在執行
bash-3.2$ pg_ctl restart -D $PGDATA waiting for server to shut down.... done server stopped server starting bash-3.2$ 2017-04-10 08:12:07 EDT LOG: redirecting log output to logging collector process 2017-04-10 08:12:07 EDT HINT: Future log output will appear in directory "pg_log". bash-3.2$ pg_ctl status -D $PGDATA pg_ctl: server is running (PID: 9825) /opt/PostgreSQL/9.3/bin/postgres "-D" "/opt/PostgreSQL/9.3/data"
--伺服器啟動後,使用 psql 終端檢查檔案是否正確啟用。
postgres=# show archive_mode; archive_mode -------------- on (1 row) postgres=# show archive_command; archive_command ---------------------------- cp %p /Archive/Location/%f (1 row) postgres=# show wal_level; wal_level ------------- hot_standby (1 row)