DM 任务完整配置文件介绍

优质
小牛编辑
130浏览
2023-12-01

本文档主要介绍 Data Migration (DM) 的任务完整的配置文件,包含关键概念

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

关闭检查项

DM 会根据任务类型进行相应检查。可以参考关闭检查项,在任务配置文件中使用 ignore-checking-items 配置关闭相应检查。

完整配置文件示例

下面是一个完整的配置文件示例,通过该示例可以完成复杂的数据迁移功能。

---

# ----------- 全局配置 -----------
## ********* 基本信息配置 *********
name: test                      # 任务名称,需要全局唯一
task-mode: all                  # 任务模式,可设为 "full"、"incremental"、"all"
shard-mode: "pessimistic"       # 如果为分库分表合并任务则需要配置该项。默认使用悲观协调模式 "pessimistic",在深入了解乐观协调模式的原理和使用限制后,也可以设置为乐观协调模式 "optimistic"
meta-schema: "dm_meta"          # 下游储存 `meta` 信息的数据库
timezone: "Asia/Shanghai"       # 时区
case-sensitive: false           # schema/table 是否大小写敏感
online-ddl-scheme: "gh-ost"     # 目前仅支持 "gh-ost" 、"pt"
ignore-checking-items: []       # 不关闭任何检查项。可选的检查项有 "all"、"dump_privilege"、"replication_privilege"、"version"、"binlog_enable"、"binlog_format"、"binlog_row_image"、"table_schema"、"schema_of_shard_tables"、"auto_increment_ID"
clean-dump-file: true           # 是否清理 dump 阶段产生的文件,包括 metadata 文件、建库建表 SQL 文件以及数据导入 SQL 文件

target-database:                # 下游数据库实例配置
  host: "192.168.0.1"
  port: 4000
  user: "root"
  password: "/Q7B9DizNLLTTfiZHv9WoEAKamfpIUs="  # 推荐使用经 dmctl 加密后的密码
  max-allowed-packet: 67108864                  # 设置 DM 内部连接 TiDB 服务器时,TiDB 客户端的 "max_allowed_packet" 限制(即接受的最大数据包限制),单位为字节,默认 67108864 (64 MB)
                                                # 该配置项从 DM v2.0.0 版本起弃用,DM 会自动获取连接 TiDB 的 "max_allowed_packet"
  session:                                      # 设置 TiDB 的 session 变量,在 v1.0.6 版本引入。更多变量及解释参见 `https://docs.pingcap.com/zh/tidb/stable/system-variables`
    sql_mode: "ANSI_QUOTES,NO_ZERO_IN_DATE,NO_ZERO_DATE" # 从 DM v2.0.0 版本起,如果配置文件中没有出现该项,DM 会自动从下游 TiDB 中获得适合用于 "sql_mode" 的值。手动配置该项具有更高优先级
    tidb_skip_utf8_check: 1                              # 从 DM v2.0.0 版本起,如果配置文件中没有出现该项,DM 会自动从下游 TiDB 中获得适合用于 "tidb_skip_utf8_check" 的值。手动配置该项具有更高优先级
    tidb_constraint_check_in_place: 0
  security:                       # 下游 TiDB TLS 相关配置                             
    ssl-ca: "/path/to/ca.pem"
    ssl-cert: "/path/to/cert.pem"
    ssl-key: "/path/to/key.pem"

## ******** 功能配置集 **********

routes:                           # 上游和下游表之间的路由 table routing 规则集
  route-rule-1:                   # 配置名称
    schema-pattern: "test_*"      # 库名匹配规则,支持通配符 "*" 和 "?"
    table-pattern: "t_*"          # 表名匹配规则,支持通配符 "*" 和 "?"
    target-schema: "test"         # 目标库名称
    target-table: "t"             # 目标表名称
  route-rule-2:
    schema-pattern: "test_*"
    target-schema: "test"

filters:                                        # 上游数据库实例匹配的表的 binlog event filter 规则集
  filter-rule-1:                                # 配置名称
    schema-pattern: "test_*"                    # 库名匹配规则,支持通配符 "*" 和 "?"
    table-pattern: "t_*"                        # 表名匹配规则,支持通配符 "*" 和 "?"
    events: ["truncate table", "drop table"]    # 匹配哪些 event 类型
    action: Ignore                              # 对与符合匹配规则的 binlog 迁移(Do)还是忽略(Ignore)
  filter-rule-2:
    schema-pattern: "test_*"
    events: ["all dml"]
    action: Do

block-allow-list:                    # 上游数据库实例匹配的表的 block-allow-list 过滤规则集,如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-list
  bw-rule-1:                         # 配置名称
    do-dbs: ["~^test.*", "user"]     # 迁移哪些库
    ignore-dbs: ["mysql", "account"] # 忽略哪些库
    do-tables:                       # 迁移哪些表
    - db-name: "~^test.*"
      tbl-name: "~^t.*"
    - db-name: "user"
      tbl-name: "information"
    ignore-tables:                   # 忽略哪些表
    - db-name: "user"
      tbl-name: "log"

mydumpers:                           # Dumpling 处理单元的运行配置参数
  global:                            # 配置名称
    threads: 4                       # Dumpling 从上游数据库实例导出数据的线程数量,默认值为 4
    chunk-filesize: 64               # Dumpling 生成的数据文件大小,默认值为 64,单位为 MB
    skip-tz-utc: true                # 忽略对时间类型数据进行时区转化,默认值为 true
    extra-args: "--consistency none" # Dumpling 的其他参数,不需要在 extra-args 中配置 table-list,DM 会自动生成

