1. ホーム
  2. マイスル

[解決済み】2つのMySQLデータベースを比較する【クローズド

2022-03-25 03:30:52

質問

現在、MySQLデータベースを使用したアプリケーションを開発しています。

データベース構造はまだ流動的で、開発が進むにつれて変化します(私はテストサーバー上のものを残して、自分のローカルコピーを変更します)。

データベースの2つのインスタンスを比較して、変更があったかどうかを確認する方法はありますか?

現在は以前のテストサーバーのデータベースを破棄するだけで良いのですが、テストが始まってテストデータが入力されるようになると、少し厄介なことになるかもしれません。

同じようなことは、もっと後で本番でも起こるでしょうけど......。

できれば、本番用データベースを変更するためのスクリプトを自動的に作成し、インクリメンタルに変更する簡単な方法はありませんか?


回答で紹介したツール

解決方法は?

小さなデータベースで作業している場合、両方のデータベースでmysqldumpを実行すると --skip-comments--skip-extended-insert オプションでSQLスクリプトを生成し、そのSQLスクリプトに対してdiffを実行すると、かなりうまくいきます。

コメントを省略することで、mysqldumpコマンドを実行した時間など、意味のない差異を避けることができます。また --skip-extended-insert コマンドを使用すると、各行がそれ自身の insert 文で挿入されることを保証します。これにより、1つの新しいレコードや変更されたレコードが、それ以降のすべての挿入ステートメントで連鎖反応を引き起こすという状況をなくすことができます。これらのオプションで実行すると、コメントなしの大きなダンプが生成されるので、おそらく実稼働環境では実行したくないことですが、開発では問題ないでしょう。私が使っているコマンドの例を下に載せました。

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql