dm将mysql多个分库的数据同步到tidb的一个合库中,发现唯一索引与数据不一致

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】3.0.3(ansible安装)

【问题描述】通过admin check index发现一张表的数据与该表的唯一索引不一致

表结构:

CREATE TABLE biz_user (

id bigint(20) NOT NULL,
global_id bigint(20) NOT NULL,
biz_id bigint(20) NOT NULL ,
biz_user_id bigint(20) NOT NULL DEFAULT ‘0’ ,
status tinyint(2) NOT NULL DEFAULT ‘0’,
ctime bigint(20) NOT NULL DEFAULT ‘0’ ,
mtime bigint(20) NOT NULL DEFAULT ‘0’ ,
creator bigint(20) NOT NULL DEFAULT ‘0’ ,
modifier bigint(20) NOT NULL DEFAULT ‘0’ ,
PRIMARY KEY ( id ),
UNIQUE KEY uniq_biz_user_id ( biz_user_id ),
KEY gid_biz ( global_id , biz_id )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

问题截图:

可以看到,通过biz_user_id字段查询值为 57044843的数据,查不到数据。
通过主键查询,可以查到

通过admin check index校验索引和数据的一致性,报错如下:

ERROR 1105 (HY000) at line 1: table count 55309530 != index(uniq_biz_user_id) count 55309518

索引比数据少了12条数据

发现出现这种情况是由于上了新版本的TIDB和DM,详情见如下链接:

请教这种问题出现的原因及解决方法,重做索引吗?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

3.0 版本比较老了,可能会碰到一些已修复的问题。

看你这边是 table 数据比 索引数据多,可以使用 admin recover 修复,会将缺少的 index 数据填充完整
https://docs.pingcap.com/zh/tidb/v3.0/sql-statement-admin#语句概览