В качестве базы данных на AWS я использовал сервер Percona 5.7. Проблема в том, что иногда строки таинственным образом исчезают без подсказки. Мой бэкэнд, использующий Node.JS, уже получил вставленный идентификатор из автоматического увеличения, но после этого строки исчезают без следа. Это случалось лишь иногда, но происходило каждый день. Что мне делать, чтобы начать диагностику проблемы?
Дополнительная информация: иногда мое автоматическое приращение пропускается, например, с 1000 до 1004, и никто не удаляет его из phpmyadmin или в моем скрипте, поскольку это таблица «пользователя». Во время регистрации от 1000 до 1004 вообще нет журнала ошибок от mysql и nodejs. Однако в настоящее время MySQL испытывает некоторые проблемы с заблокированной таблицей по неизвестной причине и иногда делает оператор вставки событием в очереди. Я вообще не делаю изменения таблицы или какого-либо изменения уровня таблицы.
Вы использовали транзакцию MySQL, AUTO_INCREMENT
, а InnoDB / XtraDB?
Использует ли ваш драйвер MySQL для Node.js неявную транзакцию?
Если это так, вы, вероятно, попали в InnoDB AUTO_INCREMENT
разрыв в последовательности. Вы можете посмотреть документы Вот, но вкратце,
Во всех режимах блокировки (
innodb_autoinc_lock_mode
= 0, 1 и 2), если транзакция, которая генерировала значения автоинкремента, откатывается, эти значения автоинкремента «теряются». После того, как значение сгенерировано для столбца с автоматическим приращением, его невозможно откатить, независимо от того, завершен ли оператор «INSERT-like», и независимо от того, откатывается ли содержащая транзакция. Такие утраченные ценности не используются повторно. Таким образом, в значениях, хранящихся в столбце AUTO_INCREMENT таблицы, могут быть пробелы.
Если вы параноик по поводу удаленных строк, используйте general_log
Параметр конфигурации MySQL для создания журналов запросов, а затем проверьте журнал запросов на наличие недостающих строк. Обратите внимание, что журналы запросов могут быть огромными, что повлияет на производительность.