TiDB データ移行Binlogイベント フィルター
TiDB Data Migration (DM) は、一部のスキーマまたはテーブルの指定されたタイプのbinlogイベントをフィルターで除外するか、のみ受信するbinlogイベント フィルター機能を提供します。たとえば、 TRUNCATE TABLEつまたはINSERTのイベントをすべてフィルターで除外できます。 binlogイベント フィルター機能は、 ブロックリストと許可リスト機能よりも粒度が細かいです。
binlogイベントフィルターを構成する
タスク構成ファイルに次の構成を追加します。
filters:
  rule-1:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    events: ["truncate table", "drop table"]
    sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"]
    action: Ignore
DM v2.0.2 以降、ソース構成ファイルでbinlogイベント フィルターを構成できます。詳細はアップストリーム データベースコンフィグレーションファイルを参照してください。
スキーマとテーブルの一致にワイルドカードを使用する場合は、次の点に注意してください。
schema-patternとtable-pattern、*、?、および[]を含むワイルドカードのみをサポートします。ワイルドカード一致では*シンボルは 1 つだけ使用でき、最後になければなりません。たとえば、table-pattern: "t_*"では、"t_*"t_で始まるすべてのテーブルを示します。詳細はワイルドカードマッチング参照してください。sql-patternは正規表現のみをサポートします。
パラメータの説明
schema-pattern/table-pattern:schema-pattern/table-patternに一致するアップストリーム MySQL または MariaDB インスタンス テーブルのbinlogイベントまたは DDL SQL ステートメントは、以下のルールによってフィルターされます。events:binlogイベント配列。次の表から 1 つ以上のEventのみを選択できます。イベント タイプ 説明 all以下のすべてのイベントが含まれます all dml以下のすべての DML イベントが含まれます all ddl以下のすべての DDL イベントが含まれます none以下のイベントは含まれません none ddl以下の DDL イベントは含まれません none dml以下の DML イベントは含まれません insertDML INSERTDML イベントupdateDML UPDATEDML イベントdeleteDML DELETEDML イベントcreate databaseDDL CREATE DATABASEDDL イベントdrop databaseDDL DROP DATABASEDDL イベントcreate tableDDL CREATE TABLEDDL イベントcreate indexDDL CREATE INDEXDDL イベントdrop tableDDL DROP TABLEDDL イベントtruncate tableDDL TRUNCATE TABLEDDL イベントrename tableDDL RENAME TABLEDDL イベントdrop indexDDL DROP INDEXDDL イベントalter tableDDL ALTER TABLEDDL イベントsql-pattern: 指定された DDL SQL ステートメントをフィルタリングするために使用されます。一致ルールでは正規表現の使用がサポートされています。たとえば、"^DROP\\s+PROCEDURE"。action: 文字列 (Do/Ignore)。以下のルールに基づいてフィルタリングするかどうかを判断します。 2 つのルールのいずれかが満たされる場合、binlogはフィルタリングされます。それ以外の場合、binlogはフィルタリングされません。Do: 許可リスト。binlogは、次の 2 つの条件のいずれかでフィルタリングされます。- イベントのタイプはルールのリスト
eventにありません。 - イベントの SQL ステートメントはルールの
sql-patternと一致できません。 
- イベントのタイプはルールのリスト
 Ignore: ブロックリスト。binlogは、次の 2 つの条件のいずれかでフィルタリングされます。- イベントのタイプはルールのリスト
eventにあります。 - イベントの SQL ステートメントは、ルールの
sql-patternと照合できます。 
- イベントのタイプはルールのリスト
 - 複数のルールが同じテーブルに一致する場合、ルールは順番に適用されます。ブロック リストは許可リストよりも高い優先度を持ちます。たとえば、 
IgnoreとDoの両方のルールが同じテーブルに適用される場合、Ignoreルールが有効になります。 
使用例
このセクションでは、シャーディング (シャードされたスキーマとテーブル) のシナリオでの使用例を示します。
すべてのシャーディング削除操作をフィルタリングする
すべての削除操作をフィルターで除外するには、次の 2 つのフィルター ルールを構成します。
filter-table-ruletest_*に一致するすべてのテーブルのTRUNCATE TABLE、DROP TABLE、およびDELETE STATEMENT操作を除外します。t_*パターン。filter-schema-ruletest_*パターンに一致するすべてのスキーマのDROP DATABASE操作を除外します。
filters:
  filter-table-rule:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    events: ["truncate table", "drop table", "delete"]
    action: Ignore
  filter-schema-rule:
    schema-pattern: "test_*"
    events: ["drop database"]
    action: Ignore
シャーディング DML ステートメントのみを移行する
シャーディング DML ステートメントのみを移行するには、次の 2 つのフィルタリング ルールを構成します。
do-table-ruletest_*に一致するすべてのテーブルのCREATE TABLE、INSERT、UPDATE、およびDELETEステートメントのみを移行します。t_*パターン。do-schema-ruleパターンtest_*に一致するすべてのスキーマのステートメントCREATE DATABASEのみを移行します。
注記:
CREATE DATABASE/TABLEステートメントが移行される理由は、DML ステートメントはスキーマとテーブルの作成後にのみ移行できるためです。
filters:
  do-table-rule:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    events: ["create table", "all dml"]
    action: Do
  do-schema-rule:
    schema-pattern: "test_*"
    events: ["create database"]
    action: Do
TiDB がサポートしていない SQL ステートメントをフィルタリングして除外します。
TiDB がサポートしていないPROCEDUREステートメントをフィルタリングして除外するには、次のfilter-procedure-ruleを構成します。
filters:
  filter-procedure-rule:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"]
    action: Ignore
filter-procedure-rule test_*に一致するすべてのテーブルの^CREATE\\s+PROCEDUREおよび^DROP\\s+PROCEDUREステートメントを除外します。 t_*パターン。
TiDB パーサーがサポートしていない SQL ステートメントをフィルターで除外します。
TiDB パーサーがサポートしていない SQL ステートメントの場合、DM はそれらを解析してschema / tableの情報を取得できません。したがって、グローバル フィルタリング ルールschema-pattern: "*"を使用する必要があります。
注記:
移行する必要があるデータがフィルターで除外されないようにするには、グローバル フィルター ルールをできるだけ厳密に構成する必要があります。
TiDB パーサー (一部のバージョン) がサポートしていないPARTITIONステートメントをフィルターで除外するには、次のフィルター ルールを構成します。
filters:
  filter-partition-rule:
    schema-pattern: "*"
    sql-pattern: ["ALTER\\s+TABLE[\\s\\S]*ADD\\s+PARTITION", "ALTER\\s+TABLE[\\s\\S]*DROP\\s+PARTITION"]
    action: Ignore