2012-01-27 200 views
1

這是PostgreSQL的時候嘗試斷電後啓動時會發生什麼:修復損壞的PostgreSQL數據庫

2012-01-27 18:00:44 MSK LOG: database system was interrupted while in recovery at 2012-01-27 18:00:16 MSK 
2012-01-27 18:00:44 MSK HINT: This probably means that some data is corrupted and you will have to use the last backup for recovery. 
2012-01-27 18:00:44 MSK LOG: database system was not properly shut down; automatic recovery in progress 
2012-01-27 18:00:44 MSK LOG: consistent recovery state reached at 17/762C39B8 
2012-01-27 18:00:44 MSK LOG: redo starts at 17/761F6A40 
2012-01-27 18:00:44 MSK FATAL: invalid page header in block 311757 of relation base/26976/27977 
2012-01-27 18:00:44 MSK CONTEXT: xlog redo insert: rel 1663/26976/27977; tid 311757/44 
2012-01-27 18:00:44 MSK LOG: startup process (PID 392) exited with exit code 1 
2012-01-27 18:00:44 MSK LOG: aborting startup due to startup process failure 

知道我不是運氣不好,有一個命令,我可以用它來修復在這種情況下的數據庫。只要數據庫變得一致,交易的最後幾個小時是否消失並不重要。

請告訴我該怎麼做。

+0

屬於dba.stackexchange.com – Aaron 2012-01-27 14:45:32

回答

3

取決於你願意放棄多少數據。

您可以將zero_damaged_pages設置爲在您的postgresql.conf配置文件中,然後嘗試 - 但導致數據丟失。它可能工作或可能無法工作。

如果你想嘗試,總是開始通過關閉Postgres數據庫,並以它的一個完整的文件系統複製(如焦油)。因爲它可能仍然是你擁有的最小的破碎版本。然後,一旦設置完成,立即運行pg_dump,擦除集羣並恢復轉儲。並且絕對不要在zero_damaged_pages的默認情況下運行新羣集,請記住將其關閉!

然後爲新羣集設置適當的時間點恢復備份。

1

從上次備份中恢復,然後從那裏重新應用日誌。

除非你有最後的備份和所有日誌,那麼你就搞砸了。

+0

我沒有備份,但我知道可以做任何事情。 – 2012-01-27 15:22:23