Приложение E. Перенос на другие системы |
Пред. |
|
След. |
E.1. Отладка сервера MySQL
E.1.5. Использование журналов для определения причин ошибок в mysqld
Обратите внимание: перед запуском 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 , пришлите отчет о данном сбое по адресу <mysql@lists.mysql.com> . Ссылки на архивы списка рассылки доступны по адресу http://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 .
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|