Postgresql

我什麼時候可以清理存檔的 WAL 文件?

  • January 22, 2016

我需要一些幫助來了解如何使用存檔的 WAL 文件以及何時可以清理它們。

目前我們有一個主數據庫複製到一個從屬數據庫,但是我們的主數據庫伺服器每隔一段時間就會耗盡磁碟空間,因為使用archive_command建構歸檔的文件我們必須手動刪除它們。如果我們必須手動刪除舊的存檔 WAL 文件,我覺得我們錯過了一些東西,因為文件系統的磁碟空間太多了……

話雖如此,我不確定我是否足夠了解複製過程以開始刪除文件並確信我沒有搞砸任何事情。我們的從站是使用由創建的歸檔文件archive_command還是僅依賴$PG_DATA/pg_xlog目錄中的文件來與主站保持一致的狀態?

~~如果是這種情況,並且我們pg_dump每六個小時做一次主文件,我是否可以更新我們的備份腳本以清除開始時存在的所有存檔文件pg_dump(當然,一旦pg_dump完成)?~~來自文件:

注意:pg_dump 和 pg_dumpall 不生成文件系統級備份,並且不能用作連續歸檔解決方案的一部分。這樣的轉儲是合乎邏輯的,並且不包含 WAL 重放使用的足夠資訊。

我只是想確保無論我們如何清理存檔文件,我們仍然擁有繼續複製所需的內容,並且能夠在上次基本備份後執行 PITR。

我們的存檔命令是cp %p /var/lib/postgresql/9.2/archive/%f,這是我們recovery.conf從奴隸的文件:

standby_mode = 'on'
primary_conninfo = 'host=<ip-address> port=<port> user=rep password=<password> sslmode=require'
trigger_file = '/tmp/postgresql.trigger.5432'

WAL 文件是所有已發生事務的記錄……但僅此而已 - 本質上是狀態之前和之後狀態之間的增量。這意味著您必須先擁有一個 BASE 才能應用任何 WAL 文件。

如果你在沒有創建新的 BASE 的情況下清除了 WAL 檔案,那麼當你試圖從它們中恢復你的數據庫(通過 PITR)時,你將會遇到麻煩。

如果你要刪除 WAL 文件,那麼你需要確保你有一個有效的基礎可以在之後再次建構。

閱讀有關 WAL 歸檔的文件以獲取更多資訊。

在流複製方面,我相信只使用位於 pg_xlog 中的文件…(文件在發送之前沒有存檔,IIRC)

如果是這種情況,並且我們每六個小時對我們的 master 進行一次 pg_dump,我是否可以更新我們的備份腳本以清除 pg_dump 開始時存在的所有存檔文件(當然,一旦 pg_dump 完成)?

不完全… pg_dump 創建一個文件,其中包含可以提供給 pg_restore 的整個數據庫的資訊… 對於 PITR,您實際上需要通過複製數據庫文件和 WAL 文件來創建文件級“備份”(發出 pg_start_backup 後)

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