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イベントをフィルタリングします。サポートされているイベントを以下の表に示します。sql-pattern:指定されたDDLSQLステートメントをフィルタリングします。マッチングルールは、正規表現の使用をサポートしています。action:DoまたはIgnoreDo:許可リスト。次の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