表达式索引引起的DM同步任务报错;是产品BUG还是使用问题?

binlog_row_image这个值改过吗,可以用mysqlbinlog命令解析下卡住的binlog位置看下内容

一直没改过

# at 177037823
#251208 15:15:54 server id 33479409  end_log_pos 177038477 CRC32 0x2f51481c     Update_rows_v1: table id 6653 flags: STMT_END_F

BINLOG '
Kns2aRPx2v4BsgAAAP9hjQoAAP0ZAAAAAAEACmJ5ZF9mX3Byb2QADmJ5ZF9mX2N1c3RvbWVyADsI
Dw8ICAgPDw8PDwEPAQ8BAw8ICAgICAEPAQgBCAgICA8BAQgBCAgBAQEICAgIAw8PCAgPDw8PAQgP
DygsASwBlgA8ADwAPACWAAYAlgCWANwFuAuWADwAaAE8ADwAPAAsAQwAcP/////DAwQBBQAAAAAA
AgEhTsTZDA==
Kns2aRjx2v4BjgIAAI1kjQoAAP0ZAAAAAAEAO//////////7//////////sAAAAAAAAAAAKEFgAA
AAAAHwBGX0NVU1RPTUVSXzIwMjQxMTE1MTkwMzIzNzUyNDA2AABrAQAAAAAAAIwPAAAAAAAAAIQW
AAAAAAAJ5pyq5ZG95ZCNCzE1Mzg0OTM5OTc0AAAAAAFDAAABAAAAAAJEWdaNGwAAAAAAAAAAAAAA
AAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAHAAAAAAAAAAABXA8CReQBAAAAAAAAAAAAAIGf
yc2aAQAA/yOQR+QBAAADAO+8jAAAaPN9L5MBAAABAAAAAAAAAAAAAAAAAAAAAAECAJgPAAAAAAAA
AAAAAAAAAABo830vkwEAANWgyc2aAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAKEFgAAAAAAHwBGX0NVU1RPTUVSXzIwMjQxMTE1MTkwMzIzNzUyNDA2AABr
AQAAAAAAAIwPAAAAAAAAAIQWAAAAAAAJ5pyq5ZG95ZCNCzE1Mzg0OTM5OTc0AAAAAAFDAAABAAAA
AAJEWdaNGwAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAHAAAAAAAAAAAB
XA8CReQBAAAAAAAAAAAAAIGfyc2aAQAA/yOQR+QBAAADAO+8jAAAaPN9L5MBAAABAAAAAAAAAAAA
AAAAAAAAAAECAJgPAAAAAAAAAAAAAAAAAABo830vkwEAAIIe0fyaAQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcSFEv
### UPDATE `byd_f_prod`.`byd_f_customer`
### WHERE
###   @1=1475586 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='F_CUSTOMER_20241115190323752406' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */
###   @3='' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */
###   @4=363 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @5=3980 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @7='未命名' /* VARSTRING(150) meta=150 nullable=1 is_null=0 */
###   @8='15384939974' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
###   @9='' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @10='' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @11='' /* VARSTRING(150) meta=150 nullable=1 is_null=0 */
###   @12=0 /* TINYINT meta=0 nullable=1 is_null=0 */
###   @13='C' /* VARSTRING(6) meta=6 nullable=1 is_null=0 */
###   @14=0 /* TINYINT meta=0 nullable=1 is_null=0 */
###   @15='' /* VARSTRING(150) meta=150 nullable=1 is_null=0 */
###   @16=1 /* TINYINT meta=0 nullable=1 is_null=0 */
###   @17=0 /* INT meta=0 nullable=1 is_null=0 */
###   @18='DY' /* VARSTRING(150) meta=150 nullable=1 is_null=0 */
###   @19=1805782 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @20=0 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @21=1 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @22=1 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @23=0 /* LONGINT meta=0 nullab.............................................
### SET
###   @1=1475586 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='F_CUSTOMER_20241115190323752406' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */
###   @3='' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */
###   @4=363 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @5=3980 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @6=1475584 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @7='未命名' /* VARSTRING(150) meta=150 nullable=1 is_null=0 */
###   @8='15384939974' /* VARSTR....................................................
###   @56=0 /* TINYINT meta=0 nullable=0 is_null=0 */
###   @57=0 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @58='' /* VARSTRING(300) meta=300 nullable=0 is_null=0 */
# at 177038477
#251208 15:15:54 server id 33479409  end_log_pos 177038644 CRC32 0x5da91a37     Table_map: `db1`.`table1` mapped to number 5192

就是个update语句

deploy/tidb-/conf/tidb.toml allow-expression-index看下

RIGHT函数被认为风险?

请问楼主现在解决了吗?

表可以加一个字段 直接存 right(4) 的, 然后不用这个函数. 哈哈,我们就是这么干的

用的越高端,坑越多

还没解决。

我们的情况复杂,上游数据库不归我管。仅有同步权限

先修改下配置文件再重启试试

哦, 就是你们只是同步配置和数据, 这是什么场景

dm集群、tidb集群都重启过。
任务删除数据重新同步数次。每次都是刚开始增量同步就卡住,binlog位置都是dml并没有ddl。
1、使用和上游完全一样的表结构,允许创建表达式索引。报错:allow-expression-index 没开启。问题是已经开启,不然表达式索引也创建不了
2、使用普通索引替换上游的表达式索引。报错:上游 binlog_row_image 配置不是full。问题是上游这个配置自始至终都是full。

表结构是否同步都不重要。即使过滤掉所有DDL,任务也会在增量同步节点卡住,而且卡住的点位就是普通的dml。上下游表结构字段数据完全能对上,就是卡住报错

我这边实际测了一下,对于right这个expression index,dm的parser应该还没有支持。提了个issue,等修复吧。
https://github.com/pingcap/tiflow/issues/12461

1 个赞

是不是这个参数没有生效,重启一下

没有看出来跟dm有啥关系呢

关于这个问题,处理row故障的关键是找到软件bug。 如果还有其他问题,欢迎提出。