我正在爲Google Compute Engine上運行的PostgreSQL實例設置每日備份(使用持久磁盤快照),並且其數據目錄位於持久磁盤上。現在使用持久磁盤備份PostgreSQL的安全方式
,根據Persistent Disk Backups博客文章,我應該:
- 停止我的應用程序(PostgreSQL的)
fsfreeze
我的文件系統,以防止進一步的修改和刷新未決的數據寫入磁盤- 採取持久磁盤快照
- 解凍我的文件系統
- 啓動我的應用程序(PostgreSQL)
這顯然帶來了一些停機時間(每個步驟在我的測試中花費幾秒到幾分鐘),我想避免或至少減少。
爲了確保快照一致(我假設在文件系統級別),必須標記博客文章的步驟,但我對乾淨的文件系統不感興趣,我有興趣能夠從這樣的快照中恢復PostgreSQL實例中的所有數據。
PostgreSQL uses fsync當提交時,所有PostgreSQL承認已提交的數據已經到達磁盤(fsync goes to the disk)。
爲了討論的目的,我覺得很有道理,比較了永久磁盤快照沒有停止PostgreSQL和不使用fsfreeze
與磁盤剛剛經歷了意外斷電文件系統上的。
在閱讀https://wiki.postgresql.org/wiki/Corruption和http://www.postgresql.org/docs/current/static/wal-reliability.html之後,我的理解是,所有承諾數據都應該在意外停電時倖存下來。
我的問題是:
是我與意外斷電比較準確的還是我失去了什麼?
我可以在不停止PostgreSQL的情況下拍攝快照,並且不使用
fsfreeze
或者我缺少一些副作用?如果上面的答案是我不應該只拍一張快照,那麼創建另一個永久磁盤是否會習慣性地定期使用
pg_dumpall(1)
來轉儲整個數據庫,然後快照那個其他永久磁盤?
你能詳細說說2)嗎?你說沒有100%的保證,它會一直工作,但具體會出什麼問題?爲什麼要停止PostgreSQL並使用fsfreeze保證它始終有效? – Michael
假設您正在使用的軟件中存在漏洞。或者磁盤上的某些I/O錯誤未被修復。你只會發現你是否測試了快照。 –
@ A.Scherbaum是的,如果軟件的任何部分存在錯誤,則所有投注都將關閉。是的,我同意測試快照是一個完美的解決方案。然而,我問是否有理由停止PostgreSQL和使用fsfreeze比僅僅拍攝快照更好,**假設沒有錯誤**。我只是想了解該建議背後的理由:)。 – Michael