Автоматическое увеличение значений семян возвращается к старому значению в RDS

Я изменил значение таблицы auto_increment вручную с помощью команды alter, но на следующий день начальное значение auto_increment вернулось к старому значению.

Значение, измененное вручную (6000000000)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-02-28 18:48:41 |
+---------------------+
1 row in set (0.00 sec)

mysql> show create table fav_tab;
+-----------+-----------------------------------------------------------------------------------------------------------
| Table     | Create Table
+-----------+-----------------------------------------------------------------------------------------------------------
| fav_shows | CREATE TABLE `fav_tab` (
  `FAV_tab_ID` int(11) NOT NULL AUTO_INCREMENT,
  `USER_ID` bigint(20) unsigned NOT NULL,
  `SERIES_ID` varchar(50) DEFAULT NULL,
  `Creation_dt` datetime DEFAULT NULL,
  PRIMARY KEY (`FAV_tab_ID`),
  KEY `USER_ID` (`USER_ID`),
  KEY `IDX_SeriesID` (`SERIES_ID`),
  CONSTRAINT `FK_fav_tab_user` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`USER_ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6000000000 DEFAULT CHARSET=latin1 |
+-----------+-----------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

На следующий день значение изменилось автоматически (207458739)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-03-01 11:23:26 |
+---------------------+
1 row in set (0.00 sec)

mysql> show create table fav_tab;
+-----------+-------------------------------------------------------------------------------------------------
| Table     | Create Table
+-----------+-------------------------------------------------------------------------------------------------
| fav_shows | CREATE TABLE `fav_tab` (
  `FAV_tab_ID` int(11) NOT NULL AUTO_INCREMENT,
  `USER_ID` bigint(20) unsigned NOT NULL,
  `SERIES_ID` varchar(50) DEFAULT NULL,
  `Creation_dt` datetime DEFAULT NULL,
  PRIMARY KEY (`FAV_tab_ID`),
  KEY `USER_ID` (`USER_ID`),
  KEY `IDX_SeriesID` (`SERIES_ID`),
  CONSTRAINT `FK_fav_tab_user` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`USER_ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=207458739 DEFAULT CHARSET=latin1 |
+-----------+-------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

Пожалуйста, помогите мне понять, почему это происходит и как мы можем решить это?

1 ответ

Решение

Для таблиц InnoDB это ожидаемое и документированное поведение, см.

http://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html:

InnoDB использует счетчик автоинкремента в памяти, пока сервер работает. Когда сервер останавливается и перезапускается, InnoDB повторно инициализирует счетчик для каждой таблицы для первого INSERT в таблицу, как описано ранее.

Перезапуск сервера также отменяет действие параметра таблицы AUTO_INCREMENT = N в операторах CREATE TABLE и ALTER TABLE, который можно использовать с таблицами InnoDB для установки начального значения счетчика или изменения текущего значения счетчика.

Другие вопросы по тегам