支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel

pg_verifybackup

pg_verifybackup — 驗證 PostgreSQL 叢集基本備份的完整性

概要

pg_verifybackup [option...]

描述

pg_verifybackup 用於根據伺服器在備份時產生的 backup_manifest 檔案,檢查使用 pg_basebackup 取得的資料庫叢集備份的完整性。 備份必須以 "plain" 格式儲存;在提取 "tar" 格式備份後,才可以檢查它。

重要的是要注意,pg_verifybackup 執行的驗證並不包含,也無法包含執行中伺服器嘗試使用備份時將執行的所有檢查。 即使您使用此工具,您仍然應該執行測試還原,並驗證產生的資料庫是否按預期工作,以及它們是否包含正確的資料。 但是,pg_verifybackup 可以檢測到由於儲存問題或使用者錯誤而經常發生的許多問題。

備份驗證分四個階段進行。 首先,pg_verifybackup 讀取 backup_manifest 檔案。 如果該檔案不存在、無法讀取、格式錯誤、無法使系統識別碼與備份目錄的 pg_control 相符,或無法針對其自身的內部校驗和進行驗證,則 pg_verifybackup 將以嚴重錯誤終止。

其次,pg_verifybackup 將嘗試驗證目前儲存在磁碟上的資料檔案與伺服器打算傳送的資料檔案完全相同,但有一些例外情況,如下所述。 將會偵測到額外的和遺失的檔案,但有一些例外情況。 此步驟將忽略 postgresql.auto.confstandby.signalrecovery.signal 的存在或不存在,或對其的任何修改,因為預計這些檔案可能已在進行備份的過程中建立或修改。 它也不會抱怨目標目錄中的 backup_manifest 檔案,或 pg_wal 內部的任何內容,即使這些檔案不會列在備份資訊清單中。 僅檢查檔案;不驗證目錄的存在或不存在,除非間接驗證:如果目錄遺失,則它應包含的任何檔案也必然會遺失。

接下來,pg_verifybackup 將對所有檔案進行校驗和計算,將校驗和與資訊清單中的值進行比較,並針對計算出的校驗和與儲存在資訊清單中的校驗和不符的任何檔案發出錯誤。 此步驟不會對在上一步中產生錯誤的任何檔案執行,因為已知它們已經存在問題。 在上一步中忽略的檔案也會在此步驟中忽略。

最後,pg_verifybackup 將使用資訊清單來驗證恢復備份所需的預寫日誌記錄是否存在,並且可以讀取和解析。 backup_manifest 包含有關需要哪些預寫日誌記錄的資訊,並且 pg_verifybackup 將使用該資訊來呼叫 pg_waldump 以解析這些預寫日誌記錄。 將使用 --quiet 旗標,以便 pg_waldump 僅報告錯誤,而不產生任何其他輸出。 雖然此驗證級別足以檢測明顯的問題,例如遺失的檔案或內部校驗和不符的檔案,但它們不夠廣泛,無法檢測嘗試恢復時可能發生的每個可能問題。 例如,產生具有正確校驗和但指定無意義動作的預寫日誌記錄的伺服器錯誤無法透過此方法檢測到。

請注意,如果存在恢復備份不需要的額外 WAL 檔案,則此工具不會檢查它們,但可以使用單獨呼叫 pg_waldump 來達到此目的。 另請注意,WAL 驗證是特定於版本的:您必須使用 pg_verifybackup 的版本,因此也必須使用與要檢查的備份相關的 pg_waldump 版本。 相反,資料檔案完整性檢查應適用於產生 backup_manifest 檔案的任何伺服器版本。

選項

pg_verifybackup 接受以下命令列引數

-e
--exit-on-error

一旦偵測到備份有問題,立即退出。 如果未指定此選項,則即使偵測到問題,pg_verifybackup 也會繼續檢查備份,並將偵測到的所有問題報告為錯誤。

-i path
--ignore=path

忽略指定的檔案或目錄,在將備份中實際存在的資料檔案清單與 backup_manifest 檔案中列出的檔案清單進行比較時,應將其表示為相對路徑名稱。 如果指定了目錄,則此選項會影響以該位置為根的整個子樹。 如果相對路徑名稱與指定的路徑名稱相符,則會抑制有關額外檔案、遺失檔案、檔案大小差異或校驗和不符的抱怨。 可以多次指定此選項。

-m path
--manifest-path=path

使用指定路徑上的資訊清單檔案,而不是位於備份目錄根目錄中的資訊清單檔案。

-n
--no-parse-wal

不要嘗試解析從此備份恢復所需的預寫日誌資料。

-P
--progress

啟用進度報告。 啟用此功能將在驗證校驗和時提供進度報告。

此選項不能與選項 --quiet 一起使用。

-q
--quiet

成功驗證備份後,不要列印任何內容。

-s
--skip-checksums

不要驗證資料檔案校驗和。 仍會檢查檔案的存在或不存在以及這些檔案的大小。 這樣會快很多,因為不需要讀取檔案本身。

-w path
--wal-directory=path

嘗試解析儲存在指定目錄中而不是在 pg_wal 中的 WAL 檔案。 如果備份儲存在與 WAL 封存不同的位置,這可能會很有用。

還有其他選項可用

-V
--version

列印 pg_verifybackup 版本並退出。

-?
--help

顯示關於 pg_verifybackup 命令列引數的說明並結束。

範例

建立 mydbserver 伺服器的基礎備份並驗證備份的完整性

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$ pg_verifybackup /usr/local/pgsql/data

建立 mydbserver 伺服器的基礎備份,將 manifest 移動到備份目錄之外的某個位置,然後驗證備份

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/backup1234
$ mv /usr/local/pgsql/backup1234/backup_manifest /my/secure/location/backup_manifest.1234
$ pg_verifybackup -m /my/secure/location/backup_manifest.1234 /usr/local/pgsql/backup1234

驗證備份,同時忽略手動新增到備份目錄中的檔案,並且跳過校驗和驗證

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$ edit /usr/local/pgsql/data/note.to.self
$ pg_verifybackup --ignore=note.to.self --skip-checksums /usr/local/pgsql/data

提交更正

如果您在文件中看到任何不正確、與您特定功能的使用體驗不符或需要進一步澄清的內容,請使用此表單回報文件問題。