MySQLデータベース比較ツール-mysqldbcompare
Mysql Database Comparison Tool Mysqldbcompare
mysqldbcompare
2台のサーバーまたは同じサーバーを比較するために使用されます データベース 、ファイルとデータを使用して、差分SQLステートメントを生成します。
比べる データシート 、別のツールを使用してください:mysqldiff
( クリックしてチュートリアルを表示 )。
以下はmysqldbcompare
使用法です。
1インストール
mysqldbcompare
はい MySQLユーティリティ スクリプトの1つでは、デフォルトのMySQLにツールセットが含まれていないため、個別にインストールする必要があります。
- MySQLユーティリティのダウンロードアドレス: http://downloads.mysql.com/archives/utilities/ 。
- Windowsシステムは事前にインストールする必要があります」 Visual Studio2013用のVisualC ++再配布可能パッケージ '、ダウンロードリンク: https://www.microsoft.com/en-gb/download/details.aspx?id=40784 。
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
withserver1
修正も含まれます。--skip-table-options
:テーブルのオプションを変更しないでください。つまり、比較の違いは含まれませんTable Name
、AUTO_INCREMENT
、ENGINE
、CHARSET
このような違い。--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
ステートメントでコンマを使用するためです,
複数のピースがアセンブルされますADD
、CHANGE
および他のステートメント(これらのステートメントにもAFTER
キーワードはこのエラーを促し、MySQLステートメントの実行を中断します。解決策は次のとおりです。removeAFTER
およびその後の条件。これはMySQLのバグである可能性があります。詳細については、以下を参照してください。 http://bugs.mysql.com/bug.php?id=34972 と http://bugs.mysql.com/bug.php?id=60650 。
参照リンク: