请问修改了DM的task.yaml文件,如何重启生效?

tiup dmctl --master-addr 172.19.136.24:8261 stop task.yaml
tiup dmctl --master-addr 172.19.136.24:8261 start task.yaml

我看官网介绍, stop-task 一般用于永久删除迁移任务或通过与 start-task 配合以更新配置信息。

所以不敢轻易stop-task,请问修改了DM的task.yaml文件,如何重启生效?谢谢。

1 个赞

stop start 应该是没问题的 task的元数据不会被删除

1 个赞

你可以在测试环境先试试,个人理解是没问题的

1 个赞

下游有 checkpoint 的,只要下次别改新的任务名或者 --remove-meta 就行。

1 个赞

修改 DM task 配置文件,可以按如下步骤生效:

  1. 停止 DM 任务
    tiup dmctl --master-addr <master-addr> stop-task <task-name | task-file>
  2. 修改 DM task 配置文件
  3. 使用新的配置启动 DM 任务
    tiup dmctl --master-addr <master-addr> start-task <new-task-file>

stop-task 停止 DM 任务,并不会移除已经写入到下游数据库中的数据以及其中的 checkpoint 等 dm_meta 信息。如果你是误操作,也就是没有更新 task 配置文件,这时只需要使用旧的配置文件启动 DM 任务(命令见上面 3),还会从之前的位置继续复制。

1 个赞

正常的stop-task,start-task就行,同步信息是维护再dm_meta库里面的对应表的

1 个赞

stop再启动后,在stop期间插入的数据,在恢复后还会同步过去吗?我看视频为啥说这期间的数据start后不会同步过去

正常的 stop 然后 start 是会从上次的地方开始同步的(记录了 checkpoint)。当然也得看你配置修改了什么,比如说加了一些 rule 之类的,那某些 binlog 就可能同步不过去;另外,下次 start-task 的时候,如果设置了 --remove-meta 则会导致从头开始同步。

1 个赞

如果你 stop 后,没有做其他任何操作,再以之前的配置 start 同步任务,停止时段主库产生的变动,都会同步过去。这个是没问题的,你可以搞个测试环境验证下。

其实,这个就好比 MySQL 的主从复制,当你在从库 stop slave 后,故意等 10min 后,再次 start slave,这期间的变动,也会在复制线程启动后自动复制过去。这里的关键点是“复制元信息”是持久化保存着的,所以启动后能知道从哪里继续复制。

好的,我会测试一下的。dm在同步的时候会默认同步系统库和表吗?需要在任务文件中忽略这些库吗?

抱歉,默认是否同步系统库、表,这个我还真没做过测试,我们生产中都是走的白名单。这个可能需要你自己验证下,或者发个帖子问问其他人了。

1 个赞

不需要的。不过推荐使用 block-allow-list 和 route,并写好 rule(只能说这里坑也不少:sob:),避免导入不需要的库表或者导入到你不想要的地方。

1 个赞

我没有ignore-dbs mysql库,但是mysql库没有同步过来,应该就说明默认不会同步系统库吧

是的,会默认过滤系统库。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。