2011年8月19日金曜日

開発環境と実行環境のデータベーススキーマを同期する(MySQL)

■ 内容
開発環境のデータベースで修正した項目の内容を実行環境のデータベースに反映する作業というのは結構な頻度であると思います。
一つ二つの変更であれば手作業でやってもいいのですが、数が多くなってくると面倒だったり、入力ミスが起きたりしてトラブルの原因になる場合が多いと思います。

私も今までは両環境のデータベースをダンプ比較し、手動で更新していたのですが、大きめの仕様変更が入ってくるようになり、手間になってきたのでどうしようか調べてみたところ、MySQLWorkbenchで出来るようなので試してみました。 それの備忘録。

■ 用意するもの
MySQLWorkBench(5.2.34)

■ 前提
開発環境と実行環境に接続できる状態()

■ ざっくりと説明
開発側のデータベースを読み込んで一時データを作成、それと実行環境データベースを比較して、差分をSQL文にして同期

■ 作業
1,モデルの作成
MySQL WorkBenchを起動して赤枠内の「Create EER Model From Existing Database」をクリック
image
2,開発環境のデータベースへ接続
Stored Connectionから定義済みのコネクションを選択するか、接続情報を入力して「Next」をクリック
image

データベースの解析が成功すると以下の画面になるので「Next」をクリック
エラーが発生した場合は接続情報やデータベースの定義を見直してください
image   
対象のスキーマにチェックを入れて「Next」をクリック
image 

何かの解析が成功すると以下の画面になるので「Next」をクリック
image
対象のテーブル等の情報が表示されるので「Place imported objects on a diagram」のチェックを外して「Execute」をクリック
※ ここをチェック入れたままにするとER図が生成されて大変なことになります(個人的に)
image 
成功したら「Next」をクリック
image
「Finish」をクリック
image
モデルが出来ました。
image

3,実行環境への更新
メニュー「Database」-「Synchronize Model...」をクリック
image
Stored Connectionから定義済みのコネクションを選択するか、接続情報を入力して「Next」をクリック
image
更新先のスキーマを選択して「Next」をクリック
image
「Next」をクリック
image
差分が表示されるので確認して「Next」をクリック
同期したくないテーブルがある場合は選択して「Ignore」ボタンをクリックして無効にします。
image
同期用のSQL文が生成されるので、そのまま同期を開始する場合は「Execute」、一度ファイルに保存する場合は「Save to File」をクリック
image
以上で同期が行われ、開発環境での変更が実行環境へ反映されます。

エラーが発生する場合は主キーが変とか、デフォルト値がおかしいとかメッセージが出ますのでそれに合わせる必要がありそうです。

また、当然の事ですが、何かあってもいいようにバックアップを取った後でやることをお勧めします。