qq悟空
(七七)
1
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:V3.0.3
- 【问题描述】:dm版本 V1.0.3
如下配置文件案例,当mysql-instances中存在多个source-id即多个dm-work任务时
问题1: mydumpers阶段中的 threads 参数,loaders阶段中的 pool-size 参数,syncers阶段中的 worker-count 参数 。 这3个参数是多个source-id共用的全局配置(累积值)吗, 还是每个source-id任务独立各自使用该参数呢?
问题2:当配置中同时存在 routes、black-white-list、filters 三个模块时,这3个模块的匹配&过滤顺序是完全固化的吗 ? 还是在正文下方,先出现先匹配? 又或者是取决于 source-id 配置项后出现的顺序呢 ?
问题3: 上游mysql有20个表,下游tidb只同步4个表。
如果black-white-list模块中使用do-tables配置项就可以把4个表匹配标识出来,那么ignore-dbs配置项还需要配置吗 ?
谢谢
mysql-instances:
source-id: "dm-01"
route-rules: ["rule-1", "rule-2"]
black-white-list: "global"
filter-rules: ["filter-supported-rule"]
mydumper-config-name: "global"
loader-config-name: "global"
syncer-config-name: "global"
source-id: "dm-02"
route-rules: ["rule-1", "rule-2"]
black-white-list: "global"
filter-rules: ["filter-supported-rule"]
mydumper-config-name: "global"
loader-config-name: "global"
syncer-config-name: "global"
source-id: "dm-03"
route-rules: ["rule-1", "rule-2"]
black-white-list: "global"
filter-rules: ["filter-supported-rule"]
mydumper-config-name: "global"
loader-config-name: "global"
syncer-config-name: "global"
routes:
rule-1:
xxx
black-white-list:
global:
xxx
filters:
filter-supported-rule:
schema-pattern: "pd_user"
events: ["create table", "all dml"]
action: Do
mydumpers:
global:
mydumper-path: "./bin/mydumper"
threads: 12
chunk-filesize: 64
skip-tz-utc: true
loaders:
global:
pool-size: 24
dir: "./dumped_data"
syncers:
global:
worker-count: 64
batch: 100
max-retry: 100
qizheng
(qizheng)
2
1、每组 mydumper 和 loader 对应一个上游的 mysql source,threads 和 pool-size 是在 dump 和 load 阶段时 mydumper 和 loader 进程的参数,每个 source-id 独立使用;worker-count 是 syncer 增量同步到下游时的 worker 线程数量,可以认为是多个 source-id 共用的配置。
2、在 DDL 和 DML 同步转换时按照程序内部的固定流程执行,与 routes、black-white-list、filters 在任务配置中的出现顺序及 source-id 的出现顺序无关,详细流程参考 PU 视频课程《生态工具原理》相关章节
3、black-white-list 下设置了 do-tables,不需要再配置 ignore-dbs,即当 do-dbs 和 ignore-dbs 都为空,则进入 table 过滤判断 do-tables,
过滤规则顺序参考
https://pingcap.com/docs-cn/stable/reference/tools/data-migration/features/overview/#过滤规则
1 个赞
qq悟空
(七七)
3
谢谢大佬确认和恢复 。当前场景需求:同步以pd_user_xxx开头的多个分库内的多个分表,只同步create table和dml类型的binlog;其他类型的binlog(不支持的ddl,以及alter table类型的ddl)都要过滤掉,不同步到下游tidb中。
1: 下面这样配置,是准确的吗 ?
2: 由于alter table类型的ddl被dm过滤掉了,当有新的ddl变更时,是先在下游tidb上执行完成后再在上游db执行,是吗?
谢谢
filters:
filter-supported-rule:
schema-pattern: "pd_user_*"
events: ["create table", "all dml"]
action: Do
filter-unsupported-rule:
schema-pattern: "*"
sql-pattern: ["unsupported-sql", "alter table"]
action: Ignore
qq悟空
(七七)
5
dm处理分库分表的ddl看文档比较复杂,可能会导致dml语句在下游tidb上的回放滞后。
期望是这样的:dm同步只负责dml语句的回放,不同步ddl ;ddl语句由人肉手动先在下游tidb执行,然后在上游db再执行。
这样的方案,行得通吗 ? 可能会出现什么问题吗 ,谢谢
zzzzzz
(Tz)
6
从逻辑上来讲,总是要等待上游 DDL 全部同步后,再进行 dml。
这边可以测试一下。正常情况下,是同步的很快的。
qq悟空
(七七)
7
有个核心的业务表有1000多个分表,各个分表数据量也比较大,生产环境暂时还没测试,下游业务对延迟比较敏感。
期望是这样的:dm同步只负责dml语句的回放,不同步ddl ;ddl语句由人肉手动先在下游tidb执行,然后在上游db再执行。这样的方案,行得通吗 ? 可能会出现什么问题呢?
另外syncers模块对于dml的回放阶段,除了配置worker-count和batch参数外,还有其他可配置参数,来加速回放速度吗 ?
谢谢
qq悟空
(七七)
9
用LB打散到下游多个 tidb的话,如果其中一个tidb挂掉了,发到该tidb上的事务执行失败了,那么这个时候dm是否会将失败的事务在其他存活的tidb上进行重试呢? dm这个时候该怎么处理呢? 谢谢
不懂就问
(zhouyueyue)
10
DM 的 ga 版本之后,对于 已经发到 tidb-server ,节点挂掉是没有办法重试的,直接再发一次有问题。对于没有发送到 tidb-server (没有任何数据通过网络发送到 tidb-server)的情况是会进行重试。所以针对提出来的问题,DM 这块是没办法保证的。
qq悟空
(七七)
11
如果是这样的话,那LB组件适合用来做读业务的高可用,不适合放到dm里进行写数据的分发。
qq悟空
(七七)
13
好的,谢谢确认。 请问dm的高可用方面的功能支持有吗 ? 或者目前有该方面的上线版本排期吗 ?
谢谢
system
(system)
关闭
15
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。