暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM运维踩坑实践总结

PingCAP 2023-06-29
185

【目录】

DM 过滤可用的方案整理

  1. 标准的按照库或者表执行过滤
  2. DDL 出错 handle-error 跳过
  3. Binlog event filter 支持比表更细的粒度

【正文】

整个故事的开端和来源: dm 如何过滤表整理语句

目前从上游同步的方案有以下几种:

  1. 采用Mysql 相关的第三方订阅binlog的服务
    1. 阿里的 Canal
    2. Maxwell
    3. mysql_streamer
    4. debezium
    5. flink (对 debezium进行进一步的封装达成一些特性需求)
  2. 官方生态工具DM

这里主要描述下官方的生态工具DM,DM在运行和实践过程中,总会遇到一些问题:

  • DDL 造成的同步失败
  • 如果是DDL 造成的同步失败,可以采用 handle-error 跳过
启用 dmctl 运行 handle-error test skip ,查看运行结果 运行 query-status test , 查看运行结果 其中 test 是当前的任务名称

img

主要参考文档: https://docs.pingcap.com/zh/tidb-data-migration/dev/handle-failed-ddl-statements#handle-error

  • 同步过程中,发现有一些 语句需要跳过
    • 可以通过库名和表名,以及相关的动作进行过滤
    • 以下是官方提供的配置示例:
定义全局的数据源操作过滤规则 filters: # 定义过滤数据源特定操作的规则,可以定义多个规则 filter-rule-1: # 规则名称 schema-pattern: "test_*" # 匹配数据源的库名,支持通配符 "*" 和 "?" table-pattern: "t_*" # 匹配数据源的表名,支持通配符 "*" 和 "?" events: ["truncate table", "drop table"] # 匹配上 schema-pattern 和 table-pattern 的库或者表的操作类型 action: Ignore # 迁移(Do)还是忽略(Ignore) filter-rule-2: schema-pattern: "test" events: ["all dml"] action: Do 在数据源配置中引用数据源操作过滤规则,过滤该数据源的指定库或表的指定操作 mysql-instances: - source-id: "mysql-replica-01" # 从 source-id = mysql-replica-01 的数据源迁移数据 block-allow-list: "bw-rule-1" # 黑白名单配置名称,如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list filter-rules: ["filter-rule-1"] # 过滤数据源特定操作的规则,可以配置多个过滤规则 - source-id: "mysql-replica-02" # 从 source-id = mysql-replica-02 的数据源迁移数据 block-allow-list: "bw-rule-2" # 黑白名单配置名称,如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list filter-rules: ["filter-rule-2"] # 过滤数据源特定操作的规则,可以配置多个过滤规则

主要参考文档:

https://docs.pingcap.com/zh/tidb-data-migration/stable/task-configuration-guide#配置需要过滤的操作

  • 需要更细的粒度,直接通过binlog 进行过滤
#### 过滤分库分表的所有删除操作 需要设置下面两个 `Binlog event filter rule` 来过滤掉所有的删除操作: * `filter-table-rule` 过滤掉所有匹配到 pattern `test_*` . `t_*` 的 table 的 `turncate table` 、 `drop table` 、 `delete statement` 操作。 * `filter-schema-rule` 过滤掉所有匹配到 pattern `test_*` 的 schema 的 `drop database` 操作。 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

主要参考文档:

https://docs.pingcap.com/zh/tidb-data-migration/stable/key-features#binlog-event-filter

过滤可以参考的表达式: https://github.com/google/re2/wiki/Syntax

以上整理的实践过程,希望能帮助大家,如果有遗漏或者补充的地方,欢迎回贴!共同完善!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论