2011-07-07 40 views
5

我有一個腳本,它是部署過程的一部分,用於將數據庫更改推送到生產服務器。如果腳本由於某種原因(較新的更新)破壞了我的數據,則很難恢復。如何將數據庫更改部署到Live Server?

解決此問題的一種方法是在更新時關閉用戶的應用程序,因此如果發生問題,請返回到部署前的備份。

但是我聽說過其他人的部署和保持他們的網站生活......你會如何去做這件事,如果你失敗了,你怎麼能恢復自部署之前進行備份以來的數據?

回答

1

這是一個棘手的問題,就像數據庫管理中的許多事情一樣。基本上有三種方法可以解決這個:不惜一切代價

  1. 避免失敗。
  2. 鎖定一切(並使升級非常快)。
  3. 可以丟失數據。

如果您有一個複雜的系統,根據這些或類似的類別隔離您的組件。

有一個分段系統來測試升級。分期系統或多或少是生產系統的副本;它與測試系統是分開的。另一件事是如果您需要重放數據,則可以使用審計或日誌記錄系統。

真正的問題是,如果您稍後注意到您的升級有問題。然後你很搞砸了。

0

你的數據庫有多大?你能承受失去的數據,而客戶正在使用它,而你必須去備份之前更新?每個部署計劃都涉及到某些地方的妥協,並且您必須決定哪些妥協對於您想要執行的操作而言最不痛苦。

對於只運行pgsql的簡單網站,您可以斷開客戶端連接,並在一個大型事務中運行整個更新。如果任何部分失敗,整個事情就會回滾,就像你從未做過任何事情。可悲的是,這對其他dbs來說並不完全一樣,但是使用閃回或其他任何oracle調用它可以得到類似的結果。

對於在複製的數據庫服務器集上運行的更大,複雜的網站,情況變得更加複雜得多。在我工作的地方,我們使用過Slony,並且在部署DDL更改時不會很好地與其他人一起玩,並且在部署DDL時幾乎要讓所有客戶脫機。但是,即使數據庫接近1TB,停機時間也只需幾分鐘即可完成。

相關問題