当前位置: 首页 > 知识库问答 >
问题:

如何使InnoDB表在服务器重启时不重置autoincrement?

拓拔俊德
2023-03-14

我的开发机器上运行着MySQL5.5.37。我使用innodb表。面临的下一个问题-服务器重新启动后自动增量重置。

找到autoinc_lock_mode,设置为0,但没有帮助。

show variables命令显示autoinc_lock_mode的值0。

我的工作:

select max(id) from tablex; // 11, autoincrement is 12
insert into tablex values ('foo');
select max(id) from tablex; // 12, autoincrement is 13
delete from tablex where id > 11; // autoincrement is 13

然后我重新启动服务器。。。还有。。。。(鼓声)

show create table tablex; // autoincrement 12 instead of 13

我做错了什么?:(

//UPD

我得用我的桌子。感谢大家的回复/评论。

共有1个答案

姚建树
2023-03-14

在InnoDB中,autoincrement值不是表的元数据的一部分,并且在每次服务器重新启动时重置。

InnoDB使用以下算法为包含名为AI_COLauto_increment列的表t初始化自动递增计数器:服务器启动后,对于表t中的第一次插入,InnoDB执行与此语句等效的语句:

从t中选择MAX(ai_col)进行更新

;InnoDB递增语句检索的值,并将其分配给列和表的自动递增计数器。默认情况下,该值递增一。此默认值可以由auto_increment_increment配置设置覆盖。

如果表为空,则InnoDB使用值1。auto_increment_offset配置设置可以覆盖此默认值。

在服务器可执行文件生存期内,它存储在一个特殊的结构中,但不会在服务器重新启动之间持久化:

如果为InnoDB表指定AUTO_INCREMENT列,则InnoDB数据字典中的表句柄包含一个称为自动递增计数器的特殊计数器,用于为该列分配新值。此计数器仅存储在主内存中,而不存储在磁盘上。

您设置的变量定义了不同会话并发访问该结构的方式,而不是它的生存期。

如果希望在服务器重新启动之间保持自动递增值,则应在每次写入时将其保存在不受事务控制(如myisamarchive)的表中,并在服务器重新启动时从表中重置。

 类似资料:
  • 我正在尝试将php中的更改为。伊尼。我运行了phpinfo()并验证了加载的配置文件(它位于这里:/Library/Application-Support/appsolute/MAMP-PRO/conf/php.ini)。 每次我编辑这个php.ini文件的值并重启我的MAMP服务器时,php.ini文件似乎都会重置。如果我在重启MAMP后再次打开php.ini文件,它会显示。 为什么MAMP会重

  • 问题内容: 我已经安装并正在osx上运行一个node.js服务器。我已经释放了一个聊天模块,并且正在愉快地运行它。我更改了一些内容,需要重新启动服务器才能看到效果。 我只知道如何通过关闭终端窗口,然后重新对其进行操作,然后再次运行节点chatdemo.js来重新启动。 有什么方法可以重启而不关闭终端吗? 谢谢。 问题答案: 如果它仅在运行(不是守护程序),则使用。 如果是守护进程,则可以尝试: 凡

  • 问题内容: 在Node.js中,我将websockets / ws 用于WebSocket连接。下面是客户端的代码。假设我们要连接的服务器套接字关闭了一分钟。关闭事件将触发,但是每当服务器上的套接字出现故障或错误时,重新连接到套接字的最佳方法是什么? 问题答案: 我已经成功使用https://github.com/joewalnes/reconnecting- websocket/blob/mas

  • 问题内容: 我正在尝试重新启动服务器,然后使用以下命令等待: 但是我得到这个错误: 问题答案: 您应该将wait_for任务更改为local_action,然后指定要等待的主机。例如:

  • 在 Cadence 中部署代码期间,服务器重新启动功能如何工作?将重新启动哪些内容?它会仅重新启动 Cadence 服务,还是也会重新启动工作线程?如果重新启动工作人员,活动和工作流是否会从头开始重新启动?

  • 我有广播接收器 但是服务不启动,当我启动我的设备日志log.d(“test”,“start”);不要显示我如何修复它?

  • 我有一个简单的systemd服务,需要定期重新启动,以防止其进程被窃听。systemd服务是否有定期重启的配置选项?所有选项似乎都与在服务退出时重启服务有关。

  • 当消费者实例组出现时,会不会对Kafka的性能产生任何影响。重新启动时id已更改。老年人会发生什么。id它是否仍在代理内存中,或者何时将被删除?假设我有1000个消费者实例,并且所有实例都动态分配组。重新启动时的id。 可以为{log.retention.ms'}提供什么列表值。我可以设置为1毫秒吗?