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
以上で同期が行われ、開発環境での変更が実行環境へ反映されます。

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

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

2011年7月8日金曜日

Linuxビギナでも30分で始められるRedMine+Mercurial

長くなったのでまとめ

Linuxビギナでも30分で始められるRedMine+Mercurial(1)
仮想マシンの作成

Linuxビギナでも30分で始められるRedMine+Mercurial(2)
RedMineのインストール1

Linuxビギナでも30分で始められるRedMine+Mercurial(3)
RedMineのインストール2

Linuxビギナでも30分で始められるRedMine+Mercurial(4)
Webminの初期設定

Linuxビギナでも30分で始められるRedMine+Mercurial(5)
日本語文字化け対策

Linuxビギナでも30分で始められるRedMine+Mercurial(6)
MySQLの設定

Linuxビギナでも30分で始められるRedMine+Mercurial(7)
MySQLのテーブル書き換え

Linuxビギナでも30分で始められるRedMine+Mercurial(7)

Linuxビギナでも30分で始められるRedMine+Mercurial(6) の続き

9,WindowsからMySQLテーブルの書き換え


Windows側でMySQL Administrator を起動し、先ほど作成した情報でログインします。
2011-07-08_132906
画面左のメニューより「バックアップ」を選択し、
画面下の「New Project」ボタンを選択し、新規プロジェクトを作成
Schemata で 「railsapp_production」 を選択して、
画面右下の「Execute Backup Now」をクリックします。
2011-07-08_133013

適当なところに保存します。
 2011-07-08_1330512011-07-08_133100
書き出されたファイルをテキストエディタで開きます、Windowsのメモ帳では改行が変になったのでEmEditorや秀丸といったエディタが良いと思われます。
2011-07-08_133151

以下のキーワードを一括置換して保存します。
置換前
置換後
ENGINE=MyISAM
ENGINE=InnoDB
DEFAULT CHARSET=latin1
DEFAULT CHARSET=utf8


MySQL Administrator の画面左より「リストア」を選択し、
右下の「Open Backup File」を選択します。
2011-07-08_133254

先程のファイルを選択
2011-07-08_133302
画面右下の「Start Restore」を選択してMySQLに書き戻します。
2011-07-08_133309

これまでの作業でRedMineのデータテーブルが日本語対応されます。

2011-07-08_134015 

Mercurialの使い方については別途予定

Linuxビギナでも30分で始められるRedMine+Mercurial(6)

  Linuxビギナでも30分で始められるRedMine+Mercurial(5)の続き

8,MySQLの設定

上のメニューから「サーバ」-「MySQLのデータベースサーバ」を選択します。
2011-07-08_132521

インストール時に決めたrootのパスワードを入れてログインします。
2011-07-08_132536
画面下にある「MySQLサーバの設定」を選択します。
2011-07-08_132617
「MySQL server listenning address」 を「Any」にして、
「Save and Restart MySQL」をクリックします。
こうすることで別PCからのデータベース接続が可能になります。

余談ですが、ここの設定を忘れて1時間ほど悩んでいました。

2011-07-08_132712

「ユーザの許可」を選択します
2011-07-08_132737 

「新規ユーザを作成」を選択します
2011-07-08_132749
 
ユーザ名、パスワードを設定して「保存」を選択します
2011-07-08_132815
項目
ユーザ名 develop
パスワード 適当に
ホスト 任意 ※1
許可 テーブル データを選択
テーブル データを挿入
テーブル データを更新
テーブル データを削除
テーブルを作成
テーブルを削除
テーブルの代替

次へ
Linuxビギナでも30分で始められるRedMine+Mercurial(7)

Linuxビギナでも30分で始められるRedMine+Mercurial(5)

Linuxビギナでも30分で始められるRedMine+Mercurial(4) の続き

6,MySQLのデフォルト文字コード変更

画面上のメニューから「Tools」-「ファイルマネージャ」を選択
2011-07-08_131811

