auto_increment_increment必须与auto_increment_offset成对配置,increment值等于主节点总数,offset为1到increment间互异整数,且需写入my.cnf重启生效,仅SET GLOBAL无效。

auto_increment_increment 必须和 auto_increment_offset 成对设,不能单独改
只设 auto_increment_increment = 2 而不配 auto_increment_offset,两台主库仍会从 1 开始生成 1、2、3……一同步就报 ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'。真正起作用的是组合:A 节点 auto_increment_increment = 2 + auto_increment_offset = 1 → 生成 1、3、5…;B 节点 auto_increment_increment = 2 + auto_increment_offset = 2 → 生成 2、4、6…。两者缺一不可。
双主、三主、N 主对应的 increment 值怎么选
increment 值必须等于主节点总数,且每个节点的 offset 必须是 1 到 increment 之间的互异整数:
- 双主:设
auto_increment_increment = 2,A 节点auto_increment_offset = 1,B 节点auto_increment_offset = 2 - 三主:设
auto_increment_increment = 3,offset 分别为1、2、3 - 四主及以上同理,increment = N,offset 取 1~N 各不相同
注意:auto_increment_offset 超出 [1, increment] 范围(比如 increment=2 却设 offset=3)会导致行为异常,MySQL 可能忽略该设置或触发未定义逻辑。
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
配置必须写进 my.cnf 并重启 mysqld,SET GLOBAL 无效
SET GLOBAL auto_increment_increment = 2 看似执行成功,但复制线程启动时已按配置文件初始化计数器,运行时改无效;MySQL 8.0+ 更明确拒绝热重载该参数。正确做法是:
- 编辑
/etc/my.cnf或/etc/mysql/my.cnf - 在
[mysqld]段下添加:auto_increment_increment = 2 auto_increment_offset = 1 server_id = 101 log-bin = mysql-bin binlog_format = ROW
- 另一节点仅改
auto_increment_offset = 2和server_id = 102 - 执行
systemctl restart mysqld(不能只 reload) - 连上后执行
SHOW VARIABLES LIKE 'auto_increment%';,确认值已生效
已有数据的表不会自动“修复”ID序列
该配置只影响后续 INSERT,不修改已有记录,也不重排历史 ID。例如 A 节点当前最大 id 是 99,你设 auto_increment_offset = 1,它下次插入是 101(因为 99 + 2 = 101,且 (101 − 1) % 2 == 0),安全;但如果 B 节点当前最大 id 是 100,设 offset = 2 后下一条是 102,也安全。关键不是“从 offset 开始”,而是“下一个值 = max(id) + increment”,且必须满足 (next_id - offset) % increment == 0。
容易被忽略的是:重启 MySQL 时,自增计数器会基于当前 MAX(id) 和 offset 重新初始化,可能造成“跳变”——比如上次是 7,重启后变成 9 或 10。这不是 bug,是设计行为。

















