All Articles

MySQL::Diffをコンソールで動かすメモ

seezooのバージョンアップの際などに、DBがどれだけ変更されたかを抽出するのにPerlのMySQL::DIffをよく使っているのですが、環境を変えた時に動かし方を忘れてしまう(かつPerl詳しくない)ので備忘録として。 今回はMac OSX 10.7.3 Lion上で動かします。なお、MySQL自体はインストール済みの状態です。

ソースのダウンロード

最終更新が結構古いですが、SourceForgeからダウンロードします。本当はCPANとかでやればいいんだとは思いますが・・・。

インストール

アーカイブを入手したら解凍します。このパッケージにはコマンドライン用のモジュールも入っているので、今回はそっちを利用するのが目的です。インストール先は$HOME/local/mysqldiffにします。

$ tar xvfz latest.tar.gz
$ mv MySQL-Diff-0.4.3 $HOME/local/mysqldiff

bin/mysqldiffにリンクを貼って呼び出せるようにします。コマンドの実態はPerlスクリプトですね。

$ ln -s $HOME/local/mysql/bin/mysqldiff /usr/local/bin/mysqldiff

これでOKかなーと思って実行すると、

$ mysqldiff

Can't locate MySQL/Diff.pm in @INC (...

エラーが出て動かず。どうやらパスが通ってないみたいなので、パスを追加。

vim $HOME/local/mysql/bin/mysqldiff

+ use lib '$HOME/local/mysqldiff/lib';

先頭にuseしてパスを通した後、再度実行すると動きましたー。 あと、オプションは-uroot -pとか出できるよーって書いてあるんですが、なぜか自分の環境では、--user=root --password=xxx みたいなオプション指定出ないと動きませんでした。なんでだろう?

ともあれ、これでDBの差分が取れるようになったので助かりました^^ ちなみに、テーブルやカラム構造は差分を取りますが、インデックスなどは取ってくれないらしいので、そこは手動でやる必要があるみたいですね。

※2013/02/16追記 Twitterのコメントにあったので追記します。 Macだと上記の方法でOKなのですが、LinuxだとFile::Slurpも入れないと動かせないようです。なので、これはcpanから入れます。

sudo cpan
cpan > install File::Slurp

これで動くようになりました!ありがとうございます。