Проблема заключалась в том, что mysql работал на процессоре на нашем сервере и продолжался около 15 минут. В то время некоторые из данных, которые приходили на сервер, не были вставлены в db, но транзакция была совершена.MySQL пропустил строку при вставке новой записи
После перезагрузки проблема mysql была решена.
Таким образом, это означает, что даже при совершении транзакции в таблице не было новых строк. Доказательством этого является первичным ключом автоинкрементным, который должен выглядел следующим образом:
100
101
102
Но в настоящее время, как это:
100
102
Так запись 101 не хватало, и его пропускаются.
Теперь мне нужно найти какой-то журнал для этой записи, если это существует.
Я пробовал в mysqldump log
, но там нет записей. Запись 101 все еще отсутствует.
Мне нужно найти способ воссоздать эту транзакцию и сделать это снова.
У кого-нибудь были подобные проблемы?
код выглядит в основном так:
$db->autocommit(FALSE);
$sql = "INSERT INTO t (amount, datetime) VALUES ($amount, '$datetime')";
$db->query($sql);
$id = $db->insert_id;
$sql = "INSERT INTO tr (id, log) VALUES ($id, '$log')";
$db->query($sql);
$db->autocommit(TRUE);
В основном проблема заключалась в том, что клиент получил ответ от сервера, что все в порядке, и он получил свой билет. Но этот билет не на сервере, и его нет. Поэтому мне не нужны последовательные идентификаторы, и я просто сказал, что пропущенные идентификаторы являются доказательством того, что mysql пропустил строку при вставке и не выбрасывал никаких исключений. – madeye
Похоже, что ваш код не проверял состояние транзакции: можете ли вы добавить код, выполняющий эту транзакцию? –
Я обновил свой вопрос с кодом, но я не знаю, помогает ли это его основные вещи – madeye