Я использую сервер MySQL 5.6.21 на Amazon RDS в нескольких зонах доступности с таблицами InnoDB, и я испытываю поведение, которое не должно происходить в соответствии с тем, что я прочитал в документации.
MySQL повторно использует значения автоматического увеличения, когда самое высокое значение автоматического увеличения удаляется. Например, предположим, что у меня есть таблица с этими значениями автоинкремента: 1, 2, 3, 4, 5
. Если значение 5
удалено, то MySQL повторно использует его при следующей вставке.
Прочитав всю соответствующую документацию MySQL, я вижу, что это невозможно, за исключением перезапуска сервера. Сервер не перезагружается, и я не вижу объяснения этому поведению.
Это вызывает серьезные проблемы для моего приложения, которое ссылается на назначенные значения автоматического увеличения в других местах для аудита. То, как MySQL должен вести себя в соответствии с документами, именно так, как мне нужно. Я искал по всему Интернету и не могу найти никого, кто испытывает эту конкретную проблему. У меня есть ощущение, что это как-то связано с RDS/репликацией, но я не могу найти ничего, что могло бы это объяснить.
Соответствующие настройки сервера MySQL:
auto_increment_increment = 1
auto_increment_offset = 1
innodb_autoinc_lock_mode = 1
Я сузил причину, чтобы исключить операторы вставки, которые повторно используют значения. Это связано с тем, что если я удалю строку с самым высоким значением автоинкремента (скажем, 5
), а затем сразу же проверю следующее значение автоинкремента, просмотрев информационную схему, она покажет 6
, как и ожидалось. Однако, если я подожду несколько секунд/минут, а затем обновлю информационную схему, следующее значение автоматического увеличения внезапно изменится на 5
без выполнения других запросов!
Любые идеи? Заранее спасибо.
SHOW GLOBAL STATUS LIKE 'Uptime%';
, чтобы убедиться, что перезапуска не было. - person Rick James   schedule 13.01.2016