異なるスキーマまたはテーブル名を持つテーブルのデータチェック

TiDB データ移行などのレプリケーション ツールを使用する場合、 route-rules設定すると、ダウンストリームの指定されたテーブルにデータをレプリケートできます。 sync-diff-inspector では、 rules設定することで、異なるスキーマ名またはテーブル名を持つテーブルを検証できます。

以下は簡単な設定例です。完全な設定についてはsync-diff-inspector ユーザーガイドを参照してください。

######################### Datasource config ######################### [data-sources.mysql1] host = "127.0.0.1" port = 3306 user = "root" password = "" route-rules = ["rule1"] [data-sources.tidb0] host = "127.0.0.1" port = 4000 user = "root" password = "" ########################### Routes ########################### [routes.rule1] schema-pattern = "test_1" # Matches the schema name of the data source. Supports the wildcards "*" and "?" table-pattern = "t_1" # Matches the table name of the data source. Supports the wildcards "*" and "?" target-schema = "test_2" # The name of the schema in the target database target-table = "t_2" # The name of the target table

この構成は、ダウンストリームのtest_2.t_2mysql1インスタンスのtest_1.t_1チェックするために使用できます。

スキーマ名やテーブル名が異なる多数のテーブルをチェックするには、 rules使用してマッピング関係を設定することで構成を簡素化できます。スキーマまたはテーブルのいずれか、あるいは両方のマッピング関係を構成できます。たとえば、アップストリームtest_1データベース内のすべてのテーブルがダウンストリームtest_2データベースに複製され、次の構成でチェックできます。

######################### Datasource config ######################### [data-sources.mysql1] host = "127.0.0.1" port = 3306 user = "root" password = "" route-rules = ["rule1"] [data-sources.tidb0] host = "127.0.0.1" port = 4000 user = "root" password = "" ########################### Routes ########################### [routes.rule1] schema-pattern = "test_1" # Matches the schema name of the data source. Supports the wildcards "*" and "?" table-pattern = "*" # Matches the table name of the data source. Supports the wildcards "*" and "?" target-schema = "test_2" # The name of the schema in the target database target-table = "t_2" # The name of the target table

テーブルルータの初期化といくつかの例

テーブルルータの初期化

  • ルール内にschema.tableという名前のtarget-schema/target-tableテーブルが存在する場合、sync-diff-inspector の動作は次のようになります。

    • schema.tableschema.tableに一致するルールがある場合、sync-diff-inspector は何も行いません。
    • schema.tableからschema.tableに一致するルールがない場合、 sync-diff-inspector はテーブル ルーターに新しいルールschema.table -> _no__exists__db_._no__exists__table_追加します。その後、 sync-diff-inspector はテーブルschema.tableテーブル_no__exists__db_._no__exists__table_として扱います。
  • target-schemaルールにのみ存在する場合は次のようになります。

    [routes.rule1] schema-pattern = "schema_2" # the schema to match. Support wildcard characters * and ? target-schema = "schema" # the target schema
    • アップストリームにスキーマschemaがない場合、sync-diff-inspector は何も実行しません。
    • アップストリームにスキーマschemaがあり、ルールがスキーマと一致する場合、sync-diff-inspector は何も行いません。
    • アップストリームにスキーマschemaがあるが、スキーマに一致するルールがない場合、sync-diff-inspector はテーブル ルーターに新しいルールschema -> _no__exists__db_を追加します。その後、sync-diff-inspector はテーブルschemaテーブル_no__exists__db_として扱います。
  • ルールにtarget-schema.target-table存在しない場合、テーブル ルーターは大文字と小文字を区別しないため、sync-diff-inspector はtarget-schema.target-tabletarget-schema.target-table一致させて大文字と小文字を区別しないようにするルールを追加します。

アップストリーム クラスターに 7 つのテーブルがあるとします。

  • inspector_mysql_0.tb_emp1
  • Inspector_mysql_0.tb_emp1
  • inspector_mysql_0.Tb_emp1
  • inspector_mysql_1.tb_emp1
  • Inspector_mysql_1.tb_emp1
  • inspector_mysql_1.Tb_emp1
  • Inspector_mysql_1.Tb_emp1

設定例では、アップストリーム クラスターにはルールSource.rule1があり、ターゲット テーブルはinspector_mysql_1.tb_emp1です。

例1

構成が次のようになっている場合:

[Source.rule1] schema-pattern = "inspector_mysql_0" table-pattern = "tb_emp1" target-schema = "inspector_mysql_1" target-table = "tb_emp1"

ルーティング結果は次のようになります。

  • inspector_mysql_0.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_0.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_0.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_1.tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます
  • Inspector_mysql_1.tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます
  • inspector_mysql_1.Tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます
  • Inspector_mysql_1.Tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます

例2

構成が次のようになっている場合:

[Source.rule1] schema-pattern = "inspector_mysql_0" target-schema = "inspector_mysql_1"

ルーティング結果は次のようになります。

  • inspector_mysql_0.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_0.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_0.Tb_emp1 inspector_mysql_1.Tb_emp1にルーティングされます
  • inspector_mysql_1.tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます
  • Inspector_mysql_1.tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます
  • inspector_mysql_1.Tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます
  • Inspector_mysql_1.Tb_emp1 _no__exists__db_._no__exists__table_にルーティングされます

例3

構成が次のようになっている場合:

[Source.rule1] schema-pattern = "other_schema" target-schema = "other_schema"

ルーティング結果は次のようになります。

  • inspector_mysql_0.tb_emp1 inspector_mysql_0.tb_emp1にルーティングされます
  • Inspector_mysql_0.tb_emp1 Inspector_mysql_0.tb_emp1にルーティングされます
  • inspector_mysql_0.Tb_emp1 inspector_mysql_0.Tb_emp1にルーティングされます
  • inspector_mysql_1.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_1.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_1.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_1.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます

例4

構成が次のようになっている場合:

[Source.rule1] schema-pattern = "inspector_mysql_?" table-pattern = "tb_emp1" target-schema = "inspector_mysql_1" target-table = "tb_emp1"

ルーティング結果は次のようになります。

  • inspector_mysql_0.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_0.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_0.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_1.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_1.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_1.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_1.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます

例5

ルールを設定しない場合、ルーティング結果は次のようになります。

  • inspector_mysql_0.tb_emp1 inspector_mysql_0.tb_emp1にルーティングされます
  • Inspector_mysql_0.tb_emp1 Inspector_mysql_0.tb_emp1にルーティングされます
  • inspector_mysql_0.Tb_emp1 inspector_mysql_0.Tb_emp1にルーティングされます
  • inspector_mysql_1.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_1.tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • inspector_mysql_1.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます
  • Inspector_mysql_1.Tb_emp1 inspector_mysql_1.tb_emp1にルーティングされます

このページは役に立ちましたか?