ERROR 1467 (HY000): Failed to read auto-increment value from storage engine

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】5.0.6
【遇到的问题】自增id误插入最大值后,导致insert报错ERROR 1467 (HY000): Failed to read auto-increment value from storage engine
【复现路径】
主键bigint
insert into t values 7900000000000000000 插入最大值,然后后续的insert 全部无法执行,报如上错误
通过删除脏数据,修改auto_increment为剩余最大值+1之后 也无法恢复。表的数据量大概2亿
【问题现象及影响】

这个是多少? 表结构什么样,auto_inc_id和_tidb_rowid 一起分配,来源于同一分配器

PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
UNIQUE KEY cid (cid),
KEY create_time (create_time),
KEY aweme_id (aweme_id),
KEY reply_id (reply_id),
KEY short_id (short_id),
KEY unique_id (unique_id),
KEY video_id (video_id),
KEY video_create_time (video_create_time),
KEY brand_ids (brand_ids),
KEY brand_names (brand_names)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=207378376 COMMENT=‘ABC’;

id是bigint,表结构就是很普通的如上楼所示。

重建表,迁移导入数据恢复试下吧。直接改自增值不行的,可以改完看下show warnings

自增达到了最大值,并且还是主键,将原表重命名,再新建一张表将数据复制到新表

手工插入自增列这个肯定是不行的,建议重建表,然后做数据的导入导出。

请问如何解决的?

SHOW CREATE TABLE your_table_name 命令检查表的定义,确保自增列的定义正确,并且没有被设置成 UNSIGNED 类型

2亿不算多,dumpling出来再重建表导入

错误消息“ERROR 1467 (HY000): Failed to read auto-increment value from storage engine”,看起来自动增量 ID 已达到最大值。 针对这种情况,可以按照以下步骤进行处理:
检查自增ID是否达到最大值:

if (auto_increment_id >= max_auto_increment_value) {
    // Perform actions to address the issue
}

要修改自增值,可以使用 ALTER TABLE 语句:
ALTER TABLE your_table AUTO_INCREMENT = new_start_value;

如果调整自增值仍不能解决问题,请考虑重新设计表结构或采取其他策略来防止达到最大自增值。