Database-Design

PostgreSQL PITR 線上恢復後刪除存檔日誌

  • September 15, 2012

我在三台伺服器上使用 pgpool-II + PostgreSQL 8.4:主伺服器 + 備用伺服器 + 備用伺服器 2。複製模式為“on”負載平衡模式為“on”(在主備1之間)

我按照官方教程使用 PITR 配置線上恢復:http: //pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-en.html#online-recovery

腳本“copy-base-backup”中有一個 tar 命令:

tar -C / 數據 -zcf pgsql.tar.gz pgsql

所以我所有的 PG 集群目錄都在腳本執行時被複製:

ls -1 /srv/pg/data/
PG_VERSION 
archive # directory with postgres archive files
backup_label.old
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_log
pg_multixact
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
pg_xlog
pgpool_recovery
pgpool_recovery_pitr
pgpool_remote_start
postgresql.conf
postmaster.opts
postmaster.pid
recovery.conf
recovery.done

如何安全地從主節點和備用節點中刪除舊的歸檔日誌?我的節點上每天大約有 30Gb 的檔案。

pgpool 附帶的有關 PITR 恢復的文件確實不完整,並且在某些方面完全具有誤導性。它建議將所有存檔文件保留在主伺服器上,而不是使用 recovery_command 使用 scp 從那裡複製到每個備用伺服器。那是沒有價值的。每個備用數據庫都需要有自己的存檔副本,否則那裡沒有真正的冗餘。如果主人在那種情況下失敗了,你就沒有什麼用處了。master 上的 archive_command 應該將文件分發到備用系統。如果您這樣做,則根本不需要在主伺服器上保存存檔的副本。

為了清理每個備用數據庫上的檔案,也不應該遵循給定的 recovery_command 的糟糕建議。相反,應該呼叫pg_standby作為恢復命令。有關更多詳細資訊,請參閱有關暖備用伺服器的真實文件。如果您使用 pg_standby,它應該傳遞的一件事是“%r”參數,它是刪除舊存檔日誌所需的資訊。以這種方式使用 pg_standby,它會為你清理檔案。

這裡主要的重要部分是編寫一個將數據正確複製到兩個備用伺服器的archive_command 腳本。我沒有一個很好的例子可以指出,但是您需要做的是在每次複製後檢查錯誤,並僅在兩個副本都發生時才提供成功返回程式碼。

是的,此時您可以安全地刪除那些已歸檔的日誌。不過要小心一點。您不想刪除尚未歸檔的日誌!

引用自:https://dba.stackexchange.com/questions/3350