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-patterntable-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 イベントが含まれます
    incompatible ddl changesすべての互換性のない DDL イベントが含まれます。「互換性のない DDL」とは、データ損失を引き起こす可能性のある DDL 操作を意味します。
    none以下のイベントは含まれません
    none ddl以下の DDL イベントは含まれません
    none dml以下の DML イベントは含まれません
    insertDMLINSERT DML イベント
    updateDMLUPDATE DML イベント
    deleteDMLDELETE DML イベント
    create databaseDDLCREATE DATABASE DDL イベント
    drop database互換性のない DDLDROP DATABASE DDL イベント
    create tableDDLCREATE TABLE DDL イベント
    create indexDDLCREATE INDEX DDL イベント
    drop table互換性のない DDLDROP TABLE DDL イベント
    truncate table互換性のない DDLTRUNCATE TABLE DDL イベント
    rename table互換性のない DDLRENAME TABLE DDL イベント
    drop index互換性のない DDLDROP INDEX DDL イベント
    alter tableDDLALTER TABLE DDL イベント
    value range decrease互換性のない DDL列フィールドの値の範囲を減らす DDL ステートメント ( VARCHAR(20)VARCHAR(10)に変更するALTER TABLE MODIFY COLUMNステートメントなど)
    precision decrease互換性のない DDL列フィールドの精度を下げる DDL ステートメント ( Decimal(10, 2)Decimal(10, 1)に変更するALTER TABLE MODIFY COLUMNステートメントなど)
    modify column互換性のない DDL列フィールドの型を変更する DDL ステートメント ( INTVARCHARに変更するALTER TABLE MODIFY COLUMNステートメントなど)
    rename column互換性のない DDL列の名前を変更する DDL ステートメント ( ALTER TABLE RENAME COLUMNステートメントなど)
    rename index互換性のない DDLインデックス名を変更する DDL ステートメント ( ALTER TABLE RENAME INDEXステートメントなど)
    drop column互換性のない DDLALTER TABLE DROP COLUMNステートメントなど、テーブルから列を削除する DDL ステートメント
    drop index互換性のない DDLALTER TABLE DROP INDEXステートメントなど、テーブル内のインデックスを削除する DDL ステートメント
    truncate table partition互換性のない DDL指定されたパーティションからすべてのデータを削除する DDL ステートメント ( ALTER TABLE TRUNCATE PARTITIONステートメントなど)
    drop primary key互換性のない DDL主キーを削除する DDL ステートメント ( ALTER TABLE DROP PRIMARY KEYステートメントなど)
    drop unique key互換性のない DDL一意のキーを削除する DDL ステートメント ( ALTER TABLE DROP UNIQUE KEYステートメントなど)
    modify default value互換性のない DDL列のデフォルト値を変更する DDL ステートメント ( ALTER TABLE CHANGE DEFAULTステートメントなど)
    modify constraint互換性のない DDL制約を変更する DDL ステートメント ( ALTER TABLE ADD CONSTRAINTステートメントなど)
    modify columns order互換性のない DDL列の順序を変更する DDL ステートメント ( ALTER TABLE CHANGE AFTERステートメントなど)
    modify charset互換性のない DDLALTER TABLE MODIFY CHARSETステートメントなど、列の文字セットを変更する DDL ステートメント
    modify collation互換性のない DDL列の照合順序を変更する DDL ステートメント ( ALTER TABLE MODIFY COLLATEステートメントなど)
    remove auto increment互換性のない DDL自動増分キーを削除する DDL ステートメント
    modify storage engine互換性のない DDLテーブルstorageエンジンを変更する DDL ステートメント ( ALTER TABLE ENGINE = MyISAMステートメントなど)
    reorganize table partition互換性のない DDLALTER TABLE REORGANIZE PARTITIONステートメントなど、テーブル内のパーティションを再編成する DDL ステートメント
    rebuild table partition互換性のない DDLテーブル パーティションを再構築する DDL ステートメント ( ALTER TABLE REBUILD PARTITIONステートメントなど)
    exchange table partition互換性のない DDL2 つのテーブル間のパーティションを交換する DDL ステートメント ( ALTER TABLE EXCHANGE PARTITIONステートメントなど)
    coalesce table partition互換性のない DDLテーブル内のパーティションの数を減らす DDL ステートメント ( ALTER COALESCE PARTITIONステートメントなど)
  • sql-pattern : 指定された DDL SQL ステートメントをフィルタリングするために使用されます。一致ルールでは正規表現の使用がサポートされています。たとえば、 "^DROP\\s+PROCEDURE"

  • action : 文字列 ( Do / Ignore / Error )。ルールに基づき、以下のように判断します。

    • Do : 許可リスト。binlogは、次の 2 つの条件のいずれかでフィルタリングされます。
      • イベントのタイプはルールのリストeventにありません。
      • イベントの SQL ステートメントはルールのsql-patternと一致できません。
    • Ignore : ブロックリスト。binlogは、次の 2 つの条件のいずれかでフィルタリングされます。
      • イベントのタイプはルールのリストeventにあります。
      • イベントの SQL ステートメントは、ルールのsql-patternと照合できます。
    • Error : エラーリスト。 binlog は、次の 2 つの条件のいずれかでエラーを報告します。
      • イベントのタイプはルールのリストeventにあります。
      • イベントの SQL ステートメントは、ルールのsql-patternと照合できます。
    • 複数のルールが同じテーブルに一致する場合、ルールは順番に適用されます。ブロック リストはエラー リストよりも優先度が高く、エラー リストは許可リストよりも優先度が高くなります。例えば:
      • IgnoreError両方のルールが同じテーブルに適用される場合、 Ignoreルールが有効になります。
      • ErrorDo両方のルールが同じテーブルに適用される場合、 Errorルールが有効になります。

使用例

このセクションでは、シャーディング (シャードされたスキーマとテーブル) のシナリオでの使用例を示します。

すべてのシャーディング削除操作をフィルタリングする

すべての削除操作をフィルターで除外するには、次の 2 つのフィルター ルールを構成します。

  • filter-table-rule test_*に一致するすべてのテーブルのTRUNCATE TABLEDROP TABLE 、およびDELETE STATEMENT操作を除外します。 t_*パターン。
  • filter-schema-rule test_*パターンに一致するすべてのスキーマの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-rule test_*に一致するすべてのテーブルのCREATE TABLEINSERTUPDATE 、および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

一部の DDL ステートメントのエラーを報告する

DM が TiDB に DDL ステートメントをレプリケートする前に、一部のアップストリーム操作によって生成された DDL ステートメントのエラーをブロックして報告する必要がある場合は、次の設定を使用できます。

filters: filter-procedure-rule: schema-pattern: "test_*" table-pattern: "t_*" events: ["truncate table", "truncate table partition"] action: Error

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