TiDB データ移行のブロック リストと許可リスト

TiDB Data Migration (DM) を使用してデータを移行する場合、ブロックおよび許可リストを構成して、一部のデータベースまたは一部のテーブルのすべての操作をフィルタリングしたり、すべての操作のみを移行したりできます。

ブロックリストと許可リストを構成する

タスク構成ファイルに次の構成を追加します。

block-allow-list: # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. rule-1: do-dbs: ["test*"] # Starting with characters other than "~" indicates that it is a wildcard; # v1.0.5 or later versions support the regular expression rules. do-tables: - db-name: "test[123]" # Matches test1, test2, and test3. tbl-name: "t[1-5]" # Matches t1, t2, t3, t4, and t5. - db-name: "test" tbl-name: "t" rule-2: do-dbs: ["~^test.*"] # Starting with "~" indicates that it is a regular expression. ignore-dbs: ["mysql"] do-tables: - db-name: "~^test.*" tbl-name: "~^t.*" - db-name: "test" tbl-name: "t*" ignore-tables: - db-name: "test" tbl-name: "log"

単純なシナリオでは、スキーマとテーブルを一致させるためにワイルドカードを使用することをお勧めします。ただし、次のバージョンの違いに注意してください。

  • *? 、および[]を含むワイルドカードがサポートされています。ワイルドカード一致では*シンボルは 1 つだけ使用でき、最後になければなりません。たとえば、 tbl-name: "t*"では、 "t*" tで始まるすべてのテーブルを示します。詳細はワイルドカードマッチング参照してください。

  • 正規表現は~文字で始まる必要があります。

パラメータの説明

  • do-dbs : MySQL のreplicate-do-dbと同様に、スキーマのリストの移行を許可します。
  • ignore-dbs : MySQL のreplicate-ignore-dbに似た、移行するスキーマのブロック リスト。
  • do-tables : MySQL のreplicate-do-tableと同様に、テーブルのリストの移行を許可します。 db-nametbl-nameの両方を指定する必要があります。
  • ignore-tables : MySQL のreplicate-ignore-tableに似た、移行するテーブルのブロック リスト。 db-nametbl-nameの両方を指定する必要があります。

上記のパラメータの値が~文字で始まる場合、この値の後続の文字は正規表現として扱われます。このパラメータを使用して、スキーマ名またはテーブル名を一致させることができます。

フィルタリングプロセス

注記:

DM と MySQL では、ブロック リストと許可リストのフィルタリング ルールが次の点で異なります。

  • MySQL では、 replicate-wild-do-tablereplicate-wild-ignore-tableワイルドカード文字をサポートします。 DM では、一部のパラメーター値は、 ~文字で始まる正規表現を直接サポートします。
  • DM は現在、 ROW形式のバイナリログのみをサポートしており、 STATEMENTまたはMIXED形式のバイナリログはサポートしていません。したがって、DM のフィルタリング ルールは、MySQL のROW形式のルールに対応します。
  • MySQL は、ステートメントのUSEセクションで明示的に指定されたデータベース名のみによって DDL ステートメントを決定します。 DM は、まず DDL ステートメントのデータベース名セクションに基づいてステートメントを決定します。 DDL ステートメントにそのようなセクションが含まれていない場合、DM はUSE番目のセクションによってステートメントを決定します。判定対象の SQL ステートメントがUSE test_db_2; CREATE TABLE test_db_1.test_table (c1 INT PRIMARY KEY)であるとします。 replicate-do-db=test_db_1は MySQL で構成され、 do-dbs: ["test_db_1"]は DM で構成されます。このルールは DM にのみ適用され、MySQL には適用されません。

a testのフィルタリング プロセス。 t表は以下の通りです。

  1. スキーマレベルでフィルタリングします。

    • do-dbsが空でない場合は、一致するスキーマがdo-dbsに存在するかどうかを確認します。

      • 「はい」の場合は、テーブルレベルでのフィルタリングを続けます。
      • そうでない場合は、フィルタtestを実行します。 t
    • do-dbsが空でignore-dbs空でない場合は、一致するスキーマがignore-dbsに存在するかどうかを確認します。

      • 「はい」の場合は、フィルターtestを適用します。 t
      • そうでない場合は、テーブルレベルでのフィルタリングを続けます。
    • do-dbsignore-dbsの両方が空の場合は、テーブルレベルでのフィルタ処理を続けます。

  2. テーブルレベルでフィルタリングします。

    1. do-tablesが空でない場合は、 do-tablesに一致するテーブルが存在するかどうかを確認します。

      • 「はい」の場合、移行testt
      • そうでない場合は、フィルタtestを実行します。 t
    2. ignore-tablesが空でない場合は、 ignore-tablesに一致するテーブルが存在するかどうかを確認します。

      • 「はい」の場合は、フィルターtestを適用します。 t
      • そうでない場合は、移行しますtestt
    3. do-tablesignore-tables両方が空の場合は、 testを移行します。 t

注記:

スキーマtestフィルタリングする必要があるかどうかを確認するには、スキーマ レベルでフィルタリングするだけで済みます。

使用例

アップストリームの MySQL インスタンスに次のテーブルが含まれていると仮定します。

`logs`.`messages_2016` `logs`.`messages_2017` `logs`.`messages_2018` `forum`.`users` `forum`.`messages` `forum_backup_2016`.`messages` `forum_backup_2017`.`messages` `forum_backup_2018`.`messages`

構成は次のとおりです。

block-allow-list: # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. bw-rule: do-dbs: ["forum_backup_2018", "forum"] ignore-dbs: ["~^forum_backup_"] do-tables: - db-name: "logs" tbl-name: "~_2018$" - db-name: "~^forum.*" tbl-name: "messages" ignore-tables: - db-name: "~.*" tbl-name: "^messages.*"

bw-ruleルールを適用した後:

テーブルフィルタをかけるかどうかフィルターをかける理由
logsmessages_2016はいスキーマlogsどのdo-dbsとも一致しません。
logsmessages_2017はいスキーマlogsどのdo-dbsとも一致しません。
logsmessages_2018はいスキーマlogsどのdo-dbsとも一致しません。
forum_backup_2016messagesはいスキーマforum_backup_2016どのdo-dbsとも一致しません。
forum_backup_2017messagesはいスキーマforum_backup_2017どのdo-dbsとも一致しません。
forumusersはい
  • スキーマforum do-dbsと一致し、テーブル レベルでのフィルタ処理を続けます。
    2. スキーマとテーブルがdo-tablesignore-tablesのいずれにも一致せず、 do-tables空ではありません。
  • forummessagesいいえ
  • スキーマforum do-dbsと一致し、テーブル レベルでのフィルタ処理を続けます。
    2. 表messages do-tables db-name: "~^forum.*",tbl-name: "messages"含まれます。
  • forum_backup_2018messagesいいえ
  • スキーマforum_backup_2018 do-dbsと一致し、テーブル レベルでのフィルタ処理を続けます。
    2. スキーマとテーブルはdb-name: "~^forum.*",tbl-name: "messages" of do-tablesと一致します。
  • このページは役に立ちましたか?