Binlogイベントのフィルタリング

このドキュメントでは、DM を使用して継続的な増分データ レプリケーションを実行するときに、binlog イベントをフィルター処理する方法について説明します。詳細なレプリケーション手順については、シナリオごとに次のドキュメントを参照してください。

Configuration / コンフィグレーション

binlog イベント フィルターを使用するには、以下に示すように、DM のタスク構成ファイルにfilterを追加します。

filters: rule-1: schema-pattern: "test_*" table-pattern: "t_*" events: ["truncate table", "drop table"] sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"] action: Ignore
  • schema-pattern / table-pattern : スキーマまたはテーブルに一致するフィルター

  • events : binlog イベントをフィルタリングします。サポートされているイベントを次の表に示します。

    イベントカテゴリー説明
    全てすべてのイベントを含む
    すべてのdmlすべての DML イベントを含む
    すべての ddlすべての DDL イベントを含む
    なしイベントを含まない
    なしすべての DDL イベントを除外します
    dml なしすべての DML イベントを除外します
    入れるDMLDML イベントの挿入
    アップデートDMLDML イベントの更新
    消去DMLDML イベントの削除
    データベースを作成するDDLデータベース イベントの作成
    データベースをドロップDDLデータベースのドロップ イベント
    テーブルを作成DDLテーブル イベントの作成
    インデックスを作成DDLインデックス イベントの作成
    ドロップテーブルDDLテーブルドロップイベント
    テーブルを切り捨てるDDLテーブル イベントの切り捨て
    テーブルの名前を変更DDLテーブルイベントの名前変更
    ドロップ インデックスDDLドロップ インデックス イベント
    他の机DDLテーブル変更イベント
  • sql-pattern : 指定された DDL SQL ステートメントをフィルター処理します。一致ルールは、正規表現の使用をサポートしています。

  • action : DoまたはIgnore

    • Do : 許可リスト。次の 2 つの条件のいずれかを満たす場合、binlog イベントはレプリケートされます。

      • イベントはルール設定と一致します。
      • sql-pattern が指定されており、イベントの SQL ステートメントが sql-pattern オプションのいずれかに一致します。
    • Ignore : ブロック リスト。次の 2 つの条件のいずれかを満たす場合、binlog イベントは除外されます。

      • イベントはルール設定と一致します。
      • sql-pattern が指定されており、イベントの SQL ステートメントが sql-pattern オプションのいずれかに一致します。

    DoIgnoreの両方が構成されている場合、 IgnoreDoよりも優先度が高くなります。つまり、 IgnoreDoの両方の条件を満たすイベントが除外されます。

アプリケーション シナリオ

このセクションでは、binlog イベント フィルターのアプリケーション シナリオについて説明します。

すべてのシャーディング削除操作を除外します

すべての削除操作を除外するには、以下に示すようにfilter-table-rulefilter-schema-ruleを構成します。

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 つのBinlog event filter ruleを構成します。

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 でサポートされていない SQL ステートメントを除外するには、以下に示すようにfilter-procedure-ruleを構成します。

filters: filter-procedure-rule: schema-pattern: "*" sql-pattern: [".*\\s+DROP\\s+PROCEDURE", ".*\\s+CREATE\\s+PROCEDURE", "ALTER\\s+TABLE[\\s\\S]*ADD\\s+PARTITION", "ALTER\\s+TABLE[\\s\\S]*DROP\\s+PARTITION"] action: Ignore

こちらもご覧ください

SQL 式を使用してBinlogイベントをフィルタリングする