MySql:运行大约一个月后,某些表缺少 AUTO_INCRMENT。
最初:(显示创建表 Foo)
CREATE TABLE `Foo` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`type` tinyint(2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
一个月后:
CREATE TABLE `Foo` (
`id` bigint(20) NOT NULL,
`name` varchar(10) NOT NULL,
`type` tinyint(2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
缺少自动增量。是什么原因?
Mysql服务器版本:5.6.25,Linux
一定是有人改变了它。这种变化不会自发发生。
我可以自己重现此更改:
CREATE TABLE Foo ( id BIGINT AUTO_INCREMENT, ...
ALTER TABLE Foo MODIFY COLUMN id BIGINT;
SHOW CREATE TABLE Foo\G
*************************** 1. row ***************************
Table: foo
Create Table: CREATE TABLE `foo` (
`id` bigint(20) NOT NULL,
`name` varchar(10) NOT NULL,
`type` tinyint(2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
现在该列显示它是 BIGINT 但不是 AUTO_INCRMENT。
每次修改列或更改列时,都必须重复所有列选项,例如 NOT NULL 和 AUTO_INCRMENT 和 DEFAULT,否则它将恢复为默认值(即 not 自动增量)。
所以我会解释这表明有人做了 ALTER TABLE 并且不记得包含 AUTO_INCRMENT 列选项。
只是一个想法。
如果您有二进制日志,您可能会在日志上看到更改查询及其运行时间。 :) 检查二进制日志是否启用
show variable like 'log_bin';
如果启用了二进制日志,找到可能执行查询的时间段,然后使用 mysqlbinlog 来帮助您找到它。
如果未启用二进制日志,那么运气不好 - 正如 Bill Karwin 之前的文章所建议的那样,mysql 不会自行更改它 - 一定是有人更改了它。
我的情况也完全一样。不做任何涉及数据库更改的工作。没有其他人具有数据库编辑权限。突然,我收到了用户抱怨,人工智能在一个已经成功运行了七年/10k 插入的领域被关闭了。 Aurora(MySQL 5.6 的 AWS 克隆)不是 SE 的 MySQL。
至少这是一张面向管理层的桌子。害怕客户交易表发生这种情况。
是的,我也遇到过。仅在我的开发机器上,所以还不是灾难。我认为当系统崩溃或者可能是当机器只是关闭但MySql尚未首先关闭时它可以这样做。 它过去从未发生过曾经。玛丽亚数据库 10.4.27