DM 任务配置文件介绍

本文档主要介绍 Data Migration (DM) 的任务配置文件 task.yaml,包含全局配置实例配置 两部分。

关于各配置项的功能和配置,请参阅数据同步功能

关键概念

关于包括 source-id 和 DM-worker ID 在内的关键概念的介绍,请参阅关键概念

配置顺序

  1. 编辑全局配置
  2. 根据全局配置编辑实例配置

全局配置

基础信息配置

  1. name: test # 任务名称,需要全局唯一。
  2. task-mode: all # 任务模式,可设为 "full"、"incremental"、"all"。
  3. is-sharding: true # 是否为分库分表合并任务。
  4. meta-schema: "dm_meta" # 下游储存 `meta` 信息的数据库。
  5. remove-meta: false # 是否在任务同步开始前移除该任务名对应的 `meta`(`checkpoint` 和 `onlineddl`)。
  6. enable-heartbeat: false # 是否开启 `heartbeat` 功能。
  7. target-database: # 下游数据库实例配置。
  8. host: "192.168.0.1"
  9. port: 4000
  10. user: "root"
  11. password: "" # 如果不为空则需经过 dmctl 加密

task-mode

  • 描述:任务模式,可以通过任务模式来指定需要执行的数据迁移工作。
  • 值为字符串(fullincrementalall)。
    • full:只全量备份上游数据库,然后将数据全量导入到下游数据库。
    • incremental:只通过 binlog 把上游数据库的增量修改同步到下游数据库, 可以设置实例配置的 meta 配置项来指定增量同步开始的位置。
    • allfull + incremental。先全量备份上游数据库,将数据全量导入到下游数据库,然后从全量数据备份时导出的位置信息 (binlog position) 开始通过 binlog 增量同步数据到下游数据库。

功能配置集

全局配置主要包含下列功能配置集。

  1. routes: # 上游和下游表之间的路由 table routing 规则集。
  2. route-rule-1:
  3. schema-pattern: "test_*"
  4. table-pattern: "t_*"
  5. target-schema: "test"
  6. target-table: "t"
  7. route-rule-2:
  8. schema-pattern: "test_*"
  9. target-schema: "test"
  10. filters: # 上游数据库实例匹配的表的 binlog event filter 规则集。
  11. filter-rule-1:
  12. schema-pattern: "test_*"
  13. table-pattern: "t_*"
  14. events: ["truncate table", "drop table"]
  15. action: Ignore
  16. filter-rule-2:
  17. schema-pattern: "test_*"
  18. events: ["all dml"] # 只执行 schema `test_*` 下面所有的 DML event。
  19. action: Do
  20. black-white-list: # 该上游数据库实例匹配的表的 black & white list 过滤规则集。
  21. bw-rule-1:
  22. do-dbs: ["~^test.*", "user"]
  23. ignore-dbs: ["mysql", "account"]
  24. do-tables:
  25. - db-name: "~^test.*"
  26. tbl-name: "~^t.*"
  27. - db-name: "user"
  28. tbl-name: "information"
  29. ignore-tables:
  30. - db-name: "user"
  31. tbl-name: "log"
  32. column-mappings: # 上游数据库实例匹配的表的 column mapping 规则集。
  33. cm-rule-1:
  34. schema-pattern: "test_*"
  35. table-pattern: "t_*"
  36. expression: "partition id"
  37. source-column: "id"
  38. target-column: "id"
  39. arguments: ["1", "test", "t", "_"]
  40. cm-rule-2:
  41. schema-pattern: "test_*"
  42. table-pattern: "t_*"
  43. expression: "partition id"
  44. source-column: "id"
  45. target-column: "id"
  46. arguments: ["2", "test", "t", "_"]
  47. mydumpers: # mydumper 处理单元运行配置参数。
  48. global:
  49. mydumper-path: "./mydumper" # mydumper binary 文件地址,这个无需设置,会由 Ansible 部署程序自动生成。
  50. threads: 16 # mydumper 从上游数据库实例导出数据的线程数量。
  51. chunk-filesize: 64 # mydumper 生成的数据文件大小,单位为 MB。
  52. skip-tz-utc: true
  53. extra-args: "-B test -T t1,t2 --no-locks"
  54. loaders: # loader 处理单元运行配置参数。
  55. global:
  56. pool-size: 16 # loader 并发执行 mydumper 的 SQL 文件的线程数量。
  57. dir: "./dumped_data" # loader 读取 mydumper 输出文件的地址,同实例对应的不同任务必须不同(mydumper 会根据这个地址输出 SQL 文件)。
  58. syncers: # syncer 处理单元运行配置参数。
  59. global:
  60. worker-count: 16 # syncer 并发同步 binlog event 的线程数量。
  61. batch: 1000 # syncer 同步到下游数据库的一个事务批次 SQL 语句数。
  62. max-retry: 100 # syncer 同步到下游数据库出错的事务的重试次数(仅限于 DML 操作)。

示例配置

本小节定义具体的数据同步子任务,DM 支持从单个或者多个上游 MySQL 实例同步数据到同一个下游数据库实例。

  1. mysql-instances:
  2. -
  3. source-id: "mysql-replica-01" # 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id` 配置。
  4. meta: # `task-mode` 为 `incremental` 且下游数据库的 `checkpoint` 不存在时 binlog 同步开始的位置; 如果 checkpoint 存在,则以 `checkpoint` 为准。
  5. binlog-name: binlog-00001
  6. binlog-pos: 4
  7. route-rules: ["route-rule-1", "route-rule-2"] # 该上游数据库实例匹配的表到下游数据库的 table routing 规则名称。
  8. filter-rules: ["filter-rule-1"] # 该上游数据库实例匹配的表的 binlog event filter 规则名称。
  9. column-mapping-rules: ["cm-rule-1"] # 该上游数据库实例匹配的表的 column mapping 规则名称。
  10. black-white-list: "bw-rule-1" # 该上游数据库实例匹配的表的 black & white list 过滤规则名称。
  11. mydumper-config-name: "global" # mydumper 配置名称。
  12. loader-config-name: "global" # loader 配置名称。
  13. syncer-config-name: "global" # syncer 配置名称。
  14. -
  15. source-id: "mysql-replica-02" # 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id` 配置。
  16. mydumper-config-name: "global" # mydumper 配置名称。
  17. loader-config-name: "global" # loader 配置名称。
  18. syncer-config-name: "global" # syncer 配置名称。

关于以上配置项的更多配置细节,参见功能配置集的相关配置项,对应关系如下:

配置项 相关配置项
route-rules routes
filter-rules filters
column-mapping-rules column-mappings
black-white-list black-white-list
mydumper-config-name mydumpers
loader-config-name loaders
syncer-config-name syncers