Postgresql

pg_switch_wal 在時間點恢復 PostgreSQL

  • October 10, 2019

我正在關注有關 postgres 中時間點恢復教程,並提出了以下問題。有誰能夠幫助我。

  • 每次我想備份數據庫時是否需要使用pg_basebackup,或者postgres備份數據庫並考慮其配置儲存在某個地方?
  • 做什麼的psql -c "select pg_switch_wal();"?每次我想備份數據庫時都需要執行嗎?

如果有幫助,我會在 ubuntu 18.04.3 上使用 postgres 11。

編輯

讓我更具體地回答我的問題。正如我在網際網路上搜尋所了解的那樣,我們應該有兩個文件來備份數據庫:一個包含通用文件(如表屬性)和一個 WAL 文件,其中包含顯示數據庫中實例的日誌文件。而且我已經看到pg_basebackup備份整個數據庫集群不僅是 WAL 文件,所以應該有一個只備份 WAL 文件的功能。

謝謝

從理論上講,您可以只執行一次“pg_basebackup”(或每次主要版本升級一次),但是執行恢復將花費越來越長的時間,因為它必須執行自該備份以來累積的所有 WAL。所以定期做一個新的 pg_basebackup 通常是有意義的。

“數據庫”不會為你做這件事。有各種各樣的備份工具可能會(pg_barman、pgbackrest、pg_probackup 等)。但是你沒有提到使用它們中的任何一個。

pg_switch_wal() 不是必需的,因為 pg_basebackup 會為您完成。

如果您將 pg_basebackup 設置為,它將存檔 wal 文件,但只會對在基本備份本身期間生成的 WAL 文件這樣做。這適用於快照備份,但不適用於 PITR。換句話說,它可以讓您恢復到備份命令完成的確切時刻,但不足以讓您恢復到該時間之後的某個時間點。要在其他時間備份 WAL 文件,您需要將“archive_command”設置設置為可以為您複製文件的內容。(另外,如果你在啟動basebackup 之前有一個有效的“archive_command”,那麼 basebackup 本身並不真的需要首先備份 WAL。那麼基本備份將不是自包含的,你將擁有將其與 WAL 存檔配對以進行恢復。)

您參考的教程顯示了“archive_command”的設置。但是,它顯示的設置並不是防彈的。作為文件說,“這是一個例子,不是推薦”。它有兩個主要問題。一次是它在聲明成功之前不同步副本。這意味著系統可以在它的副本被刷新到磁碟驅動器之前從 pg_wal 中刪除/回收 WAL 文件;因此,在錯誤的時間發生崩潰可能會使您的有效副本為零。另一個問題是它似乎是在本地複製文件。這意味著如果您的電腦被破壞,您將在失去主副本的同時失去備份。(它可能沒有在本地複制,因為 /var/lib/postgresql/pg_log_archive 可能是網路安裝的文件系統;但如果是這樣,那麼這會加劇 fsync 問題,你怎麼知道遠端文件系統上的副本真的安全嗎?)

如果您不想使用“archive_command”,那麼另一個工具是“pg_receivewal”。您將在另一台伺服器上執行它,它將連接到您的 Postgresql 實例並“拉” wal 文件,而不是“archive_command”所做的“推送”。

另一種選擇是在另一台伺服器上設置流式備用伺服器,將“archive_mode”設置為“always”,然後讓“archive_command”在備用伺服器上執行,而不是在主伺服器上執行,以保存您的 WAL 文件。

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