tidb 自增主键 设置 AUTO_ID_CACHE=1 和实际的表 重复

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.4
业务表
CREATE TABLE reportstatelog_info (
log_id int(11) NOT NULL AUTO_INCREMENT ,
machixxnereport_id int(11) DEFAULT NULL ,
shopxx_id int(11) DEFAULT NULL ,
saleplacxxeno varchar(20) COLLATE utf8_general_ci DEFAULT NULL ,
report_state int(11) DEFAULT NULL ,
create_time datetime DEFAULT NULL ,
PRIMARY KEY (log_id)
/*T![clustered_index] CLUSTERED */
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci
/*T![auto_id_cache] AUTO_ID_CACHE=1 */

之前没问题,今天突然报主键冲突

select max(log_id) from reportstatelog_info
40826765

但是insert 自增id的取值是40823765,导致问题,出问题期间tidb节点没有宕机,无法复现问题,不知道具体原因

1 个赞

log_id已经超过最大值了,无法再往数据库存值了,主键冲突了

查下是不是这个导致的

非业务时间 重启下tidb sever。

不连续是会跳跃,但是不会重复。我遇到过这个问题,回跳很多。

不知道什么原因,我遇到2次,解决简单
方法1 手工插入一条id大于表里面最大值的数据,就正常了。
方法2 使用ALTER TABLE tablename force auto_increment=1234;

mark 学习一下,

能保证递增

感谢,我与你的问题一致,我们版本是6.5 你的版本是7.5 说明升级也没法解决问题。auto_id_cache=1 就是解决跳号的问题,但是现在问题更严重 主键冲突导致 数据无法写入

导致的问题确实很严重,我会找厂商咨询

咨询过了,bug autoid client reset connection operation is not concurrency-safe · Issue #50519 · pingcap/tidb · GitHub

修复的版本6.5.8和7.5.1,你需要升级版本

3 个赞

我也是不连续是会跳跃,但是不会重复。

你的情况是正常的了

修复使用 AUTO_ID_CACHE=1 的自增列时,由于并发冲突导致自增 ID 分配报错的问题 #50519 @tiancaiamao
https://github.com/pingcap/tidb/issues/50519
6.5.8修复了这么一个问题

建表加 AUTO_ID_CACHE=1正常情况就不跳跃了,老的版本性能影响大

改一下id分配的区间?

值得学习

集群有做过备份恢复么?
执行 show table reportstatelog_info next_row_id; 看看 NEXT_GLOBAL_ROW_ID 的结果呢

Hello 可以看看是否升级到 6.5.8 这个问题还依然存在?
反馈给研发之后,发现暂时无法复现你的问题。