TiDB Data Migration Binlog Event Filter
TiDB Data Migration (DM) provides the binlog event filter feature to filter out, block and report errors, or only receive specified types of binlog events for some schemas or tables. For example, you can filter out all TRUNCATE TABLE or INSERT events. The binlog event filter feature is more fine-grained than the block and allow lists feature.
Configure the binlog event filter
In the task configuration file, add the following configuration:
filters:
rule-1:
schema-pattern: "test_*"
table-pattern: "t_*"
events: ["truncate table", "drop table"]
sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"]
action: Ignore
Starting from DM v2.0.2, you can configure the binlog event filter in the source configuration file. For details, see Upstream Database Configuration File.
When you use the wildcard for matching schemas and tables, note the following:
schema-patternandtable-patternonly support wildcards, including*,?, and[]. There can only be one*symbol in a wildcard match, and it must be at the end. For example, intable-pattern: "t_*","t_*"indicates all tables starting witht_. See wildcard matching for details.sql-patternonly supports regular expressions.
Parameter descriptions
schema-pattern/table-pattern: the binlog events or DDL SQL statements of upstream MySQL or MariaDB instance tables that matchschema-pattern/table-patternare filtered by the rules below.events: the binlog event array. You can only select one or moreEvents from the following table:Events Type Description allIncludes all the events below all dmlIncludes all DML events below all ddlIncludes all DDL events below incompatible ddl changesIncludes all incompatible DDL events, where "incompatible DDL" means DDL operations that might cause data loss noneIncludes none of the events below none ddlIncludes none of the DDL events below none dmlIncludes none of the DML events below insertDML The INSERTDML eventupdateDML The UPDATEDML eventdeleteDML The DELETEDML eventcreate databaseDDL The CREATE DATABASEDDL eventdrop databaseincompatible DDL The DROP DATABASEDDL eventcreate tableDDL The CREATE TABLEDDL eventcreate indexDDL The CREATE INDEXDDL eventdrop tableincompatible DDL The DROP TABLEDDL eventtruncate tableincompatible DDL The TRUNCATE TABLEDDL eventrename tableincompatible DDL The RENAME TABLEDDL eventdrop indexincompatible DDL The DROP INDEXDDL eventalter tableDDL The ALTER TABLEDDL eventvalue range decreaseincompatible DDL A DDL statement that decreases the value range of a column field, such as the ALTER TABLE MODIFY COLUMNstatement that changesVARCHAR(20)toVARCHAR(10)precision decreaseincompatible DDL A DDL statement that decreases the precision of a column field, such as the ALTER TABLE MODIFY COLUMNstatement that changesDecimal(10, 2)toDecimal(10, 1)modify columnincompatible DDL A DDL statement that changes the type of a column field, such as the ALTER TABLE MODIFY COLUMNstatement that changesINTtoVARCHARrename columnincompatible DDL A DDL statement that changes the name of a column, such as the ALTER TABLE RENAME COLUMNstatementrename indexincompatible DDL A DDL statement that changes the index name, such as the ALTER TABLE RENAME INDEXstatementdrop columnincompatible DDL A DDL statement that drops a column from a table, such as the ALTER TABLE DROP COLUMNstatementdrop indexincompatible DDL A DDL statement that drops an index in a table, such as the ALTER TABLE DROP INDEXstatementtruncate table partitionincompatible DDL A DDL statement that removes all data from a specified partition, such as the ALTER TABLE TRUNCATE PARTITIONstatementdrop primary keyincompatible DDL A DDL statement that drops the primary key, such as the ALTER TABLE DROP PRIMARY KEYstatementdrop unique keyincompatible DDL A DDL statement that drops a unique key, such as the ALTER TABLE DROP UNIQUE KEYstatementmodify default valueincompatible DDL A DDL statement that modifies a column's default value, such as the ALTER TABLE CHANGE DEFAULTstatementmodify constraintincompatible DDL A DDL statement that modifies the constraint, such as the ALTER TABLE ADD CONSTRAINTstatementmodify columns orderincompatible DDL A DDL statement that modifies the order of the columns, such as the ALTER TABLE CHANGE AFTERstatementmodify charsetincompatible DDL A DDL statement that modifies the charset of a column, such as the ALTER TABLE MODIFY CHARSETstatementmodify collationincompatible DDL A DDL statement that modifies a column collation, such as the ALTER TABLE MODIFY COLLATEstatementremove auto incrementincompatible DDL A DDL statement that removes an auto-incremental key modify storage engineincompatible DDL A DDL statement that modifies the table storage engine, such as the ALTER TABLE ENGINE = MyISAMstatementreorganize table partitionincompatible DDL A DDL statement that reorganizes partitions in a table, such as the ALTER TABLE REORGANIZE PARTITIONstatementrebuild table partitionincompatible DDL A DDL statement that rebuilds the table partition, such as the ALTER TABLE REBUILD PARTITIONstatementexchange table partitionincompatible DDL A DDL statement that exchanges a partition between two tables, such as the ALTER TABLE EXCHANGE PARTITIONstatementcoalesce table partitionincompatible DDL A DDL statement that decreases the number of partitions in a table, such as the ALTER COALESCE PARTITIONstatementsql-pattern: it is used to filter specified DDL SQL statements. The matching rule supports using a regular expression. For example,"^DROP\\s+PROCEDURE".action: the string (Do/Ignore/Error). Based on the rules, it judges as follows:Do: the allow list. The binlog is filtered in either of the following two conditions:- The type of the event is not in the
eventlist of the rule. - The SQL statement of the event cannot be matched by
sql-patternof the rule.
- The type of the event is not in the
Ignore: the block list. The binlog is filtered in either of the following two conditions:- The type of the event is in the
eventlist of the rule. - The SQL statement of the event can be matched by
sql-patternof the rule.
- The type of the event is in the
Error: the error list. The binlog reports an error in either of the following two conditions:- The type of the event is in the
eventlist of the rule. - The SQL statement of the event can be matched by
sql-patternof the rule.
- The type of the event is in the
- When multiple rules match the same table, the rules are applied sequentially. The block list has a higher priority than the error list, and the error list has a higher priority than the allow list. For example:
- If both the
IgnoreandErrorrules are applied to the same table, theIgnorerule takes effect. - If both the
ErrorandDorules are applied to the same table, theErrorrule takes effect.
- If both the
Usage examples
This section shows the usage examples in the scenario of sharding (sharded schemas and tables).
Filter all sharding deletion operations
To filter out all deletion operations, configure the following two filtering rules:
filter-table-rulefilters out theTRUNCATE TABLE,DROP TABLEandDELETE STATEMENToperations of all tables that match thetest_*.t_*pattern.filter-schema-rulefilters out theDROP DATABASEoperation of all schemas that match thetest_*pattern.
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
Only migrate sharding DML statements
To only migrate sharding DML statements, configure the following two filtering rules:
do-table-ruleonly migrates theCREATE TABLE,INSERT,UPDATEandDELETEstatements of all tables that match thetest_*.t_*pattern.do-schema-ruleonly migrates theCREATE DATABASEstatement of all schemas that match thetest_*pattern.
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
Filter out the SQL statements that TiDB does not support
To filter out the PROCEDURE statements that TiDB does not support, configure the following filter-procedure-rule:
filters:
filter-procedure-rule:
schema-pattern: "test_*"
table-pattern: "t_*"
sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"]
action: Ignore
filter-procedure-rule filters out the ^CREATE\\s+PROCEDURE and ^DROP\\s+PROCEDURE statements of all tables that match the test_*.t_* pattern.
Filter out the SQL statements that the TiDB parser does not support
For the SQL statements that the TiDB parser does not support, DM cannot parse them and get the schema/table information. So you must use the global filtering rule: schema-pattern: "*".
To filter out the PARTITION statements that the TiDB parser (of some version) does not support, configure the following filtering rule:
filters:
filter-partition-rule:
schema-pattern: "*"
sql-pattern: ["ALTER\\s+TABLE[\\s\\S]*ADD\\s+PARTITION", "ALTER\\s+TABLE[\\s\\S]*DROP\\s+PARTITION"]
action: Ignore
Report errors on some DDL statements
If you need to block and report errors on DDL statements generated by some upstream operations before DM replicates them to TiDB, you can use the following settings:
filters:
filter-procedure-rule:
schema-pattern: "test_*"
table-pattern: "t_*"
events: ["truncate table", "truncate table partition"]
action: Error