[FAQ] DM 任务文件的拆分与合并

【Task 拆分】

目前假定 DM 有个任务文件 mysql_to_tidb.yaml(简称 total_task),total_task 包含多个 do-dbs

第一步: 先暂停 total_task,将 total_task 在 dm_meta 中的 checkpoint 表 total_task_syncer_checkpoint 复制一份。命名为 new_total_task_syncer_checkpoint

第二步: 修改 total_task,从 do-dbs 中去掉想要拆分的 dbs, 并 update-task ./task_a.yaml 更新 dm-worker 中的任务信息

第三步: 新加task_name: new_total_task 的 yaml 文件,把拆分出现的 dbs 加入到 do-dbs 列表中。除了 task_name/do-dbs 外,其他配置和 total_task 保持一致。

第四步:回复原任务和拆分的任务

  1. resume-task total_task
  2. start-task ./new_total_task.yaml

【多个Task 合并】

前提:要确保多个 task 同步任务的 checkpoint 位点相近。

方法一:新建增量同步任务使多个 task 合并(推荐)

  1. 停掉 task 同步任务
  2. 从 dm_meta 中查看多个 task 任务的 checkpoint 位点(注意,该位点非实时更新)
  3. 记录多个 task 同步任务中最小的 checkpoint 、 最大的 checkpoint 位点
  4. 新建 task 配置增量同步
  5. 增量同步起始位点为第 2 步中获取到的最小 checkpoint 点
  6. task 中配置黑白名单,白名单中配置所有需要同步的表
  7. task 中配置 safe-mode 为 true
  8. 开启 task 同步任务

注意:在 safe-mode 为 true 的配置下,同步一段时间后,如果这时的这个合并后的 task 的 checkpoint > 了第 2 步时记录的最大 checkpoint,则可以 stop-task 后把 safe-mode 改回 false 再重新 start-task。

方法二:将新增 task 与原有 task 合并

  1. 停掉 task 同步任务
  2. 从 dm_meta 中查看多个 task 任务的 checkpoint 位点(注意,该位点非实时更新)
  3. 记录多个 task 同步任务中最小的 checkpoint 、 最大的 checkpoint 位点
  4. 修改原有 task 配置
  5. 修改原有 task 中的 xxx_syncer_checkpoint 位点信息,设置为最小的 checkpoint 位点(谨慎修改)
  6. task 配置中增加白名单表
  7. task 配置中设置 safe-mode 为 true
  8. 开启 task 同步任务

注意:在 safe-mode 为 true 的配置下,同步一段时间后,如果这时的这个合并后的 task 的 checkpoint > 了第 2 步时记录的最大 checkpoint,则可以 stop-task 后把 safe-mode 改回 false 再重新 start-task。

【参考案例】