一、背景
試験中、異なるテスト目的のために異なるチームのためのテストは、我々は、テスト環境の複数のセットを有することができます。、テーブル、フィールド、インデックスを追加テーブル、フィールド、インデックスと他の操作を変更し、いくつかのプロセスが企業を標準化されていない中で、開発者が従わない:製品のバージョン反復プロセスでは、ビジネスニーズに応じて、データベースの構造は、次のようないくつかの変更になります業務の標準化、SQLをタイムリーにSVN / Gitリポジトリへのデータベースにこれらの変更を提出されていない、変更されたコードは、新たなビジネス環境にデプロイされている場合ので、テストの効率に影響を与え、エラーにつながります。言うべきもう一つのポイントは、さえ大企業のプロセス仕様ならば、コアビジネスインフラのサブライブラリーのサブテーブル、および何千ものテーブルを採用している我々はそれを追加して、フィールドを変更手動でSQLを実行するために採用しているのですか?これは、もちろん間違っている、学生たちは、スクリプト言語のバッチ更新の形を取り、対応するデータベースを変更することができ、これも方法だと思いますが、この2つのデータベースの幹部の間に非常に明確な違いである場合にのみ、場合があるかもしれません幹部は、2つのデータベース間の違いは何も考えていませんでしたか?一部の学生は、彼らがこれを解決するだろうターゲット・データベースにインポートされ、データベースの構造とデータを供給することができると思うことがあります。だから、もっともらしいが、実際に間違っています。以前の私たちが言った、テスト環境のいくつかのセット、彼らの役割は、例えば、異なる場合があります。内部テストのためのテスト環境、FBIと私たちは、データベースの構造やテスト環境を入れた場合に、システムのためのFBI外部環境、すべてのデータは、FBI環境、存在しない元FBIデータの環境、そしてもはや外のFBIをインポートするので、これは良い方法ではありません。
これらの理由のすべてのために、データベース構造の同期ツールは、より良い解決策のように見えます。
第二に、機能を実現
上記の分析に基づいて、ツールは次の3つの機能を実装する必要があります
- 解析(差分):ソースおよびターゲットデータベース構造の分析の違い、分析を実行するために、ソースおよびターゲットデータベースをコピーする前に差を決定するための同期と提言。
- 同期(シンク):構造のみデータベースの同期は、データが同期されません。
- 複写(コピー):要求されないデータの場合には、直接ターゲット・データベースソース・データベースのすべてのデータベースとデータ構造にコピーを使用することができます。
第三に、アイデアの実現
次のように具体的なプロセスは、次のとおりです。
- IPソースとターゲット・データベース、ポート番号、ユーザー名、パスワード、およびデータベースの名前をアクション(差分、同期、コピー)を実行する;:あって、入ってくる命令を解析します
- 分析DB、SQLを実行します。
- 分析dbテーブルの下では、SQLを実行します。
- フィールドとインデックス分析表は、SQLを実行します。
第四に、分析プロセス
私たちは分析し、それを比較する方法についての具体的でなければならないこと、データベース、データベーステーブル内の次のテーブル、フィールドとインデックス:私たちは、データベースの構造を含めて、比較し、分析したいですか?
私たちは、MySQLデータベースの同期ツールではないので、我々は、MySQLデータベースの少し深い知識を持っている必要があります。MySQLでは、INFORMATION_SCHEMAは、正確な情報のデータベースであることが、データベースとして見られます。どのサーバで保持されている現在のMySQLの他のデータベースに関するすべての情報を保持しています。そのようなので、上のデータベース名、フィールドとインデックスデータベーステーブル、テーブルとアクセス権、およびなど。だから我々はいくつかのテーブル、次のINFORMATION_SCHEMAを心配する必要があります:
- SCHEMATA:すべてのデータベースの現在のMySQLインスタンスに関する情報を提供します。この表から取られたSHOWデータベース結果;
- TABLES: (ビューを含む)データベース・テーブルについての情報を提供します。テーブルの詳細なプレゼンテーションは、スキーマ、テーブル型、テーブルエンジン、作成時刻および他の情報に属します。結果は、表から取らSCHEMANAMEからテーブルを表示します。
- COLUMNS:列情報のテーブルを提供します。特定の表の各列および行のすべての情報の詳細なプレゼンテーション。結果は、表から取らSCHEMANAME.TABLENAMEから列を表示します。
- STATISTICS:テーブルインデックスに関する情報を提供します。結果は、表から取らSCHEMANAME.TABLENAMEからインデックスを表示します。
キーSQL:
- SELECT * FROM SCHEMATA WHERE SCHEMA_NAME = 'XXX';
- TABLE_SCHEMAは= 'XXX' AND TABLE_NAME = 'X' TABLES SELECT * FROM。
- SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = 'XXX' AND TABLE_NAMEは= 'XX';
- TABLE_SCHEMAは= 'XXX' AND TABLE_NAME = 'X' STATISTICS SELECT * FROM。
第五に、コードの実装
6つの問題