MySQL--自增列持久化问题

自增列持久化问题

5.5/5.6/5.7三个版本中,MySQL并不会将自增列分配的自增值信息固化到磁盘,当MySQL重启后,会根据自增列上当前最大值和参数auto_increment_offset来确定下一次的自增值,为快速获取自增列上最大值,MySQL要求自增列必须建有索引。

如果一张自增表的数据在重启实例前被清空,实例重启后该表数据会从”1”开始自增(假设表的自增初始值定义为1)。

在某次数据库升级过程中,某张业务表”恰好”因为业务逻辑将表中所有数据删除,重启后该表自增值从1开始生成,当该表数据流转到其他表出现数据冲突,发现问题后,我们紧急手动设置该表自增值,避免事故进一步恶化,并再后期类似操作时,重点关注此类自增表。

如果业务会对自增表数据进行硬删除,在服务器重启前应重点关注该自增表使用的自增值,可以通过information_schema.tables中的auto_increment列来获取。

PS1:在MySQL 8.0中引入自增列持久化特性,可以避免上述问题。

自增列初始值问题

自增列初始值和增量值取决于:

1、全局参数auto_increment_increment和auto_increment_offset,这两参数作用于所有自增表,主要应用于分库分布场景。

2、表创建语句, 在使用SHOW CREATE TABLE或MySQLDump等命令导出建表语句时,建表语句中会包含表当前最大值。

3、服务器重启后,根据表中自增列最大值确定下一次的自增值。

原文地址:https://www.cnblogs.com/gaogao67/p/10392764.html