その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

java-mysql-diff が出た

java-mysql-diff が出ました.Maven Central にもリリースしています.

http://search.maven.org/#artifactdetails|net.moznion|mysql-diff|1.0.0|


本パッケージは id:onishi さん作の mysqldiffJava 8 移植版です.
最近 Java の環境で作業することが多いので,なんだかんだで Java 版があると便利だよね〜ということで作成しました.

本家の Perl 版 mysqldiff と同じような感覚で利用したかったので,全部の依存パッケージを1つにまとめた fat-jar も用意してあります.
java -jar というコマンドを余分にタイプする必要はありますが,Perl 版と同じような感覚で利用することが出来ます.

https://github.com/moznion/java-mysql-diff/releases


さて,mysqldiff は大きく分けると以下の様な処理のステップで構成されています.

1. mysqldump を利用する事によって,ノーマライズしたスキーマ情報を吐き出す

  • SQL ファイルが与えられた場合は,実際に temp detabase を MySQL 上に作成して,そこに SQL の内容を流し込んでからその DB を mysqldump で dump する
  • ローカルの DB 名が与えられた場合はその DB を mysqldump で dump する
  • リモートの DB 名が与えられた場合,そのリモートの DB を mysqldump で dump して,その dump した内容をローカルの temp database に流し込んでから再度 mysqldump で dump する (dump する際に2段階の手順を踏んでいるのはローカルの MySQL と リモートの MySQL との差異を無くすためだと思う……)

2. ノーマライズしたスキーマ情報をパーズしてデータ構造に落とし込む
3. データ構造を比較して diff を取る

mysqldump を使って,入力をノーマライズして構文の揺れを無くしてパーズしやすくするという手法,マジで天才では……と移植中感心しきりでした.
上記のように実際に database を作成したり,mysqldump を実行したりするので,プログラムを走らせる際には mysqld が立ち上がっていて,なおかつ mysqldump コマンドが実行可能な状態になっている必要があります.


ぜひご利用下さいませ.