E.1.5 Использование журналов для определения причин ошибок в mysqld
Обратите внимание: перед запуском mysqld
с --log
необходимо проверить все
используемые таблицы с помощью myisamchk
(see section 4 Администрирование баз данных).
Если демон mysqld
умрет или зависнет, следует запустить mysqld
с опцией
--log
. Если аварийное завершение mysqld
снова повторится, то можно
исследовать часть журнала, относящуюся к запросу, убившему mysqld
.
При использовании опции --log
без имени файла данный журнал хранится в
каталоге базе данных как ``hostname`.log'. В большинстве случаев именно
последний запрос в системном журнале приводит к смерти mysqld
, но при
возможности лучше в этом убедиться: перезапустите mysqld
и выполните
найденный запрос из командной строки mysql
. Если запрос выполняется, то
следует протестировать все сложные запросы, которые не завершились.
Можно также попробовать выполнить команду EXPLAIN
для всех выражений
SELECT
, которые занимают длительное время, чтобы убедиться, что mysqld
правильно использует индексы. See section 5.2.1 Синтаксис оператора EXPLAIN
(получение информации о SELECT
).
Запросы, требующие слишком длительного времени для выполнения, можно
выявить, запустив mysqld
с параметром --log-slow-queries
. See section 4.9.5 Журнал медленных запросов.
Если в журнале ошибок (обычно он имеет имя ``hostname`.err') присутствует
запись "mysqld restarted
", то у вас есть шанс найти запрос, вызывающий
смерть mysqld
. В этом случае необходимо проверить все таблицы с помощью
команды myisamchk
(see section 4 Администрирование баз данных) и проанализировать
запросы в журналах MySQL, чтобы определить, какой из них не работает. Если
такой запрос найден, прежде всего необходимо попытаться сделать апгрейд
MySQL до новейшей версии. Если же это не помогает и нет ничего похожего в
архиве списка рассылки mysql
, пришлите отчет о данном сбое по адресу
mysql@lists.mysql.com. Ссылки на архивы списка рассылки доступны по адресу
http://lists.mysql.com/.
Если демон mysqld
был запущен с параметром myisam-recover
, то MySQL
автоматически проверяет и пытается восстановить таблицы MyISAM (если они
отмечены как "таблица не закрыта правильно" или "таблица повреждена").
В этом случае MySQL запишет в файл `hostname.err' предупреждение:
"Warning: Checking table ...
", за которым следует "Warning: Repairing
table
", если данную таблицу следует исправить. Если таких ошибок в
журнале много, а mysqld
перед этим не умирал со сбоем, то что-то работает
неправильно и необходимы дальнейшие исследования. See section 4.1.1 Параметры командной строки mysqld
.
Конечно, неожиданная смерть mysqld
- событие малоприятное, но в этом
случае следует не изучать сообщения "Checking table...
", а попытаться
найти причины остановки mysqld
.