ryans
1
【 TiDB 版本】
DM:v5.4.1
【场景】
由于我们数据量太大,上游进行了分库。我们DM工具所在磁盘,无法支撑多个数据源同时全量同步,所以拆成了多个任务去同步,例如student_01_db拆成一个任务,student_02_db拆成一个任务。
因此,由于我们是多个任务同时往tidb的同一张表同步数据,我们无法使用DM工具的pt-osc功能自动变更表结构。
当上游mysql直接进行DDL时,dm_meta可以监听到表结构变更。
而当上游pt-osc时,dm_meta若不开启pt-osc,则无法监听到rename这种表结构变更,导致dm_meta信息仍然是旧的,在往下游写入时会导致字段不一致报错。
请问下DM有没有对这种场景兼容?
目前我们考虑,如果未兼容的话,我们需要自己魔改下让他兼容这种场景
ryans
3
对于1.DM worker 是可以部署在多台机器上的。是说这个场景整个集群的机器加在一起,磁盘也不够全量迁移吗?
例如:我们上游student_tab这张表有3000张分表,因为全量同步阶段是以任务为单位的,我们磁盘无法一次性容纳3000个分表,所以我们会将其拆分为两个任务,每个任务1500张分表,分别进行全量+增量同步
对于2.3
虽然DM工具开启online以后,能追踪到上游rename表结构变更,但是如1中提到的,我们对于tidb的一张表,是由两个任务同时进行同步的,所以如果开启dm的pt-osc,可能造成tidb表被重复执行两次ddl
对于4
现在的问题就是,我们由于跨任务同步,所以无法开启online,都是手动对tidb表结构进行变更。所以dm_meta无法追踪到上游pt-osc操作导致的rename表结构变更
1 这 3000 分表如果是位于多个 MySQL,每个 MySQL 创建 1 个数据源,每个数据源会对应 1 个 DM-worker,这样就可以利用多台机器部署 DM-worker,利用多台机器的磁盘。
如果 3000 分表位于一个 MySQL,可以对它创建多个数据源。在任务中为数据源不重不漏地划分分表即可
2 3 DM 对于重复执行的 DDL 可以自动忽略错误,比如自动处理“列/索引已存在/不存在”
system
(system)
关闭
6
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。