mysql主键重复报错(mysql主键重复怎么解决)

mysql主键重复报错(mysql主键重复怎么解决)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>  最近线上流量越来越大&#xff0c;所以对mysql进行了钞能力&#xff0c;钞能力之后就开始偶现了最近项目上出现一个表的主键&#xff08;自动&#xff09;重复的情况&#xff0c;真是见鬼了&#xff0c;这个表涉及到支付业务&#xff0c;导致部分业务无法支付&#xff0c;当场吓尿~~~</p> 

讯享网

  最近线上流量越来越大,所以对mysql进行了钞能力,钞能力之后就开始偶现了,不应该啊,钞能力还有副作用?肯定不是!接着回想,尼玛,前段时间因为安全隐私合规,对用户的一些数据进行了物理删除,所以钞能力之后就出现了问题!


讯享网

  mysql自增列未持久化!
  一查发现这居然是mysql很久以前的一个bug(哈哈哈,我不知道),简直的茅坑的石头,又臭又硬!这点从其在官方bug网站的id号也可看出(https://bugs.mysql.com/bug.php?id=199)。由Peter Zaitsev(现Percona CEO)于2003年提出。历史悠久且臭名昭著。

  MySQL并不会将自增列分配的自增值信息固化到磁盘,是由InnoDB数据字典内部一个计数器来决定的,而该计数器只在内存中维护,并不会持久化到磁盘中。当MySQL重启后,会根据自增列上当前最大值来确定下一次的自增值,如果之前已经删除过 id=100 的数据,但是表中当前记录的最大值如果是 99,那么经过扫描,下一条记录的 id 是 100,而不是 101。

  MySQL8.0则是每次在变化的时候,都会将自增计数器的最大值写入 redo log,同时在每次检查点将其写入引擎私有的系统表。如果数据库发生重启,InnoDB会根据redo log中的计数器信息来初始化其内存值,所以不会出现自增主键重复的问题。

  自增主键没有持久化的问题并不是很大,前提是不使用自增主键作为业务主键!!!


小讯
上一篇 2025-04-24 19:20
下一篇 2025-04-22 10:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/166265.html