Если вы работаете с включенными двоичными журналами, это можно проверить с относительно высокой надежностью.
Сначала, чтобы увидеть, действительно ли включены двоичные журналы, запустите:
SHOW BINARY LOGS;
Если они включены, вы должны получить такой вывод:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
В противном случае вы получите сообщение об ошибке.
Теперь, если двоичные журналы включены, то любая успешная фиксация также записывается в двоичные журналы. Я говорю «commit», но правда в том, что любая успешная операция, даже на нетранзакционных таблицах, таких как MyISAM, написана там. Но, честно говоря, чтобы быть уверенным в результатах ваших запросов, я надеюсь, что ради вас вы используете транзакционный движок, такой как InnoDB, иначе вы ни в чем не можете быть уверены.
Итак, если предположить, что теперь у вас включены двоичные журналы и что ваши таблицы являются транзакционными (надеюсь, InnoDB), то ожидается, что успешное завершение ваших запросов будет записано в двоичные журналы.
Теперь вы должны найти соответствующий двоичный журнал и найти там запрос. Если вы нашли запрос - хорошо! Если нет - скорее всего, его там нет. Я объясню в ближайшее время.
Какой двоичный журнал содержит ваш запрос? Посмотрите сами двоичные файлы журнала, обычно в вашем каталоге данных. Ищите их метки времени. Когда питание пришло, новый двоичный журнал был создан. Найди это. Ваши запросы, скорее всего, находятся в двоичном журнале перед тем. Это предположение. Это также может быть один до этого и т. Д. Но это хорошее предположение.
Теперь с помощью mysqlbinlog
утилиты выполните из командной строки что-то вроде этого:
mysqlbinlog mysql-bin.000245
Замените имя файла тем, которое, как вы подозреваете, будет содержать запрос.
Это выведет все запросы в этом двоичном файле журнала в стандартный вывод. В Unix используйте grep
для поиска вашего запроса:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
На винде удачи. Откройте с помощью блокнота ++ или что-то и искать вручную.
Есть ли запрос? Отлично - вы знаете, это было совершено.
Нет запроса? Нужно проверить по sync_binlog
парам. Это 1 ? Тогда запрос не в двоичном журнале ==> запрос не зафиксирован. Но если sync_binlog
не равно 1 , все еще может быть вероятность того, что запрос был зафиксирован, но не в двоичном журнале, поскольку сбой мог произойти сразу после commit
и непосредственно перед тем, как двоичный журнал был записан на диск. Затем вам нужно вернуться к другим средствам.
Это: (и, надеюсь, вы снова используете InnoDB): ищите одну строку, которая может идентифицировать результат запроса. С InnoDB вы получаете «все или ничего». Если вы можете быть уверены в единственной строке, затронутой запросом - вы можете быть уверены, что запрос завершен.
edit: конечно, если медленный журнал включен, вы можете ожидать, что такой длинный запрос будет зарегистрирован там и после завершения ...
Удачи!