Tidb-DM集群的source数据源切换ip

【 TiDB 使用环境】生产环境
【 TiDB 版本】
Tidb集群:v6.1.6
Tidb-DM集群:v6.5.0
【目前使用情况】
使用Tidb-DM集群完成上游mysql到tidb的实时同步,创建source时使用的ip端口方式
task状态:
image
【遇到的问题:问题现象及影响】
现在上游的mysql库切换,ip要变动,现在的同步任务是否支持修改binglog同步点位,实现切换ip后同步任务正常进行?

需要停任务,改了以后再重启任务。具体参考【数据源管理

3 个赞

原任务停了以后,记录同步的pos,然后启动一个增量同步的新任务即可吧,ip变了,数据源换一下

感觉还是简单的

请问DM指定同步pos点位增量同步怎么配置呢?

可以的。暂停任务。加入新的数据源,同步任务配置文件里指定日志点位,启动任务。

meta:
binlog-name:
binlog-pos:

1 个赞

不用新增任务,就stop-task先把任务停了,然后使用 operate-source stop 命令从 DM 集群中移除原 MySQL 实例地址对应的 source 配置, 更新 source 配置文件中的 MySQL 实例地址并使用 operate-source create 命令将新的 source 配置重新加载到 DM 集群中。然后 start-task 命令重新启动数据迁移任务。
https://docs.pingcap.com/zh/tidb/v6.1/usage-scenario-master-slave-switch#变更-dm-worker-连接的上游-mysql-实例地址

2 个赞

上面没人说新增任务的。照你说的这样操作,就真的新增任务了。任务都删了。不小心就掉坑里了。 :joy:

这里哪有新增任务的操作,不是先停stop-task,然后重建source,然后start-task嘛?

image
尽量让这两个版本 保持一致。 我记得6版本 有bug .

好的,谢谢

这个需要两个实例是主从关系,并且开启GTID

并不需要开启gtid,他说的是对的。

因为数据源的配置里面,已经包含了数据源的唯一id。

source-id: t1

source配置文件中,会有类似上面这种配置项。

所以你 operate-source stop 之后,改了mysql实例ip,再operate-source create,不改source-id的情况下,就是对这个数据源配置的更新,在你这个例子里面就是对ip的更新。

和上游是否开启gtid无关。

而提出这种更新数据源ip,需要新增一个增量任务的说法也对,但是绕远了一点。能解决问题,但不是最省事的。

那切换新的ip后,同步位点的问题怎么解决呢? 新ip实例的binlog位点信息和meta-dm库里保存的老实例的位点信息是没关联的,启动后从当前时间的新实例位点开始同步吗? 这样会丢数据吧

同步位点的问题是这样的。

因为每个任务都在dm_mate表下有自己的binlog位置记录。

你可以在dm_meta库下面找到【taskname】_syncer_checkpoint这个表,里面已经记录了,当前binlog的位置。

所以数据源id不变,task名称不变的情况下,不用担心binlog位置丢失。

嗯,明白,binlog点位记录的表我找到了,我是担心比如老实例消费点位在这个表里记录的是mysql-bin|000045.log,但是新实例的binlog文件最新的是mysql-bin|000005.log,按照上面的流程启动了任务,任务读取到数据库保存的同步点位是mysql-bin|000045.log ,但是新的实例根本就没有这个文件和点位,那它是报错? 还是从新实例的最新binlog开始同步? 如果从最新开始同步那不就有可能丢数据了

这种情况,确实只改ip不能解决问题了。

任务也需要重建了。在任务配置里面可以指定同步开始的binlog位置。
而且如果taskname相同,start-task的时候需要加–remove-meta.即删掉dm_meta里面原来任务对应的4张表,彻底重建任务。

好的,感谢回复

增量同步可以通过指定任务中的task-mode为incremental,然后在指定同步起始的pos位置即可。