2011-08-03 40 views
2

我在寫一個正在使用數據庫(當前是MySQL 4)來存儲數據的應用程序。保持數據庫架構最新

我很可能會稍後以更新的形式對此進行更改以添加其他數據。更新應用程序很簡單,實質上是覆蓋新程序文件。但是,我如何去更新數據庫模式呢?

數據庫是遠程的,所以我的應用程序可能存在於幾個地方,所以在安裝程序中簡單地轉儲ALTER和CREATE語句會導致多次更改,並且我被明確要求提供自動解決方案允許應用程序副本在過渡期內進行更新,並使架構更新自動進行。

我考慮在啓動時檢查模式以查找缺失的表和列,並根據需要添加它們,但這看起來不是一個乾淨的解決方案。我也考慮過在數據庫中添加某種「模式版本」數字,但是看不到任何方式做到這一點,即使用一個int「Version」列的單行表格,這似乎也不是一個好方法。

回答

5

我強烈推薦Liquibase。它確實有用 - 我已經使用它,並且印象非常深刻。

從本質上講,它將自己的日誌保存在數據庫上運行,並且只有在尚未運行/需要時才運行它們。它是由XML驅動的,並允許您使用可選的執行前和執行後語句和條件。您將XML文件檢入到源代碼控制中,並從構建工具中調用它。它甚至適用於駕駛生產版本。

這很神奇。

+0

是的我可以第二。請參閱下面的答案。 – Caps

0

正如您所建議的那樣,添加一個表格,用於存儲數據庫模式的當前版本。然後,您只需在上次架構更新和新版本之間應用更改,並相應地設置新版本號。我已經完成了這個更新我們的生產數據庫約300次,它只是起作用。

5

與其將滾動自己的系統用於版本化數據庫,可能需要查看現有框架,以便爲您管理它。

我使用liquibase並使用maven插件集成到我的構建中。值得檢查!

+0

+1 Liquibase roolz – Bohemian

+0

如果你對xml沒有過敏,liquibase非常適合:P –

+0

實際上,我*對XML過敏,但它仍然值得 – Bohemian