pg_verifybackup — 驗證 PostgreSQL 叢集的基線備份的完整性
pg_verifybackup
[選項
...]
pg_verifybackup 用於檢查使用 pg_basebackup
拍攝的資料庫叢集備份是否與伺服器在備份時生成的 backup_manifest
一致。備份可以儲存為“plain”或“tar”格式;這包括使用 pg_basebackup 支援的任何演算法壓縮的 tar 格式備份。但是,目前,WAL
驗證僅支援 plain 格式備份。因此,如果備份以 tar 格式儲存,則應使用 -n, --no-parse-wal
選項。
需要注意的是,pg_verifybackup 執行的驗證不包含也不可能包含執行伺服器在嘗試使用備份時執行的每一項檢查。即使您使用此工具,仍應進行測試恢復,並驗證由此產生的資料庫是否按預期工作,並且它們是否包含正確的資料。但是,pg_verifybackup 可以檢測到許多由於儲存問題或使用者錯誤而常見的問題。
備份驗證分四個階段進行。首先,pg_verifybackup
讀取 backup_manifest
檔案。如果該檔案不存在、無法讀取、格式錯誤、未能與備份目錄的 pg_control
的系統識別符號匹配,或者其自身內部校驗和驗證失敗,pg_verifybackup
將以致命錯誤終止。
其次,pg_verifybackup
將嘗試驗證磁碟上當前儲存的資料檔案是否與伺服器要傳送的資料檔案完全相同,但有一些例外情況將在下文描述。將檢測到多餘的檔案和丟失的檔案,但有一些例外。此步驟將忽略 postgresql.auto.conf
、standby.signal
和 recovery.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
將在檢測到問題後繼續檢查備份,並將報告檢測到的所有問題作為錯誤。
-F format
--format=format
指定備份的格式。format
可以是以下之一
p
plain
備份由與源伺服器資料目錄和表空間具有相同佈局的普通檔案組成。
t
tar
備份由 tar 檔案組成,這些檔案可能經過壓縮。有效的備份包括名為 base.tar
的主資料目錄檔案、pg_wal.tar
中的 WAL 檔案,以及每個表空間的單獨 tar 檔案,檔名基於表空間的 OID。如果備份經過壓縮,則會將相關的壓縮副檔名新增到每個檔名末尾。
-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
嘗試解析儲存在指定目錄中的 WAL 檔案,而不是 pg_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
的基線備份,將清單移到備份目錄之外的某個位置,並驗證備份
$
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
如果您在文件中看到任何不正確的內容、與您對特定功能的體驗不符的內容,或者需要進一步澄清的內容,請使用 此表單 報告文件問題。