重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

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すべてのDDLイベントを除外します
    なしdmlすべてのDMLイベントを除外します
    入れるDMLDMLイベントを挿入します
    アップデートDMLDMLイベントを更新する
    消去DMLDMLイベントを削除する
    データベースを作成するDDLデータベースイベントの作成
    データベースを削除しますDDLデータベースイベントの削除
    テーブルを作成するDDLテーブルイベントの作成
    インデックスを作成するDDLインデックスイベントの作成
    ドロップテーブルDDLドロップテーブルイベント
    テーブルを切り捨てますDDLテーブルイベントの切り捨て
    テーブルの名前を変更DDLテーブルイベントの名前を変更
    ドロップインデックスDDLドロップインデックスイベント
    他の机DDLテーブルイベントの変更
  • sql-pattern :指定されたDDLSQLステートメントをフィルタリングします。マッチングルールは、正規表現の使用をサポートしています。

  • actionDoまたは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イベントをフィルタリングする