【 TiDB 使用环境】测试
【 TiDB 版本】v8.5.0
具体操作:
tiup tidb-lightning -config lightning.toml
报错提示:
tidb lightning encountered error: [Lighting:Restore:ErrChecksumMismatch]checksum mismatched remote vs local => (checksum: 17337371881437968394 vs 10531287664405905779) (total_kvs: 6634939 vs 6635136) (total_bytes:400364342 vs 400377252)
备注:其他几个表导入成功,就某张表失败,但是count数据又是对的,所以不清楚是成功还是失败
数据校验失败了,但是count又是对的,这种情况极有可能出现了索引和数据不一致。
用 admin check table xxx 查一下看看。
确实有异常提示:
data inconsistency in table: fb_members, index: username, handle: 1841432857272442883, index-values:“” != record-values:“handle: 1841432857272442883, values: [KindString Bernard]”
这是说明索引有问题,那删除对应索引,重建能解决吗
dba-kit
(张天师)
2025 年3 月 4 日 01:13
7
重建能保证索引和主表的数据一致,但是一般这种报错其实是数据有问题导致的,最好还是先检查导出文件里是否有数据冲突。
dba-kit
(张天师)
2025 年3 月 4 日 01:15
8
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】
从5.4.3dumpling导出数据迁移到7.5.1,通过lightning导入发现报错Duplicate entry,有数据重复。
表的排序是 COLLATE=utf8_general_c
i在5.4.3版本中是大小写敏感的,以下是旧表的数据截图
[image]
但是在7.5.1中就大小写不敏…
可以看下表的字符集是不是_bin
,也可能是大小写导致的数据重复
文件内容不太好检查数据冲突了,
CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
是的,我尝试再这个字段上再建一个唯一索引,发现数据唯一检测冲突了
dba-kit
(张天师)
2025 年3 月 4 日 01:42
12
大概率是大小写问题导致的冲突了,将表的字符集改为utf8mb4_bin
再试下。
CHARSET=utf8mb4 COLLATE=utf8mb4_bin ,改了还是一样的错误
查了下表数据,username字段有两个值 adrain 和 Adrain,
dba-kit
(张天师)
2025 年3 月 4 日 02:17
15
你用什么命令改的?看下 username 字段的字符集现在是什么?
dba-kit
(张天师)
2025 年3 月 4 日 02:18
16
得用 convert to 命令,不能直接改表的 default charset,那是不会改现存字段的 collate 的
直接用navicat修改排序规则最简单。我记得我那个问题我是单独修改了字段的排序规则,不是修改表的排序规则。
删除表,重新建了
CREATE TABLE users
(
uid
bigint unsigned NOT NULL,
username
varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT ‘用户名’,
email
varchar(50) COLLATE utf8mb4_bin NOT NULL
PRIMARY KEY (
uid) /*T![clustered_index] CLUSTERED */, UNIQUE KEY
username (
username`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT=‘会员表’;
有猫万事足
2025 年3 月 4 日 04:59
20
checksum失败,而且local比remote的key数量和字节数都多一些。我感觉首先需要排除一下导入的时候是不是有其他人在写入。