將開發數據庫部署到實時系統的最佳實踐是什麼?
我在一個項目中的開發人員希望開發伺服器上的開發數據庫與實時伺服器上的實時數據庫同步,我認為這是一個壞主意。儘管如此,部署程式碼庫+數據庫的最佳方式是什麼?到目前為止,我對數據使用 rsync,對數據庫使用簡單的導出/導入。最終設置包括一個開發伺服器和 2 個 Live 伺服器(一個在美國,一個在歐洲,用於 HA/LB)。提出了 MariaDB 集群,但我不確定是否要在此設置中引入多主複製。尤其是因為 2 Live 伺服器之間的距離太遠了。此外,我必須設法為他們提供一個用於開發伺服器的 up2date 實時數據庫,因為開發顯然無法推動數據庫在其舊時存在(然後在導出/導入之間的時間會失去條目)。也許我在這裡沒有看到森林裡的樹木,它相當簡單。你們建議我應該怎麼做?
自從這開始變成評論交流以來,我想我會正確地寫下來。
首先,(經常)將 prod 數據庫同步到 dev 中是一個相當普遍的要求,這樣開發就可以在接近現實的情況下進行。但反過來呢?我不確定我是否見過這種情況,而且我絕對不會這樣做。
您正確地註意到,架構或數據庫內容更改通常需要更新產品數據庫以與開發中滾動的程式碼更改相一致。但是一個健全的發布過程通過開發過程來更新架構、上傳新內容和/或修改現有內容,並在程式碼發佈時部署這些過程來處理這個問題。
在我工作過的最受監管的環境中,更改實際上是腳本化的——一個開發人員製作了一份冗長的更改-測試-響應文件,詳細地說明了必須輸入的內容、將看到的內容、應該如何輸入測試,以及需要什麼結果。該腳本由第二位開發人員簽署,以確認它已針對乾淨的測試環境進行了測試,並由第三位開發人員執行,該開發人員尚未參與該流程。這確保了沒有人試圖變得聰明,並且在發生奇怪的事情時偏離滑雪道。通常,第四位開發人員會共同簽署腳本,表示他已經確認了聲稱看到和完成的所有事情。
該腳本還指定了一個經過測試的退出程序,如果在任何時候響應與腳本所說的預期不匹配,則由第三個開發人員執行。如果整個過程通過集合,產品環境通常會重新同步到開發和測試環境中。
我並不是說整個過程適合您的環境。只是它適用於某些人。但是您似乎想知道除了盲目地將 dev 同步到 prod 之外,如何處理架構和內容更改,所以我希望這能對此有所了解。如果您最終通過將 dev 同步到 prod 來進行部署,請確保您的備份是最新的,並且您的恢復過程已經過良好測試。你會需要它們的。