[解決済み】2つのMySQLデータベースを比較する【クローズド
質問
現在、MySQLデータベースを使用したアプリケーションを開発しています。
データベース構造はまだ流動的で、開発が進むにつれて変化します(私はテストサーバー上のものを残して、自分のローカルコピーを変更します)。
データベースの2つのインスタンスを比較して、変更があったかどうかを確認する方法はありますか?
現在は以前のテストサーバーのデータベースを破棄するだけで良いのですが、テストが始まってテストデータが入力されるようになると、少し厄介なことになるかもしれません。
同じようなことは、もっと後で本番でも起こるでしょうけど......。
できれば、本番用データベースを変更するためのスクリプトを自動的に作成し、インクリメンタルに変更する簡単な方法はありませんか?
回答で紹介したツール
- Red-GateのMySQLスキーマとデータの比較 (商用)
- Maatkit (現Percona)
- リキベース
- ヒキガエル
- ノブヒルデータベース比較 (商業)
- MySQLの差分
- SQL EDT (商用)
解決方法は?
小さなデータベースで作業している場合、両方のデータベースで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
関連
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み] MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] mysqlデータベースのサイズを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MAMPのmysqlサーバーが起動しない。mysqlのプロセスが起動していない
-
[解決済み】mysqladmin: 'localhost'でのサーバーへの接続に失敗しました。
-
[解決済み] mysql 拡張は非推奨で、将来的に削除されます: 代わりに mysqli か PDO を使ってください [重複] 。
-
[解決済み] WHEREで集計関数は使用できません "というエラーを回避する方法
-
[解決済み] ローカルマシンからリモートDBをmysqldumpする方法
-
[解決済み] whereステートメントによるmysqlの一括更新
-
[解決済み] mysqladminのフラッシュホストでブロックを解除する方法
-
[解決済み] MongoDBのようにMySQLにもTTLがあるのでしょうか?
-
[解決済み] SQLSTATE[22003]: 数値の範囲外: 1264 範囲外の値です。
-
[解決済み] テーブルがクラッシュしたと判定されたため、修復する必要があります。