tidb 合表发现一个异常现象

【 TiDB 使用环境】生产环境
【 TiDB 版本】4.0.0
【DM 版本】Cluster version: v2.0.0
【复现路径】配置了分表合并的task
上有业务库db,t_order 分表,下游 tidb 需要将t_order分表合并到t_order

任务主要配置如下:
name: sharding_merge # 任务名称,需要全局唯一
task-mode: all # 任务模式,可设为 “full”、“incremental”、“all”
ignore-checking-items: [“auto_increment_ID”,“table_schema”]
shard-mode: “pessimistic”

routes:
db-route-rule:
schema-pattern: “db”
target-schema: “sharding_db”
order-route-rule:
schema-pattern: “db”
table-pattern: “t_order_[0-63]”
target-schema: “sharding_db”
target-table: “t_order”

由于上游有t_order表。所以dm同步时候忽略了上游的t_order表
black-white-list:
bw-rule-1:
do-dbs: [“db”]
ignore-tables:
- db-name: “db”
tbl-name: “t_order”

【遇到的问题:问题现象及影响】
遇到一个很奇怪的现象
我上游db有64张分表,但是我下有tidb 缺少了0-6号分表,仅有7-63号分表

很奇怪的现象来了
我查询合并之后的t_order表,发现 0-6号分表的全量和增量数据存在于t_order表,并且在dm-work的日志里面也查询不到0-6号分表相关讯息

想请教大佬,有人遇到过这种情况吗,造成这种现象的原因是啥

【资源配置】
【附件:截图/日志/监控】

1、说的太魔幻,需要魔幻之翼大佬来解决
2、确定没有没有其他的dm任务?或者 dm meta的元数据的问题?

1、有其他的dm任务,但是task name 唯一,不同任务之间应该是不会相互影响的
2、dm_meta 的元数据检查了也没有问题,在loader表可以看到缺失表的数据导入

重新导再试试?

有这个打算,周末再试试

嗯,再重新试试看是不是一样有问题啦

应该是正则写的有问题,你试下“~^t_order_[0-9]+$”,看是不是正常的

不过理论上,你没有开头加~,使用的是TiDB特有的匹配规则,它只支持*和?,你这么写是无效的。应该所有表都不匹配,而不是只少了0-6号分区的表,也是挺奇怪的。

重跑OK不

应该就是正则表达式的问题吧

看起来是正则表达式写得有些问题

弱弱的问一下: 全量数据导出来的时候您检查,是否有0-6号没?? 还有数据导出来没,都检查下。源端—临时文件:全量数据,增量数据----入库 目标库。 先看看从源端出来数据没?

如果正则表达式有问题,在check-task时候就不通过

检查的时候,是存在0-6号文件的

刚刚开始重跑,周末机器有问题

正则有问题,只会导致匹配不符合而已,并不会报错的。

但是如果有问题的话,应该是会全丢的

而且很奇怪,数据其实是过来的,就是表结构没有过来。

数据过来,表结构没有过来时什么意思?

那我大概猜到了,正常来说是用shard-mode后,下游是只有合并后的t_order表,不会由分库分表的t_order_xx表的。你写的正则t_order_[0-63]只匹配到了[0-6]的表,所以也只把[0-6]分表的数据写入到t_order了,其他的[7-63]的分表被当成正常的单表同步下来了

1 个赞