我很難找到如何在開發,測試和生產服務器之間管理數據庫模式和數據的好例子。如何在開發,測試和生產中管理數據庫?
這是我們的設置。每個開發人員都有一臺運行我們的應用和MySQL數據庫的虛擬機。做他們想做的事是他們個人的沙箱。目前,開發人員將對SQL模式進行更改,並將數據庫轉儲到他們提交到SVN的文本文件中。
我們希望部署持續集成開發服務器,該服務器始終運行最新的提交代碼。如果我們現在這樣做,它會爲每個構建從SVN重新加載數據庫。
我們有一個運行「發佈候選」的測試(虛擬)服務器。部署到測試服務器目前是一個非常手動的過程,通常需要從SVN加載最新的SQL並對其進行調整。另外,測試服務器上的數據不一致。您最終得到最後一名開發人員在其沙箱服務器上提供的任何測試數據。
凡是發生故障的部分都是生產部署。由於我們無法用測試數據覆蓋實時數據,因此需要手動重新創建所有模式更改。如果有大量的模式更改或轉換腳本來操縱數據,這可能會變得非常多毛。
如果問題只是模式,它會是一個更容易的問題,但是在開發過程中還會更新數據庫中的「基礎」數據,例如安全和權限表中的元數據。
這是我在邁向持續集成和一步構建時遇到的最大障礙。 你解決了嗎?
後續問題:如何跟蹤數據庫版本,以便知道要運行哪些腳本以升級給定的數據庫實例?像蘭斯這樣的版本表是否在標準程序下方提到?
感謝您參考塔倫蒂諾。我不在.NET環境中,但我發現它們的DataBaseChangeMangement wiki page非常有幫助。特別是這Powerpoint Presentation (.ppt)
我打算編寫一個Python腳本,檢查給定目錄中*.sql
腳本的名稱與數據庫中的表的名稱,並根據表單形式運行那些不存在的名稱文件名的第一部分。如果這是一個非常簡單的解決方案,正如我懷疑的那樣,那麼我會在這裏發佈它。
我有一個工作腳本。它處理初始化數據庫,如果它不存在並根據需要運行升級腳本。還有用於擦除現有數據庫並從文件導入測試數據的開關。它大約有200行,所以我不會發布它(儘管如果有興趣,我可能會把它放在pastebin上)。
相關:HTTP:// stackoverflow.com/questions/52583/best-tool-for-synchronizing-mysql-databases – 2012-08-21 09:31:36