Postgresql

刪除wal文件後如何解決postgresql問題?

  • August 11, 2017

我在我的 postgresql 配置上打開了 archive_mode 以測試備份伺服器。而且由於 wal 文件佔用了大量磁碟空間,因此在測試後我將其關閉並刪除了 wal 文件。當我嘗試重新啟動 postgresql 時,出現以下錯誤。

root@hooshang:/etc/postgresql/9.1/main# /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.1 database server
* The PostgreSQL server failed to start. Please check the log output:
2014-10-16 13:15:28 IRST LOG:  database system was shut down at 2014-10-15 15:51:53 IRST
2014-10-16 13:15:28 IRST LOG:  could not open file "pg_xlog/00000001000007DC00000037" (log file 2012, segment 55): No such file or directory
2014-10-16 13:15:28 IRST LOG:  invalid primary checkpoint record
2014-10-16 13:15:28 IRST LOG:  could not open file "pg_xlog/00000001000007DC00000029" (log file 2012, segment 41): No such file or directory
2014-10-16 13:15:28 IRST LOG:  invalid secondary checkpoint record
2014-10-16 13:15:28 IRST PANIC:  could not locate a valid checkpoint record
2014-10-16 13:15:28 IRST LOG:  startup process (PID 17467) was terminated by signal 6: Aborted
2014-10-16 13:15:28 IRST LOG:  aborting startup due to startup process failure

我該如何解決這個問題?

您已通過從數據目錄中手動刪除文件而損壞了數據庫。切勿手動從數據目錄中刪除文件。

安全刪除 WAL

如果要刪除 WAL,要麼讓伺服器CHECKPOINT按時完成,要麼使用pg_archivecleanup. 請注意,伺服器將不再需要自動刪除 WAL,除非:

  • archive_mode已打開,但archive_command失敗了,因此伺服器會繼續重試存檔嘗試,直到它們成功或管理員干預;
  • 它仍然保存在wal_keep_segments
  • (在 9.4 中)複製槽仍然需要它。

如果這些都不適用,則CHECKPOINT(自動或通過 SQL 手動發出)將刪除目前不需要的所有 WAL。所以你不必手動刪除它。

在不尋常的情況下,您可能需要使用pg_archivecleanup,例如由於長時間歸檔失敗後由於 WAL 積累而導致磁碟空間不足。您可能決定接受您必須重新創建副本,因為丟棄了他們仍然需要的 WAL 並用於pg_archivecleanup釋放空間以使主伺服器執行。

但是你永遠不應該手動刪除 WAL 段。

使用歸檔的 WAL 進行恢復

如果您將存檔的 WAL 保存在其他地方,您可能只能將文件複製回pg_xlog,或recovery.conf使用 a 創建一個restore_command來執行此操作。有關詳細資訊,請參閱 PITR 和日誌傳送手冊。

在沒有歸檔 WAL 的情況下恢復

如果您在其他地方沒有這些 WAL 文件的副本,那麼如果您有最近的備份,則應該從備份中恢復,因為您已經損壞了數據庫。

如果您沒有備份,請按照損壞 wiki 頁面中的說明進行操作,並且僅在您製作了數據庫目前狀態的完整副本後,僅作為最後的手段,用於pg_resetxlog丟棄事務日誌並強制數據庫從不完整的交易開始。

然後,您必須pg_dump停止數據庫、停止它、initdb創建一個新數據庫並恢復到它。不要繼續使用您損壞的數據庫*。**永遠不要*繼續使用你曾經使用過的數據庫pg_resetxlog,除非萬不得已,否則永遠不要使用它。

引用自:https://dba.stackexchange.com/questions/80317