MySQL::Diff - MySQLのデータベースの差分を調べる
MySQLのデータベースの差分から、差分をなくすようなコマンドを自動生成するツールを探していたら、MySQL::Diffというモジュールを発見した。このモジュールにはmysqldiffというコマンドラインツールがついているので、通常はこちらを使うのが良いみたい。
開発環境と本番環境の差分を埋めるのにとても役立つ。すべての差分を表示してくれるわけではなく、テーブル定義に関する部分だけのようなので、トリガやインデックスについては、自分で設定する必要があるようです。
ドキュメントにはオプションの説明がないようなので、--helpコマンドで確認できる。
mysqldiff --help
まずデータベースのテーブル定義をmysqldumpで取得しましょう。今は開発環境にいて開発環境のデータベースサーバーに変更を加えていると仮定します。
mysqldump -d -uken db > db_devel
本番環境にはsshで接続できると仮定しましょう。そうするとsshでコマンドを実行してリダイレクトしましょう。
ssh ken@remotehost mysqldump -d -uken db > db_production
mysqldiffでは一時的にデータベースを利用するので、データベースの情報を指定する必要があります。
mysqldiff --host=localhost --user=ken --password=ppp db_production db_devel
するとdb_productionをdb_develにあわせるためのコマンドが出力されます。
## mysqldiff 0.43 ## ## Run on Sun Nov 27 15:57:54 2011 ## Options: user=root, debug=0 ## ## --- file: db_production ## +++ file: db_devel CREATE TABLE book ( id int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
db_productionとdb_develの順番を間違えると、逆のコマンドが生成されますので、注意してください。