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