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

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にルーティングされます

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