PostgreSQL 歸檔日誌

wongchaofan發表於2024-07-20
在本教程中,我將解釋如何在 postgresql 伺服器中啟用 archivelog
  • WAL 存檔日誌在 PostgreSQL 資料庫系統中,實際資料庫將資料“寫入”磁碟上名為預寫日誌 (WAL) 的附加檔案。
  • 它記錄了資料庫系統中的寫入操作。當資料庫崩潰時,可以透過這些記錄來修復/恢復資料庫。
  • 通常,預寫日誌會定期(稱為檢查點)記錄與資料庫匹配的內容,然後刪除,因為不再需要它。您還可以使用 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)

相關文章