auto_increment 跳 3 而不是 1
Posted
技术标签:
【中文标题】auto_increment 跳 3 而不是 1【英文标题】:auto_increment jumps by 3 and not 1 【发布时间】:2021-01-03 09:36:43 【问题描述】:我注意到在我的 mysql 服务器中,auto_increment 设置递增 3,例如 3 6 9 12 15 等。
数据库中的所有表都有同样的问题。
我在 debian 10 上使用 mariadb 10.5。
可能是因为有一个 3 vps 的厨房集群吗?
MariaDB [(none)]> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 3 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set (0.002 sec)
【问题讨论】:
请示范Why should I provide an mcve for what seems to me to be a very simple sql query 可能是因为有一个 3 vps 的厨房集群吗? 试试SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want';
,告诉我们你得到了什么?
3838 这是结果
3838 不能被 3 整除..
【参考方案1】:
他们把它设计成那样。你可以说这是使用 Galera 的一个限制。他们这样做是为了解决在多主集群中插入期间生成序列号作为主键时的冲突问题。
https://mariadb.org/auto-increments-in-galera/
【讨论】:
【参考方案2】:如果您实际使用的是 Galera,则 auto_increment_increment
需要为 3(或者集群中有多少节点(服务器))。
SHOW VARIABLES LIKE 'wsrep%';
【讨论】:
是的,我用的是galera,那么3 in 3是正常的。而且这不影响id int255结束比1 in 1快3倍? @diaconuliviu - 什么是 int255?如果你的意思是TINYINT UNSIGNED
,那么是的,每个节点在溢出之前可以插入大约 85 行。在指定数据类型时要考虑到这一点。同时auto_increment_offset
应该是 3 个节点的 3 个不同值。如果只插入一个节点,则限制为 85 行。如果您以正确的方式插入分布在 3 个节点上,它不会在大约 255 行之前溢出。以上是关于auto_increment 跳 3 而不是 1的主要内容,如果未能解决你的问题,请参考以下文章
MySQL InnoDB auto_increment 值增加 2 而不是 1。病毒?
SpringMVC统一异常处理(返回异常数据而不是跳转到某个页面的方法)