簡體   English   中英

如何為*僅*托管開發或測試數據庫的集群配置 WAL 歸檔?

[英]How to configure WAL archiving for a cluster that *only* hosts dev or test databases?

我有一個項目的開發和測試數據庫,即我用來在本地運行我的項目或運行測試的數據庫。 它們都在同一個集群中(“實例”——我來自雷德蒙德)。

請注意,我的本地集群與托管生產數據庫的集群不同。

關於歸檔 WAL 文件,我應該如何配置這些數據庫?

我希望能夠通過從基本備份恢復並運行種子數據腳本來“構建”或“重建”這些數據庫中的任何一個。

但是我應該如何配置數據庫或集群來歸檔 WAL 文件? 我知道如果我想恢復數據庫,我需要它們。 我認為這不太可能(因為我什至不知道“WAL”或它們的文件,或者它們可能被同一集群中的所有數據庫共享,這似乎來自 Microsoft SQL 服務器,這看起來很奇怪和可怕。)

如果我重建其中一個數據庫,我應該刪除自基本備份以來的 WAL 文件——我該怎么做?

但我也不想擔心 WAL 文件的大小會無限增長。 我不想為了節省空間而被迫重建。 我能做些什么來防止這種情況發生?

我的本地集群包含一個用於我的項目的開發和測試數據庫,即從這些數據庫之一丟失數據是(或應該)沒什么大不了的。 即使必須重新創建集群本身和兩個數據庫,如果將兩個數據庫恢復到本地開發和測試的“工作”狀態比其他方式更容易的話,這也不是問題。

換句話說,我不關心這兩個數據庫中的數據。 我將確保——與 WAL 歸檔分開——我可以將任一數據庫恢復到足以滿足我需求的 state。

另外,我想記錄(例如在代碼中)如何配置我的本地集群和兩個數據庫,以便同一項目的其他開發人員可以為他們的本地集群使用相同的設置。 這些集群都不同於托管生產數據庫的集群。

通常建議您讓第三方應用程序為您處理,而不是嘗試手動管理您的 WAL 文件。 有多種選擇,但pg_backrest是最流行的開源產品。

每個數據庫實例寫入其 WAL stream,切成 16MB 的段。

其他所有關系數據庫都做同樣的事情,甚至 Microsoft SQL 服務器(不同之處在於這些文件的名稱和組織)。

WAL 包含重放事務所需的物理信息。 將其想象為如下信息:“在文件 x 中,塊 2734,在偏移量 543 處更改 24 個字節,如下所示:...”

使用基本備份和此信息,您可以在基本備份結束后恢復數據庫生命周期中的任何給定時間點。

每個 PostgreSQL 集群都會寫入自己的“WAL 流”。 這些文件以從不重復的長而奇怪的十六進制數字命名,因此不存在集群的后續 WAL 段與同一集群的早期 WAL 段發生沖突的危險。

您必須確保將 WAL 存檔到另一台機器,否則該練習將毫無用處。 如果您在同一台機器上有多個集群,請確保將它們歸檔到不同的目錄(或一般位置),因為不同集群的 WAL 段的名稱發生沖突。

關於保留:您希望將備份保留一段時間。 一旦你擺脫了一個基本備份,你也可以擺脫該基本備份之前的所有 WAL 段。 有一個pg_archivecleanup可執行文件可以幫助您擺脫所有比給定基本備份更舊的存檔 WAL 段。

我希望能夠通過從基本備份恢復並運行種子數據腳本來“構建”或“重建”這些數據庫中的任何一個。

basebackup 來自哪里? 如果您正在恢復 PROD 基礎備份並在其上運行種子腳本,那么您根本不需要在 test/dev 上進行 WAL 歸檔。 但是你得到的將是 PROD 的克隆,這意味着它不會在同一實例中具有用於測試和開發的不同數據庫,因為(可能)PROD 沒有。

如果基本備份來自其他地方,您必須描述它是什么。 這將決定您的 WAL 需求。

嘗試運行一個同時包含測試和開發的實例對我來說似乎是一種虛假的經濟。 只需運行兩個實例。

設置archive_mode=off將完全禁用 wal 存檔。 在 pg_wal 或 pg_xlog 目錄中仍然會有“活動的”WAL 文件,但是這些文件會在每個檢查點之后自動刪除/回收——除了控制檢查點發生的頻率(並確保你周圍沒有任何復制槽)。 WAL 存檔和實時 WAL 文件是不同的東西。 實時 WAL 文件是強制性的,需要自動從電源故障等情況中恢復。 WAL 存檔可能需要手動從硬盤崩潰或服務器完全破壞中恢復,並且在開發/測試中可能根本不需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM