📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

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

TiDB データ移行 (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に相当)。4とtbl-name db-nameを指定する必要があります。
  • ignore-tables : 移行対象テーブルのブロックリスト(MySQLのreplicate-ignore-tableに相当)。4とtbl-name db-nameを指定する必要があります。

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

フィルタリングプロセス

注記:

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

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

testテーブルのフィルタリング プロセスt次のとおりです。

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

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

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

      • はいの場合は、フィルターtestt
      • そうでない場合は、テーブルレベルでフィルタリングを続行します。
    • do-dbsignore-dbs両方が空の場合は、テーブルレベルでフィルタリングを続行します。

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

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

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

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

注記:

スキーマ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ルールを適用した後:

テーブルフィルタリングするかどうかなぜフィルタリングするのか
logs messages_2016はいスキーマlogsいずれのdo-dbsにも一致しません。
logs messages_2017はいスキーマlogsいずれのdo-dbsにも一致しません。
logs messages_2018はいスキーマlogsいずれのdo-dbsにも一致しません。
forum_backup_2016 messagesはいスキーマforum_backup_2016いずれのdo-dbsにも一致しません。
forum_backup_2017 messagesはいスキーマforum_backup_2017いずれのdo-dbsにも一致しません。
forum usersはい
  • スキーマforum do-dbsと一致し、テーブル レベルでフィルタリングを続行します。
    2. スキーマとテーブルがdo-tablesignore-tablesいずれにも一致せず、 do-tables空ではありません。
  • forum messagesいいえ
  • スキーマforum do-dbsと一致し、テーブル レベルでフィルタリングを続行します。
    2. 表messages do-tablesdb-name: "~^forum.*",tbl-name: "messages"にあります。
  • forum_backup_2018 messagesいいえ
  • スキーマforum_backup_2018 do-dbsと一致し、テーブル レベルでフィルタリングを続行します。
    2. スキーマとテーブルはdo-tablesdb-name: "~^forum.*",tbl-name: "messages"一致します。
  • このページは役に立ちましたか?