Итак, мы только что обновились с MySQL 5.7-ubuntu до 8.0. Обновление, кажется, прошло гладко, однако теперь мы получаем ошибки «Дублирующаяся запись» каждый раз, когда пытаемся ВСТАВИТЬ.
Расследование показало, что все значения AI (автоматическое увеличение) в БД (во всех таблицах) установлены на идентификатор последний используемый в таблице, поэтому выполняется попытка ВСТАВИТЬ существующий идентификатор.
Я считаю, что ручное увеличение значения AI на единицу для каждой таблицы должно решить эту проблему, но мне любопытно/обеспокоено тем, почему это произошло в первую очередь. Это может свидетельствовать о других проблемах.
Может кто-нибудь объяснить, почему это произошло? (Я пытался найти это, но огромное количество ложных срабатываний)
Спасибо
@mihai автоинкремент
@Spot Каковы были ваши шаги по обновлению с MySQL 5.7 до 8.0? Вы использовали mysqldump? Если да, есть ли в файле какие-либо инструкции, в которых установлено значение автоматического увеличения? Вы выполнили команду mysql_upgrade (если требуется)? Возможно ли, что вы можете как-то указать минимальный воспроизводимый пример, что приведет к той же ошибке дублирования записи?
@Progman Я использовал mysqldump, но мне не требовалось (и не было) импортировать дампы. Он выполнил обновление на месте, и мои данные все еще были на месте и заметно не изменились. Я думал, что, возможно, захочу стереть БД и импортировать данные из дампов, но хотел получить больше информации, прежде чем идти по этому пути. Предоставить воспроизводимый пример в этом случае было бы крайне сложно, поэтому я не стал этого делать с самого начала.
@Progman В качестве дополнительного пояснения я использовал подходящий метод обновления в соответствии с инструкциями MySQL.com.
@Spot Какой была точная исходная версия MySQL и какая точная обновленная версия MySQL?
@Progman 5.7.26-0ubuntu0.16.04.1 -> 8.0.16 Оказывается, это было значение autoinc_lock_mode, которое сместило значения по умолчанию между двумя версиями. Спасибо за помощь.






этот объясняет, как это обрабатывается в 5.7 и 8
AUTO_INCREMENT Обработка в InnoDB
https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html
Я проходил через это раньше, но вы упомянули об этом здесь, что заставило меня более тщательно изучить это. Я пропустил часть об изменении по умолчанию autoinc_lock_mode между 5.7 и 8.0. Принудительное возвращение к 1, похоже, решило проблему. Спасибо за указатель.
Что такое ценности ИИ?