【发布时间】:2020-07-27 14:35:41
【问题描述】:
我有一个分区的 InnoDB 表,看起来像这样:
CREATE TABLE `actions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_user` int(11) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`,`id_user`),
KEY `id_user` (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
/*!50100 PARTITION BY RANGE (id_user)
(PARTITION p01 VALUES LESS THAN (100000) ENGINE = InnoDB,
PARTITION p02 VALUES LESS THAN (200000) ENGINE = InnoDB,
PARTITION p03 VALUES LESS THAN (300000) ENGINE = InnoDB,
PARTITION p04 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
此表上每分钟有数万次插入和更新。
有时,我会在 id 中得到重复的值,这是一个自动增量字段。
插入没有指定 id。一次可以插入单行或多行。
我使用的是 MySQL 5.7.26,其中涉及复制,但发生这种情况时没有重新启动,并且所有插入都是在同一台服务器上进行的。
这些是一些设置:
innodb_autoinc_lock_mode 1
auto_increment_increment 1
有没有办法避免这种情况发生?
【问题讨论】:
-
交易怎么样?
-
报告了有关重复 AI 值的错误。 bugs.mysql.com/bug.php?id=76872 在 5.6.35、5.7.17、8.0.1 版本中已修复,如果您使用的是这些之前的版本(在相应的分支中),请升级。
-
另一个关于重复 AI 值的 bug 被打开,目前还没有修复。 bugs.mysql.com/bug.php?id=88321 在版本 5.6.35、5.7.20、8.0.12 中得到验证。如果该错误中的测试用例与您的用法相匹配,您应该单击该错误上的“影响我”按钮。
-
@BillKarwin 谢谢。我使用的版本是 5.7.26。我会更新问题
-
innodb_autoinc_lock_mode和auto_increment_increment的设置是什么?