Содержание

Краткий справочник по ошибкам mySQL

Итак, любая ошибка при обращении к базе сопровождается подробным логом. Во-первых, будет выдан запрос, вызвавший ошибку. Пример:

SELECT p.*,
m.id,m.name,m.mgroup,m.email,m.joined,m.avatar,m.avatar_size,m.posts,m.aim_name,m.icq_number,
m.signature, m.website,m.yahoo,m.integ_msg,m.title,m.hide_email,m.msnname, m.warn_level, m.warn_lastwarn,
g.g_id, g.g_title, g.g_icon, g.g_dohtml, m.scripts, m.downloads
FROM ibf_posts p
LEFT JOIN ibf_members m ON (p.author_id=m.id)
LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
WHERE p.topic_id=1 AND p.queued != 1
ORDER BY p.pid LIMIT 0, 15

Для администратора этот запрос не столь важен, как, допустим, для разработчика модификаций. Так что подробно останавливаться на этом не будем.

Далее следует важная для нас часть, это описание ошибки. Например:

 mySQL error: Can't open file: 'word.MYD'. (errno: 145)

Отсюда мы узнаем, что у нас ошибка 145 с описанием «Can't open file: 'word.MYD'». Теперь, когда ошибка известна, обратимся к нашему справочнику ошибок mySQL.

» Error Code 2 (No such file or directory):

Описание: был удален, очевидно, администратором, файл данных mySQL, сам файл указывается в описании ошибки.

Что делать: Свяжитесь с администратором хостинга (службой поддержки) и сообщите об этой ошибке, они должны будут восстановить его. Или же попробуйте восстановить базу Вашего форума из бэкапа.

» Error Code 9 (Bad file descriptor):

Описание: данная ошибка, 'Bad file descriptor or error 9', означает, что когда Вы пытаетесь открыть таблицу БД, возникает проблема нехватки свободных файловых дескрипторов для mySQL.

Что делать: Если Вы имеете доступ к конфигурированию mySQL, т.е. у Вас на сервере есть /etc/my.cnf файл, то внесите изменения в параметр open_files_limit в разделе safe_mysqld.

Например:

  [safe_mysqld]
  open_files_limit=8192

и перезапустите mySQL.

Если же такой возможности нет, то свяжитесь с Вашим хостером и сообщите об этой ошибке.

» Error Code 28 (No space left on device):

Описание: 28 ошибка одна из самых опасных и означает она, что закончилось место для хранения данных mySQL или же что в директории /tmp Вашего сервера не хватает свободного места.

Что делать:

» Error Code 144 (Table is crashed and last repair failed):

Описание: таблица, к которой происходило обращение, разрушилась, и последняя попытка ее восстановить оказалась безуспешной.

Что делать:

myisamchk -r -u имя_пользователя -pпароль имя_базы

где:

» Error Code 145 (Table was marked as crashed and should be repaired):

Описание: таблица, к которой происходило обращение, разрушилась и необходимо ее починить.

Что делать: Читаем Исправление таблиц базы

» Too many connections

Описание: большое количество соединений с базой, подробнее читаем http://www.mysql.com/doc/T/o/Too_many_connections.html

Что делать:

» mySQL server has gone away

Описание: сервер прекратил принимать соединения. Подробнее опять на сайте разработчика

Что делать:

- По умолчанию, сервер закрывает соединение через 8 часов бездействия. Вы можете изменить время простоя параметром wait_timeout в /etc/my.cnf.

- Другая причина получения ошибки 'mySQL server has gone away' это посылка Вами close для Вашего mySQL соединения и затем попытка выполнения запроса, уже на закрытом соединении. Убедиться в том, что mySQL сервер функционирует, можно проверив его mysqladmin для проверки аптайма.

Для этого введите в shell/telnet/ssh:

mysqladmin -u root -p version

- Еще одной из причин появлений этой ошибки может быть отправка Вами неверного или слишком большого запроса. Если mysqld получает слишком большой пакет или же неверный пакет, он в целях безопасности закрывает соединение с пользователем. Если Вам необходимо использование больших запросов, Вы можете увеличить этот лимит, запустив mysqld с ключем -O max_allowed_packet=# (по-умолчанию 1M) или опцией via max_allowed_packet в Вашем /etc/my.cnf файле.

Прочие ошибки mySQL, это в основном ошибки при составлении запросов к базе. В этом случае к хостеру обращаться не стоит, а попытаться решить проблему самому или же обратиться в раздел помощи на нашем форуме.