loaders:                             # Loader 处理单元的运行配置参数
  global:                            # 配置名称
    pool-size: 16                    # Loader 并发执行 Dumpling 的 SQL 文件的线程数量,默认值为 16,当有多个实例同时向 TiDB 迁移数据时可根据负载情况适当调小该值
    dir: "./dumped_data"             # Dumpling 输出 SQL 文件的目录,同时也是 Loader 读取文件的目录。该配置项的默认值为 "./dumped_data"。同实例对应的不同任务必须配置不同的目录
    

syncers:                             # Syncer 处理单元的运行配置参数
  global:                            # 配置名称
    worker-count: 16                 # Syncer 并发迁移 binlog event 的线程数量,默认值为 16,当有多个实例同时向 TiDB 迁移数据时可根据负载情况适当调小该值
    batch: 100                       # Syncer 迁移到下游数据库的一个事务批次 SQL 语句数,默认值为 100
    enable-ansi-quotes: true         # 若 `session` 中设置 `sql-mode: "ANSI_QUOTES"`,则需开启此项
    safe-mode: false                 # 设置为 true,则将来自上游的 `INSERT` 改写为 `REPLACE`,将 `UPDATE` 改写为 `DELETE` 与 `REPLACE`,保证在表结构中存在主键或唯一索引的条件下迁移数据时可以重复导入 DML。在启动或恢复增量复制任务的前 5 分钟内 TiDB DM 会自动启动 safe mode

# ----------- 实例配置 -----------
mysql-instances:
  -
    source-id: "mysql-replica-01"           # 对应 source.toml 中的 `source-id`
    meta:                                   # `task-mode` 为 `incremental` 且下游数据库的 `checkpoint` 不存在时 binlog 迁移开始的位置; 如果 checkpoint 存在,则以 `checkpoint` 为准
      binlog-name: binlog.000001
      binlog-pos: 4
      binlog-gtid: "03fc0263-28c7-11e7-a653-6c0b84d59f30:1-7041423,05474d3c-28c7-11e7-8352-203db246dd3d:1-170"  # 对于 source 中指定了 `enable-gtid: true` 的增量任务,需要指定该值

    route-rules: ["route-rule-1", "route-rule-2"]  # 该上游数据库实例匹配的表到下游数据库的 table routing 规则名称
    filter-rules: ["filter-rule-1"]                # 该上游数据库实例匹配的表的 binlog event filter 规则名称
    block-allow-list:  "bw-rule-1"                 # 该上游数据库实例匹配的表的 block-allow-list 过滤规则名称,如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-list

    mydumper-config-name: "global"          # mydumpers 配置的名称
    loader-config-name: "global"            # loaders 配置的名称
    syncer-config-name: "global"            # syncers 配置的名称

  -
    source-id: "mysql-replica-02"  # 对应 source.toml 中的 `source-id`
    mydumper-thread: 4             # Dumpling 用于导出数据的线程数量,等同于 mydumpers 配置中的 `threads`,当同时指定它们时 `mydumper-thread` 优先级更高
    loader-thread: 16              # Loader 用于导入数据的线程数量,等同于 loaders 配置中的 `pool-size`,当同时指定它们时 `loader-thread` 优先级更高。当有多个实例同时向 TiDB 迁移数据时可根据负载情况适当调小该值
    syncer-thread: 16              # Syncer 用于复制增量数据的线程数量,等同于 syncers 配置中的 `worker-count`,当同时指定它们时 `syncer-thread` 优先级更高。当有多个实例同时向 TiDB 迁移数据时可根据负载情况适当调小该值

配置顺序

通过上面的配置文件示例,可以看出配置文件总共分为两个部分:全局配置实例配置,其中全局配置又分为基本信息配置实例配置,配置顺序如下:

  1. 编辑全局配置

    任务基本信息配置

    配置任务的基本信息,配置项的说明参见以上示例配置文件中的注释。其中 task-mode 需要特殊说明:

    task-mode

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

    功能配置集

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

    配置项说明
    routes上游和下游表之间的路由 table routing 规则集。如果上游与下游的库名、表名一致,则不需要配置该项。使用场景及示例配置参见 Table Routing
    filters上游数据库实例匹配的表的 binlog event filter 规则集。如果不需要对 binlog 进行过滤,则不需要配置该项。使用场景及示例配置参见 Binlog Event Filter
    block-allow-list该上游数据库实例匹配的表的 block & allow lists 过滤规则集。建议通过该项指定需要迁移的库和表,否则会迁移所有的库和表。使用场景及示例配置参见 Block & Allow Lists
    mydumpersDumpling 处理单元的运行配置参数。如果默认配置可以满足需求,则不需要配置该项,也可以只使用 mydumper-threadthread 配置项单独进行配置。
    loadersLoader 处理单元的运行配置参数。如果默认配置可以满足需求,则不需要配置该项,也可以只使用 loader-threadpool-size 配置项单独进行配置。
    syncersSyncer 处理单元的运行配置参数。如果默认配置可以满足需求,则不需要配置该项,也可以只使用 syncer-threadworker-count 配置项单独进行配置。

    各个功能配置集的参数及解释参见实例配置

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

    在该项配置中设置数据迁移子任务中各个功能对应的配置集中的配置名称,关于这些配置项的更多配置细节,参见功能配置集的相关配置项,对应关系如下:

    配置项相关配置项
    route-rulesroutes
    filter-rulesfilters
    block-allow-listblock-allow-list
    mydumper-config-namemydumpers
    loader-config-nameloaders
    syncer-config-namesyncers