mysql運用しているとmysqldumpをとって、別環境だったり過去とテーブル定義のdiffを見る時って結構あると思う。
うちの環境では、mysqldumpをgitで管理して差分を見たりしている。
その時に困るのが、オートインクリメントしているカラムがあると下記のように、環境毎のインクリメント値を出力する為にその部分で差分が出てdiffが汚れてしまう。。
diff汚れると、みるのつらい。。。
例えば下記のようなコマンドでdump取ってdiff取ると、オートインクリメントを使っているカラムでの当然環境毎にdiffが出るので、意味のないdiffが発生する。
# a環境のaaaDBのdump
$ mysqldump -u[ユーザ] -d aaa > a_aaa.sql
# b環境のaaaDBのdump
$ mysqldump -u[ユーザ] -d bbb > b_aaa.sql
$ diff a_aaa.sql b_aaa.sql
< ) EqNGINE=InnoDB AUTO_INCREMENT=561 DEFAULT CHARSET=utf8;
---
> ) ENGINE=InnoDB AUTO_INCREMENT=469 DEFAULT CHARSET=utf8;
96c96
これを避けるために、mysqldumpを取るときに、sedでインクリメント部分を除外して出力するとdiffが綺麗になるので、本当に定義が変わった部分だけ比較出来る。
$ mysqldump -u[ユーザ] -d [DB名] |sed 's/ AUTO_INCREMENT=[0-9]*//g' >[name].sql
簡単ですが、これ入れただけでdiffとにらめっこする運用コストが結構減ったりするので便利。