在迁移任务配置文件中,添加如下配置:

从 DM v2.0.2 开始,你也可以在上游数据库配置文件中配置 Binlog 事件过滤。见上游数据库配置文件介绍

在简单任务场景下,推荐使用通配符匹配库表名,但需注意以下版本差异:

  • 对于 v1.0.5 以前的版本,Binlog Event Filter 支持通配符,但不支持 [...][!...] 表达式。
  • schema-pattern/table-pattern:对匹配上的上游 MySQL/MariaDB 实例的表的 binlog events 或者 DDL SQL 语句通过以下规则进行过滤。

  • events:binlog events 数组,仅支持从以下 Event 中选择一项或多项。

  • action:string (Do / Ignore);进行下面规则判断,满足其中之一则过滤,否则不过滤。

    • Do:白名单。binlog event 如果满足下面两个条件之一就会被过滤掉:
      • 不在该 rule 的 events 中。
    • :黑名单。如果满足下面两个条件之一就会被过滤掉:
      • 在该 rule 的 events 中。
      • 如果规则的 sql-pattern 不为空的话,对应的 SQL 可以匹配上 sql-pattern 中任意一项。
    • 同一个表匹配上多个规则时,将会顺序应用这些规则,并且黑名单的优先级高于白名单,即如果同时存在规则 IgnoreDo 应用在某个表上,那么 Ignore 生效。

需要设置下面两个 Binlog event filter rule 来过滤掉所有的删除操作:

  • filter-table-rule 过滤掉所有匹配到 pattern test_*.t_* 的 table 的 turncate tabledrop tabledelete statement 操作。
  • filter-schema-rule 过滤掉所有匹配到 pattern test_* 的 schema 的 drop database 操作。

需要设置下面两个 只迁移 DML 操作:

  • do-table-rule 只迁移所有匹配到 pattern test_*.t_* 的 table 的 create tableinsertupdatedelete 操作。

注意

迁移 create database/table 的原因是创建库和表后才能迁移 DML

对于 TiDB parser 不支持的 SQL 语句,DM 无法解析获得 schema/table 信息,因此需要使用全局过滤规则:schema-pattern: "*"

过滤 binlog 事件 - 图2

注意

全局过滤规则的设置必须尽可能严格,以避免过滤掉需要迁移的数据。

可设置如下规则过滤某些版本的 TiDB parser 不支持的 语句: