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