Postgresql

如何在一台伺服器上製定多個數據庫的備份策略

  • September 1, 2022

我有一個包含許多數據庫的伺服器……它包含大約 20 個數據庫。其中一些有 1600 萬行,但沒有那麼多。晚上通常很少或沒有活動,但白天不會那麼忙(除非有活動,例如新註冊或會員更新)。雖然不忙,但數據庫包含關鍵數據。沒有一個數據庫已經備份了一年多!

我怎樣才能安全地備份它們而不使伺服器崩潰?我需要什麼作為早期要求?我已經閱讀了許多備份策略,但我只是過於謹慎,因為我不想做愚蠢的事情。我想開發最安全的備份方法並“輕鬆”恢復。

目前,我已經啟動存檔並且它已經很好地工作了。

歡迎任何建議,或者也許有我應該閱讀的文章。

我的環境:在 Ubuntu 20 上執行的 Postgres 12

謝謝

當數據庫損壞、損壞或變得不可用時,根本沒有備份會導致更多的挫敗感。

這是一個非常簡單的計算:

無備份

  • 停業
  • 管理不滿意
  • 客戶不滿意
  • 很棒的演出

備份

  • 備份期間性能略有下降
  • 業務繼續
  • 管理愉快
  • 客戶滿意

pg_basebackup

pg_basebackup以下是PostgreSQL 附帶的工具的摘錄:

強調我的)

pg_basebackup用於對正在執行的 PostgreSQL 數據庫集群進行基本備份。這些是在不影響數據庫的其他客戶端的情況下進行的,並且可以用於時間點恢復(參見第 25.3 節)和作為日誌傳送或流複製備用伺服器的起點(參見第 26.2 節)。

pg_basebackup製作數據庫集群文件的二進制副本,同時確保系統自動進入和退出備份模式。**總是對整個數據庫集群進行備份;**無法備份單個數據庫或數據庫對象。對於單個數據庫備份,必須使用****諸如此類的工具。pg_dump

**通過正常 PostgreSQL 連接進行備份,並使用複制協議。必須使用超級使用者或具有 REPLICATION 權限的使用者建立連接(參見第 21.2 節),並且 pg_hba.conf 必須明確允許複製連接。**伺服器還必須配置為 max_wal_senders 設置得足夠高,以使至少一個會話可用於備份,一個會話可用於 WAL 流(如果使用)。

可以同時執行多個 pg_basebackups,但從性能的角度來看,最好只進行一次備份,然後複製結果。…

pg_basebackup (PostgreSQL 12 文件

進行基本備份

配置完所有內容後(閱讀整個文件),您可以使用以下命令執行基本備份:

bash #> pg_basebackup -D \postgresql\backup\ -F t -R -z -h yourhost -p 5432 -U root -W

這可以在互動式 bash 提示符下使用。設置 crontab 作業時,您必須創建一個.pgpass文件。這將允許您將命令作為 crontab 作業執行,而無需輸入密碼。

請閱讀33.15。密碼文件(PostgreSQL 文件)了解更多詳細資訊。

持續 WAL 歸檔

25.3 條。連續存檔和時間點恢復 (PITR)包含有關如何存檔 PostgreSQL 創建的 WAL(預寫日誌)文件的資訊。將 PostgreSQL 集群恢復到某個時間點需要這些文件。

PostgreSQL 在任何時候都在集群數據目錄的 pg_wal/ 子目錄中維護一個預寫日誌 (WAL)。**日誌記錄對數據庫數據文件所做的每一次更改。該日誌的存在主要是出於崩潰安全的目的:如果系統崩潰,可以通過“重放”自上次檢查點以來所做的日誌條目來將數據庫恢復到一致性。**但是,日誌的存在使得使用第三種備份數據庫的策略成為可能:**我們可以將文件系統級別的備份與 WAL 文件的備份結合起來。**如果需要恢復,我們會恢復文件系統備份,然後從備份的 WAL 文件中重播,以使系統恢復到目前狀態。這種方法管理起來更複雜與之前的任何一種方法相比,它都有一些顯著的好處:

  • 我們不需要一個完全一致的文件系統備份作為起點。備份中的任何內部不一致都將通過日誌重放來糾正(這與崩潰恢復期間發生的情況沒有顯著不同)。所以我們不需要文件系統快照功能,只需要 tar 或類似的歸檔工具。
  • 由於我們可以組合無限長的 WAL 文件序列進行回放,因此只需繼續歸檔 WAL 文件即可實現連續備份。這對於大型數據庫特別有價值,因為在這些數據庫中經常進行完整備份可能不方便。
  • 沒有必要一直重播 WAL 條目。我們可以在任何時候停止重播,並獲得數據庫當時的一致快照。因此,該技術支持時間點恢復:可以在進行基本備份後的任何時間將數據庫恢復到其狀態。
  • 如果我們不斷地將一系列 WAL 文件提供給另一台已經載入了相同基本備份文件的機器,我們就有了一個熱備用系統:在任何時候我們都可以啟動第二台機器,它會有一個幾乎最新的副本數據庫。

然後,您只需將WAL目錄的內容複製到您選擇的目標位置或備份這些文件,並在舊文件備份到安全位置後刪除舊文件。

一般建議

閱讀官方 PostgreSQL 文件中的第 25 章備份和恢復部分。如果您無法理解如何實施備份策略,請聯繫可以支持您實施解決方案的顧問。沒有什麼比沒有數據庫備份更糟糕的了。

擁有基本備份將部分覆蓋您。如果您可以每天執行它,那麼您就成功了一半。但如果這不可行,那麼您至少必須設置 WAL 歸檔。

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