セキュリティの警告が表示されるのでチェックを入れて「はい」を選択
2011-07-08_131829
ファイルマネージャが起動するので
左のツリーから /etc/mysql/my.cnf を選択して
画面上部のメモ帳みたいなボタンを押します。
(文字化けは気にしない) 
2011-07-08_131928

メモ帳のようなものが起動するので、以下の三箇所にデフォルト文字コードの定義を追記して、右下の「Save &  Close」を選択

[mysqld]
default-character-set=utf8

[mysqldump]
ault-character-set=utf8

[mysql]
default-character-set=utf8
2011-07-08_132130 2011-07-08_132215
7,RedMineの文字化け対策

左のツリーから /var/www/railsapp/app/controllers/application_controller.rb
を選択してメモ帳みたいな奴を起動
2011-07-08_132415

以下の赤文字の部分を追記して「Save & Close」

class ApplicationController < ActionController::Base  
$KCODE="UTF8"
include Redmine::I18n

2011-07-08_132130


次へ
Linuxビギナでも30分で始められるRedMine+Mercurial(6)

Linuxビギナでも30分で始められるRedMine+Mercurial(4)

Linuxビギナでも30分で始められるRedMine+Mercurial(3)  の続き

前回までの作業でとりあえず起動するようにはなったのですが、
登録した日本語が文字化するという問題があるので対策をしていきます。

なお、今回はタイトルのとおりLinuxビギナを対象としていて、
コマンドラインからどうこうするのは考えていませんのでご了承ください、
というかコマンドラインからの方法がイマイチ分からないです。

2011-07-08_131404

5,Webminの初期設定

先の画面に表示されているWebminのアドレス(http://IPアドレス:12321)をブラウザに入力して接続します。 以下の様に警告画面が出ますが「このまま続行」を押してください。
2011-07-08_131554 
 
Webminのログイン画面が表示されますので、インストール時に設定した情報でログインします。
2011-07-08_131607

画面左上のメニューバーより「Webmin」-「Webmin Configuration」を選択します。
 2011-07-08_131640

「Language」を選択します。
2011-07-08_131653

Webmin Language で「Japanese (JA_JP.UTF-8)」を選択して、「Change Language」を選択します。
2011-07-08_131718

日本語になりました。
2011-07-08_131736

次へ
Linuxビギナでも30分で始められるRedMine+Mercurial(5)

Linuxビギナでも30分で始められるRedMine+Mercurial(3)

Linuxビギナでも30分で始められるRedMine+Mercurial(2) の続き

4, 初期設定

Ubuntuのrootパスワードを設定
2011-07-08_131152


確認のためもう一度入力
2011-07-08_131204 

MySQLのrootパスワードを設定
2011-07-08_131212

確認のためもう一度入力
2011-07-08_131220

有償機能のキーを聞いてくるので、とりあえずエンター
2011-07-08_131231 

更新を設定するか聞いてくるので、Tabキーで「Skip」を選択してエンター
ちなみにここで「Install」を選択すると、色々更新されるようです。
2011-07-08_131241

以上でインストールが完了し、RedMineが設定された仮想マシンが起動します。
2011-07-08_131404

この状態で以下のアプリケーションが使えるようになっています。
RedMine プロジェクト管理(TiDD)
Web In A Shell ブラウザ版シェル(コマンドプロンプトみたいなもの)
Webmin ブラウザからUbuntuを管理するもの
SubVersion バージョン管理
Git バージョン管理
Bazaar バージョン管理
Mercurial バージョン管理



表示されているアドレスをブラウザに入力すると、RedMineの初期画面が表示されます。


2011-07-08_131500

ただ、この状態ではMySQLが初期状態のままで、日本語のプロジェクト名やチケットを登録すると文字化けするので、それの対策を行います。


区切りがいいので次へ
Linuxビギナでも30分で始められるRedMine+Mercurial(4)