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イベント フィルターを構成できます。詳細については、 アップストリーム データベースコンフィグレーションファイルを参照してください。
単純なシナリオでは、スキーマとテーブルの一致にワイルドカードを使用することをお勧めします。ただし、次のバージョンの違いに注意してください。
DM v1.0.5 以降のバージョンの場合、 binlogイベント フィルターはワイルドカードマッチサポートしますが、ワイルドカード式で指定できるのは
*だけであり、最後に*を配置する必要があります。v1.0.5 より前のバージョンの DM の場合、 binlogイベント フィルターはワイルドカードをサポートしますが、
[...]と[!...]式はサポートしません。
パラメータの説明
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 TABLEDROP 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-ruletest_*パターンに一致するすべてのスキーマの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 パーサーtableサポートしていない SQL ステートメントの場合、DM はそれらを解析してschema情報を取得できません。したがって、グローバル フィルタリング ルール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