Perlゼミ

  1. Perl
  2. モジュール
  3. here

MySQL::Diff - MySQLのデータベースの差分を調べる

MySQLのデータベースの差分から、差分をなくすようなコマンドを自動生成するツールを探していたら、MySQL::Diffというモジュールを発見した。このモジュールにはmysqldiffというコマンドラインツールがついているので、通常はこちらを使うのが良いみたい。

開発環境と本番環境の差分を埋めるのにとても役立つ。すべての差分を表示してくれるわけではなく、テーブル定義に関する部分だけのようなので、トリガやインデックスについては、自分で設定する必要があるようです。

ドキュメントにはオプションの説明がないようなので、--helpコマンドで確認できる。

mysqldiff --help

まずデータベースのテーブル定義をmysqldumpで取得しましょう。今は開発環境にいて開発環境のデータベースサーバーに変更を加えていると仮定します。

mysqldump -d -uken db > db_devel

本番環境にはsshで接続できると仮定しましょう。そうするとsshでコマンドを実行してリダイレクトしましょう。

ssh ken@remotehost mysqldump -d -uken db > db_production

mysqldiffでは一時的にデータベースを利用するので、データベースの情報を指定する必要があります。

mysqldiff  --host=localhost --user=ken --password=ppp db_production db_devel 

するとdb_productionをdb_develにあわせるためのコマンドが出力されます。

## mysqldiff 0.43
##
## Run on Sun Nov 27 15:57:54 2011
## Options: user=root, debug=0
##
## --- file: db_production
## +++ file: db_devel

CREATE TABLE book (
  id int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

db_productionとdb_develの順番を間違えると、逆のコマンドが生成されますので、注意してください。

Perlプログラミングちゃんねるのご紹介

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ! Perlで元気!」

Perlプログラミングちゃんねる

Youtubeチャンネル登録、いいね、コメント歓迎

Twitter
フォロー、いいね、リツート、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

Perl総合研究所