zoukankan      html  css  js  c++  java
  • 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、服务器重启后,根据表中自增列最大值确定下一次的自增值。

  • 相关阅读:
    mac 卸载 node并重新安装
    最小的Django应用
    Python如何实现文本转语音
    Python语言库pyttsx3
    大数据资料
    剑指offer(29)最小的K个数
    剑指offer(28)数组中出现次数超过一半的数
    剑指offer(27)字符串的排列
    剑指offer(26)二叉搜索树与双向链表
    JS、JAVA刷题和C刷题的一个很重要的区别
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10392764.html
Copyright © 2011-2022 走看看