Автоматическое увеличение сбрасывается до 0 при каждом перезапуске службы

#mysql #auto-increment

#mysql #автоматическое увеличение

Вопрос:

Это работало до сих пор, но когда я перезапускаю службу, база данных теряет значение автоматического увеличения для моей таблицы. Это наверняка то, что я делаю со своими запросами, потому что я не изменял свои таблицы в последнее время. Что бы это могло быть?

Комментарии:

1. получите список всех хранимых процедур и триггеров, которые у вас есть в вашей базе данных. Проверьте это на предмет чего-то подозрительного. Попробуйте переустановить сервер, посмотрите, поможет ли это

2. никаких триггеров, никаких процедур, это происходит только при перезапуске службы, все работает отлично, если я урезаю таблицу и начинаю заново.

3. Под перезапуском службы вы подразумеваете, что вы перезапускаете mysql-сервер?

Ответ №1:

Это документированное поведение, это не ошибка.
При запуске сервера он просматривает каждую таблицу (InnoDB), определяя, каким должно быть новое значение auto_increment. Из http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html :

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

При развертывании DDL происходит нечто подобное, что вызывает перестройку таблицы, такую как изменение engine — даже изменение ее на то же значение, что и раньше.

Комментарии:

1. Это не объясняет, почему оно будет равно нулю.

Ответ №2:

ALTER TABLE имя_таблицы ENGINE=MyISAM

Работает для меня. InnoDB хранит AI в памяти, поэтому при перезапуске сервера mysql он сбрасывается до текущего количества строк 1. Итак, если ваша таблица пуста при перезапуске сервера, она будет сброшена на 1.

MyISAM, с другой стороны, был хорошо собран.