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