Qiita に投稿しました。シェルスクリプト数行なのでお手軽。例えばデプロイ中にダウンタイムが発生しないかチェックしたい場合などに使えるかもしれません。
デプロイ
DBテーブルの差分を出力するMySQL::diffをインストールする
二つの MySQL データベースを比較し差分 ALTER SQL 文を出力してくれる perl 製ツール、MySQL::diffのインストール方法です。
このツールは、稼働中のデータベースのテーブルスキーマを最新に更新する場合など使えます。
Usage: mysqldiff [ options ] <database1> <database2>
今回はサーバデプロイ時のスキーマ更新作業を自動化するためにインストールしてみました。上手く使うと DDL のスマートなバージョン管理に一役買ってくれると思います。
コマンドラインツールなので GUI で分かりやすく差分を出力したい場合には不向きです。そういった場合はこのツールよりも MySQLWorkbench を使ったほうが便利でしょう。
MySQL::diff のインストール
MySQL::diff は mysqldiff – search.cpan.org で公開されています。
インストール先を /usr/local/mysqldiff にしました。
wget http://search.cpan.org/CPAN/authors/id/A/AS/ASPIERS/MySQL-Diff-0.43.tar.gz tar xzvf MySQL-Diff-0.43.tar.gz mv MySQL-Diff-0.43 /usr/local/mysqldiff
/usr/local/bin/mysqldiff にシンボリックリンクをはります。
ln -s /usr/local/mysqldiff/bin/mysqldiff /usr/local/bin/mysqldiff
これでインストール完了と言いたいところなのですが、このままだとパスが通っておらず以下のエラーが起こります。
Can't locate MySQL/Diff.pm in @INC (@INC contains: /usr/local/mysqldiff/bin /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/local/bin/mysqldiff line 112. BEGIN failed--compilation aborted at /usr/local/bin/mysqldiff line 112.
このエラーを修正するために、ソースコードの冒頭に use lib 文を一行追記します。
vi /usr/local/mysqldiff/bin/mysqldiff
#!/usr/bin/perl -w use lib '/usr/local/mysqldiff/lib'; =head1 NAME
また、CentOS の場合では CPAN で File::Slurp をインストールする必要がありました。
cpan cpan > install File::Slurp
mysqldiff コマンドを空打ちしてみて、usage が表示されれば無事にインストール完了です。