dm同步报错

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
“ErrCode”: 50000,
“ErrClass”: “not-set”,
“ErrScope”: “not-set”,
“ErrLevel”: “high”,
“Message”: “restore table xms62.sys_lgfl failed: [xms62.sys_lgfl] batch write rows reach max retry 3 and still failed: Error 1105: strings: negative Repeat count”,
“RawCause”: “”,
“Workaround”: “”

上下游的表结构一样吗?

上下游表结构一样, 数据同步一半报的错。

先执行 query-status 命令查看任务运行状态以及相关错误输出

还有其它线索不,仅这个看不出来

另外查下这张表的上游是否有增删改的操作,因为你这有negative Repeat count负重复计数的报错
batch write rows reach max retry 3 and still failed: Error 1105: strings: negative Repeat count”,

批量写入行达到了最大重试次数 3 次仍然失败

报错是一样的

这是一张日志表, 上游是存在数据插入的

可以从binlog里面找到出错的sql是什么嘛?

除此以外还有一个排查方向。
疑似的issue 是这个:
https://github.com/pingcap/tidb/issues/47115

不过我按照里面提到的方法在7.5.1下测试没有复现。

select tidb_version();

Release Version: v7.5.1
Edition: Community
Git Commit Hash: 7d16cc79e81bbf573124df3fd9351c26963f3e70
Git Branch: heads/refs/tags/v7.5.1
UTC Build Time: 2024-02-27 14:28:32
GoVersion: go1.21.6
Race Enabled: false
Check Table Before Drop: false
Store: tikv

create table t (a int, b int, k varchar(64), primary key (a, b), key k (k));

insert into t values(0,0,‘1[130个空格]’); --执行成功
insert into t values(0,1,‘abc[130个空格]’); --执行成功
insert into t values(0,2,‘[130个空格]1’); ----执行报错,1406 - Data too long for column ‘k’ at row 1

都没有出现issue中提到的 strings: negative Repeat count 报错。
不确定其他tidb版本下是否正常。

给出测试sql,你可以在你的版本下看看是否会出现一样的报错。

2个方向来排查一下。

应该是触发了bug,strings.Repeat(“helloworld”, -1)

Release Version: v7.5.1
Edition: Community
Git Commit Hash: 7d16cc79e81bbf573124df3fd9351c26963f3e70
Git Branch: heads/refs/tags/v7.5.1
UTC Build Time: 2024-02-27 14:28:32
GoVersion: go1.21.6
Race Enabled: false
Check Table Before Drop: false
Store: tikv


报错和上面是一样的。

1 个赞

count < 0 导致的?

检查 一下表 xms62 .sys_lgfl的结构是否存在异常

CREATE TABLE xms62.sys_lgfl (
sqlid varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘sqlid’,
id bigint(20) NULL DEFAULT NULL,
hotelid varchar(7) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘1’,
sign int(11) NULL DEFAULT NULL COMMENT ‘2’,
tableid varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘<表名称>.<字段名称> : 描述在systemcode表中,cat='tblcolumn'’,
columnid varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘columnid’,
pkid varchar(254) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘主键值 : 当前记录的对应主键值,为主键相关字段组合转成的字符串’,
oldvalue varchar(254) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT ‘oldvalue’,
newvalue varchar(254) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT ‘newvalue’,
cby varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ‘修改人’,
changed datetime NOT NULL COMMENT ‘最近修改’,
descript varchar(254) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT ‘类别或者业务描述’,
pc_id varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT ‘pc_id’,
devid varchar(36) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT ‘devid’,
PRIMARY KEY (sqlid) USING BTREE,
INDEX index_pkid(pkid ASC) USING BTREE,
INDEX index_changed(hotelid ASC, changed ASC, tableid ASC) USING BTREE,
INDEX index_tableid(hotelid ASC, tableid ASC) USING BTREE,
INDEX idx_newvalue_oldvalue_columnid_hotelid_changed(newvalue ASC, oldvalue ASC, columnid ASC, hotelid ASC, changed ASC) USING BTREE,
INDEX idx_pkid_tableid_hotelid_changed(pkid ASC, tableid ASC, hotelid ASC, changed ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = ‘sys_lgfl’ ROW_FORMAT = Compact;
表结构

试试重启下tidb 集群。tiup cluster reload …

怎么解决的

这算是个BUG吗?要不研究研究源代码?https://github.com/pingcap/dm/tree/master

tidb集群重启,问题依然存在。估计是bug吧?


这个报错看样子是来自 lighting 逻辑写入 tidb-server 报错。tidb-server 那边是否能找到相关报错信息,看看是执行什么报错了?