DM同步MySQL数据到TiDB集群,但是DM任务无法停掉

DM集群版本v2.0.4
使用DM同步MySQL数据到TiDB集群,目前已经业务切换完成,想要停掉任务,但是出现如下报错:
tiup dmctl --master-addr 10.xx.xx.xx:8261 stop-task tidb-xlg-mysql
Starting component dmctl: /home/tidb/.tiup/components/dmctl/v7.5.5/dmctl/dmctl --master-addr 10.xx.xx.xx:8261 stop-task tidb-xlg-mysql
{
“op”: “Delete”,
“result”: false,
“msg”: “[code=38041:class=dm-master:scope=internal:level=medium], Message: invalid op 7 on task”,
“sources”: [
]
}

1 个赞

看看dm master的日志,有什么其他的报错。这个错误提示确实是有点莫名其妙。

另外,你tiup dm display 一下看看你的dm集群版本到底是多少。
v2.0.4这个看着不像是dm集群的版本号,像是tiup dm或者tiup dmctl这两个命令行工具的版本号。

tiup dmctl --master-addr=192.168.1.1:8261 operate-source stop xxxxx.yaml
直接卸载数据源呢行不行

这个版本号是执行tiup dm list查看到的
image

执行删除操作命名,dm-master输入如下的日志:就这一条
[2025/02/28 17:23:03.715 +08:00] [INFO] [server.go:2206] [payload="op:7 name:"tidb-xlg-mysql" "] [request=OperateTask]

数据源还有其他的任务在跑,不能直接删除掉数据源

那这个就是tiup dm 命令行工具的版本,不是dm集群的实际版本。

dm集群的实际版本,要用tiup dm display [cluster-name]查看。

这日志没啥用啊,只能再看看dm-worker上的日志有啥内容了。

tiup dm display这个查看版本也是v2.0.4

dm-worker上没任何记录输入

tiup dmctl query-status 这个任务的状态,是正常的嘛?

https://docs.pingcap.com/zh/tidb/stable/migrate-aurora-to-tidb#第-4-步查看任务状态

任务状态是Paused的,已经停掉的

2.0.4版本的dm的代码我没找到。

https://github.com/pingcap/tiflow

现在这个库下面,tag里面最小版本也是4.0了。估计2.0这个版本的dm可能还没ticdc合并在这个库下面。

看看是否有别的大佬能有办法。

从我使用dm的经验来说,如果靠强制缩容dm worker是有可能解决task删不掉的问题的。但是这个代价非常高了,dm集群规模越大,代价越高。

因为强制缩容掉之后,source会转移到别的空闲的dm_worker上.

如果最后不得已要用这个方法来解决,不如找个时间把这个dm集群的版本也升级一下。2.0.x这个版本挺少见的。

感觉像 dmctl 和 dm-master 的版本不一样导致的,看起来你是用7.5.5 的 dmctl 操作低版本的 dm-master 了,两者的gRPC定义应该有发生变化,导致 op = 7 对应的操作不一致了

换个 2.0.4 的 dmctl 来操作试下

dmctl 和 dm-master 这两个的版本不一致导致不兼容吧,尽量统一版本后再操作测试一下,看还不会出现同样的问题