簡體   English   中英

如何將數據庫更改部署到實時服務器?

[英]How to Deploy Database Changes to a Live Server?

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

解決此問題的一種方法是在更新時向用戶關閉應用程序,因此如果出現問題,只需將 go 回到我在部署之前所做的備份。

但是我聽說其他人部署並保持他們的站點處於活動狀態......您將如何 go 這樣做,如果您失敗了,您如何恢復自從您在部署之前備份后傳入的數據?

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

  1. 不惜一切代價避免失敗。
  2. 鎖定所有內容(並使升級非常快)。
  3. 丟失數據沒關系。

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

有一個登台系統來測試升級。 暫存系統或多或少是生產系統的副本; 它與測試系統分開。 另一件事是有一個審計或日志系統,如果您需要重放數據,可以參考它。

真正的問題是,如果您在很久以后才注意到您的升級有問題。 那你就完蛋了。

你的數據庫有多大? 您能否承擔在客戶使用數據時以及在您不得不 go 進行備份之前丟失更新的數據? 每個部署計划都在某處涉及一些妥協,你必須決定哪些妥協對你想做的事情最不痛苦。

對於只運行 pgsql 的簡單網站,您可以斷開客戶端,並在一個大事務中運行整個更新。 如果任何部分失敗,整個事情就會回滾,就像你什么都沒做一樣。 可悲的是,這對其他數據庫並不完全相同,但是使用閃回或任何 oracle 調用它,您可以獲得類似的東西。

對於在復制的數據庫服務器集之上運行的更大、更復雜的網站,事情會變得更快更復雜。 在我工作的地方,我們使用過 Slony,在部署 DDL 更改時與其他人一起玩並不好,而且在部署 DDL 時幾乎必須讓所有客戶離線。 然而,對於我們來說,停機時間是用分鍾來衡量的,即使數據庫的大小接近 1TB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM