Binlogイベントをフィルタリングする
このドキュメントでは、DM を使用して継続的な増分データ レプリケーションを実行するときに、 binlogイベントをフィルター処理する方法について説明します。詳細なレプリケーション手順については、シナリオ別に次のドキュメントを参照してください。
- 小規模データセットを MySQL から TiDB に移行する
 - 大規模なデータセットをMySQLからTiDBに移行する
 - 小さなデータセットの MySQL シャードを TiDB に移行してマージする
 - 大規模データセットの MySQL シャードを TiDB に移行してマージする
 
コンフィグレーション
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イベントを除外します 入れる DMML の DMLイベントを挿入 アップデート DMML の DMLイベントの更新 消去 DMML の DMLイベントの削除 データベースを作成する DDL データベースイベントの作成 データベースを削除 DDL データベースイベントの削除 テーブルを作成する DDL テーブルイベントの作成 インデックスを作成 DDL インデックスイベントの作成 ドロップテーブル DDL テーブルドロップイベント テーブルを切り捨てる DDL テーブル切り捨てイベント テーブル名の変更 DDL テーブル名の変更イベント インデックスを削除 DDL インデックス削除イベント テーブルを変更する DDL テーブル変更イベント sql-pattern: 指定された DDL SQL ステートメントをフィルタリングします。一致ルールは正規表現の使用をサポートします。action:DoまたはIgnoreDo: 許可リスト。次の 2 つの条件のいずれかを満たす場合、 binlogイベントが複製されます。- イベントはルール設定と一致します。
 - sql-pattern が指定されており、イベントの SQL ステートメントが sql-pattern オプションのいずれかと一致します。
 
Ignore: ブロック リスト。次の 2 つの条件のいずれかを満たす場合、 binlogイベントはフィルター処理されます。- イベントはルール設定と一致します。
 - sql-pattern が指定されており、イベントの SQL ステートメントが sql-pattern オプションのいずれかと一致します。
 
DoとIgnore両方が設定されている場合、IgnoreDoよりも優先されます。つまり、IgnoreとDo両方の条件を満たすイベントは除外されます。
アプリケーションシナリオ
このセクションでは、 binlogイベント フィルターのアプリケーション シナリオについて説明します。
すべてのシャーディング削除操作を除外する
すべての削除操作を除外するには、以下に示すようにfilter-table-ruleとfilter-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