MySQLデータベース比較ツール-mysqldbcompare



Mysql Database Comparison Tool Mysqldbcompare



mysqldbcompare 2台のサーバーまたは同じサーバーを比較するために使用されます データベース 、ファイルとデータを使用して、差分SQLステートメントを生成します。

比べる データシート 、別のツールを使用してください:mysqldiffクリックしてチュートリアルを表示 )。



以下はmysqldbcompare使用法です。

1インストール

mysqldbcompareはい MySQLユーティリティ スクリプトの1つでは、デフォルトのMySQLにツールセットが含まれていないため、個別にインストールする必要があります。



Linuxシステムは、ダウンロードページで対応するディストリビューションを選択します。

2文法

mysqldbcompare構文は次のとおりです。

$ mysqldbcompare --server1=user:root@xxxxx:port:socket --server2=user:root@xxxxx:port:socket db1:db2

上記のパラメータの中で:



  • --server1:MySQLサーバー1の構成。
  • --server2:MySQLサーバー2の構成。同じサーバーの場合、--server2省略できます。
  • db1:db2:比較する2つのデータベース。異なるサーバー上の同じ名前のデータベースを比較する場合は、:db2を省略できます。
  • --all:2つのサーバーすべてで同じ名前のすべてのデータベースを比較します。--exclude比較する必要のないデータベースを除外します。
  • --run-all-tests:最初の違いが発生したときに停止せずに完全な比較を実行します。
  • --changes-for=:オブジェクトを変更します。例:--changes-for=server2次に、sever1と比較します。主に、生成された差異の変更は、server2オブジェクトの変更も目的としています。
  • -d DIFFTYPE--difftype=DIFFTYPE:差異情報の表示方法は[unified|context|differ|sql]、デフォルトはunifiedです。 sqlを使用する場合は、差分SQLを直接生成します。これは非常に便利です。
  • --show-reverse:生成された差分修正には、server2 with server1修正も含まれます。
  • --skip-table-options:テーブルのオプションを変更しないでください。つまり、比較の違いは含まれませんTable NameAUTO_INCREMENTENGINECHARSETこのような違い。
  • --skip-diff:オブジェクト定義の比較チェックをスキップします。いわゆるオブジェクト定義はCREATEステートメント()内側の部分--skip-table-options外側の部分()です。
  • --skip-object-compare:デフォルトでは、2つのデータベースで互いに欠落しているオブジェクトが最初にチェックされ、次にオブジェクト間に違いがあります。このパラメーターの目的は、最初のステップをスキップし、欠落しているオブジェクトをチェックしないことです。
  • --skip-checksum-table:データ整合性の検証中にスキップされましたCHECKSUM TABLE
  • --skip-data-check:データの整合性検証をスキップします。
  • --skip-row-count:フィールド数量チェックをスキップします。

3例

2つのデータベースを比較し、異なるSQLを生成します。

$ mysqldbcompare --server1=root:root@xxxxx --server2=root:root@xxxxx db1:db2 --changes-for=server1 -a --difftype=sql # WARNING: Objects in server1.db1 but not in server1.db2: # TABLE: table2 # # WARNING: Objects in server1.db2 but not in server1.tb1: # TABLE: table3 # # Defn Row Data # Type Object Name Diff Count Check #------------------------------------------------------------------------- # TABLE t1 pass pass - # - Compare table checksum FAIL # - Find row differences FAIL # # Transformation for --changes-for=server1: # # Data differences found among rows: UPDATE db1.t1 SET b = 'Test 123' WHERE a = '1' UPDATE db1.t1 SET b = 'Test 789' WHERE a = '3' DELETE FROM db1.t1 WHERE a = '4' INSERT INTO db1.t1 (a, b) VALUES('5', 'New row - db2') # Database consistency check failed. # # ...done

WARNING次に、2つのデータベーステーブルの違い、つまり、一方のデータベースにはあるがもう一方のデータベースにはないデータテーブルの違いを確認します。

その後、SQLステートメントの違いです。put#数値コメントのある行を削除すると、データベースで直接実行できます。

説明:MySQLステートメントの実行時にこのエラーが発生する場合があります:エラー1054-「アスペクト」の不明な列「名前」

これは、mysqldbcompare生成ALTERステートメントでコンマを使用するためです,複数のピースがアセンブルされますADDCHANGEおよび他のステートメント(これらのステートメントにもAFTERキーワードはこのエラーを促し、MySQLステートメントの実行を中断します。解決策は次のとおりです。removeAFTERおよびその後の条件。

これはMySQLのバグである可能性があります。詳細については、以下を参照してください。 http://bugs.mysql.com/bug.php?id=34972http://bugs.mysql.com/bug.php?id=60650

参照リンク:

  1. マルチデータベースデータ比較を実現するためのmysqlのmysqldbcompare
  2. mysqldbcompare — 2つのデータベースを比較し、違いを特定します