MySQLデータベースの同期ツールの設計と実装

一、背景

  試験中、異なるテスト目的のために異なるチームのためのテストは、我々は、テスト環境の複数のセットを有することができます。、テーブル、フィールド、インデックスを追加テーブル、フィールド、インデックスと他の操作を変更し、いくつかのプロセスが企業を標準化されていない中で、開発者が従わない:製品のバージョン反復プロセスでは、ビジネスニーズに応じて、データベースの構造は、次のようないくつかの変更になります業務の標準化、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つの問題

おすすめ

転載: www.cnblogs.com/L-Test/p/11668928.html