二つの 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 が表示されれば無事にインストール完了です。
One thought on “DBテーブルの差分を出力するMySQL::diffをインストールする”