【问题标题】:Why the auto_increment id does not increase one by one, how to set it?为什么auto_increment id不一一增加,怎么设置呢?
【发布时间】:2025-12-19 20:30:12
【问题描述】:

我有一个 MariaDB Galera 集群(3 个节点),我将 uid 设置为自动增加并作为表的主键

 `uid       | int(11)     | NO   | PRI | NULL    | auto_increment`. 


 MariaDB [hello_cluster]> select uid from table order by uid limit 10;
    +-----+
    | uid |
    +-----+
    |   3 |
    |   6 |
    |   9 |
    |  12 |
    |  15 |
    |  18 |
    |  21 |
    |  24 |
    |  27 |
    |  30 |
    +-----+

我试过下面的命令,还是不行

 alter table uid AUTO_INCREMENT=1

【问题讨论】:

  • 你是对的。我挖掘了一些更相关的信息。

标签: mysql primary-key mariadb


【解决方案1】:

这是设计使然,报告在MariaDB Galera Cluster - Known Limitations:

不要依赖自动递增值是连续的。 Galera 使用一种基于自增增量的机制来生成唯一的非冲突序列,因此在每个单个节点上序列都会有间隙

Managing Auto Increments with Multi Masters 中解释了有理数,这也是为什么观察到的自增量与集群数具有相同步长的原因。

MySQL 具有系统变量 auto_increment_increment 和 auto_increment_offset 用于管理多主环境中的自动增量“序列”。使用这些变量,可以设置多主复制,其中每个主节点中的自动递增序列交错,并且集群中不应发生冲突。无论哪个 master(s) 获得 INSERT。

即使没有集群,由于事务回滚和删除记录,依靠自动增量列成为密集序列也很少是一个“好”的想法。

【讨论】:

  • 非常感谢,我应该在设置自己的集群之前阅读这些限制!
  • 这种情况自 2014 年以来是否发生了变化?我们正在切换到 MySQL Galera 集群,对于新版本如何处理自动递增列存在疑问。
  • 我在使用 mariaDB galera 集群时遇到了同样的问题,有什么变化吗??
  • @robert.bo.roth 到 2020 年,我们仍然面临非连续自动递增值的行为。
【解决方案2】:

wsrep_auto_increment_control=关闭

将允许您更改 mysql 中的 auto_increment_incrementauto_increment_offset。建议只在主从环境中使用,因为在主从环境中可能会与自增键发生意外冲突。

希望这会对某人有所帮助。

【讨论】: