如何正確執行恢復?
所以,讓我給你一些背景。
幾週前我開始為這家公司工作,我是一名 jr 系統管理員,而不是數據庫管理員。事實上,我的老闆也是同時開始的。以前的老闆不知道他在做什麼,所以公司聘請我們來修理很多東西。
我們有一個合作夥伴開發了我們在這裡使用的主要係統,並且數據庫(postgres)備份程序到那時已經自動化(老老闆不知道該怎麼做)。我的老闆問這個合作夥伴備份/恢復常式是否有效,但回答不自信,所以他問我是否可以進行測試。
我以前在數據庫中做過備份/恢復,所以沒問題,但是當我得到備份文件時,令我驚訝的是,它不是一個 pg_dump 文件,而是一堆名為“base”、“pg_clog”、“ pg_logical’ 等等。所以,他們的備份只是一個複制所有數據庫文件夾的 shell 腳本。僅該基本文件夾就超過 32Gb。
我的問題是:這是進行數據庫備份的標准或可接受的方式嗎?我問是因為我想知道如果伺服器發生致命的硬體故障,我將如何從這個文件夾中恢復另一個伺服器中的這個數據庫?
它可能是一個“冷備份”,有人關閉數據庫並複制 PGDATA 目錄文件。如果是這種情況,它應該是一個有效的備份。您可以通過將整個目錄複製到與數據庫伺服器具有相同體系結構的某個測試機器上來測試它,將該測試機器從網路中取出(以防它在您啟動它時嘗試伸出手並觸摸某人),然後開始它了。您還可以
pg_controldata
針對此目錄執行程序。如果在進行備份時數據庫已關閉,您將看到如下一行:Database cluster state: shut down
這表明它是冷備份並且應該是有效的,但它不是確鑿的證據。
它可能是正確的熱備份。如果是這種情況,該目錄應該有一個名為
backup_label
. 但同樣,這並不能確定備份是否完整且正確進行。您需要測試備份。熱備份可以是完全獨立的,所有需要的 WAL 都位於 pg_xlog 中。或者,它只能與外部 WAL 存檔一起使用。最後,可能是有人
cp -r
在數據庫服務時執行或類似操作數據庫,而沒有經過適當的步驟,並創建了無用的備份。您應該能夠查看備份腳本以至少了解它正在嘗試做什麼,這應該比從頭開始對備份目錄進行取證檢查更容易。