2011-04-03 48 views
2

我們經常有這樣的場景:MySQL的同步 - 尋找忠告這種特定情況下

  • 我們有我們的生產數據庫。
  • 我們認識到(或客戶端請求)架構更改。
  • 我們在當地進行更換。
  • 我們需要上傳新的模式而不會丟失數據。

爲了什麼我到目前爲止閱讀,我發現,我們可以:

  • 使用GUI,使這個同步。
  • 使用某種顛覆來追蹤數據庫的變化。
  • 創建一個數據庫表來跟蹤更改。
  • 在部署(bash過程我相信?)時使用某種自動化任務。

圖形用戶界面是一個不錯的方法,因爲它是一個簡單的方法。 但不是自動的,我們不能恢復到以前的「版本」。

Subversion我們可以得到不同版本的數據庫模式。 但是理解和創建工作流程可能非常複雜,這個工作流程一方面可能包含模式,另一方面可能包含數據。

SQL表的方法似乎很難理解,我甚至無法看到那裏的好和壞的部分。

bash自動化任務似乎是一個非常好的方法,因爲如果配置良好,它會很好地部署到部署工作流程中。但似乎我們無法控制數據庫的舊版本。


真相被告知,我沒有看到一個非常重要的需要有在任何顛覆系統數據庫,因爲,希望這並不是說我們每天都發生變化,就像我們的應用程序的其他文件的東西。

有了這一切,我傾向於尋找一個bash進程可能,在部署,做兩件事情:

  1. 檢索從生產服務器的數據。 (因爲它會在那裏存在最新的更新數據。)

  2. 用本地更新遠程模式。 (因爲在本地我們會先改變我們的模式。)

你覺得呢?你有什麼建議?有沒有處理這個問題的標準方法(在我看來)是常見的情況?

+0

想知道這個問題的答案,如果我有業力提供獎勵。 – Johan 2011-04-12 17:06:53

回答

0

我最喜歡的是Ruby on Rails用於數據庫遷移的一般方法。在rails中,您將創建一個使用特定領域語言的遷移文件。但是,這個想法是每個遷移都有一個版本號。另外,每次遷移都包括實施和回滾步驟。最後,執行遷移時,會更新數據庫中用於標識模式版本的本地表以標識數據庫的當前版本。這些遷移文件被檢入到源代碼管理中。

所以,我建議做以下幾點:

  1. 創建一個模式變更實施和回滾腳本每個模式變化
  2. 把這些手稿版本號
  3. 每個腳本應驗證數據庫當前是預期版本,以確保架構更改按正確順序執行
  4. 創建一個主腳本,用於詢問數據庫的當前版本,接受所需的數據庫版本並執行第e正確的實現或回滾腳本來獲取數據庫模式到該版本

因此,如果數據庫當前版本爲14,並且您使用期望的版本17調用主腳本,它將知道執行架構更改腳本對於版本15,16和17.如果數據庫當前是15並且所需版本是12,那麼它將知道執行版本15,14和13的回滾腳本。

所有這些腳本都應該是簽入源代碼管理。