====== Краткий справочник по ошибкам 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 Вашего сервера не хватает свободного места.//
__Что делать__:
* Закрыть Ваш форум, дабы не было записи в базу, при добавлении тем/сообщений и т.д.
* Связаться с Ваши хостером (службой поддержки хостинга) и сообщить об этой ошибке.
* Если же у Вас собственный сервер, то Вам необходимо увеличить место, отведенное для хранения данных mySQL, например, перенести на новый раздел, и/или изменить расположение /tmp директории в my.cnf
===== » Error Code 144 (Table is crashed and last repair failed): =====
__Описание__: //таблица, к которой происходило обращение, разрушилась, и последняя попытка ее восстановить оказалась безуспешной.//
__Что делать__:
* Обратиться к хостеру и сообщить об ошибке.
* Если же у Вас собственный сервер, Вам необходимо остановить mySQL сервер и запустить команду для восcтановления. Когда mySQL остановлен, выполните в shell/telnet/ssh команду:
myisamchk -r -u имя_пользователя -pпароль имя_базы
где:
* //имя_пользователя// - Ваше имя пользователя базы данных имя_базы;
* //пароль// - пароль базы имя_базы. Обратите внимание, что пароль нужно указывать сразу после -p без каких-либо разделяющих символов;
* //имя_базы// - база, которую требуется восстановить.
===== » Error Code 145 (Table was marked as crashed and should be repaired): =====
__Описание__: //таблица, к которой происходило обращение, разрушилась и необходимо ее починить.//
__Что делать__: Читаем [[sources:db:repiar|Исправление таблиц базы]]
===== » Too many connections =====
__Описание__: //большое количество соединений с базой, подробнее читаем//
[[http://www.mysql.com/doc/T/o/Too_many_connections.html]]
__Что делать__:
* Обращаемся к хостеру и сообщаем об ошибке.
* Если мы сами себе хостинг, то можем увеличить количество максимальных соединений. Изменяем параметр max_connections в файле /etc/my.cnf сервера.
===== » mySQL server has gone away =====
__Описание__: //сервер прекратил принимать соединения. Подробнее опять на сайте разработчика//
* http://www.mysql.com/doc/G/o/Gone_away.html
* http://www.mysql.com/doc/C/o/Common_errors.html
* http://www.mysql.com/doc/S/e/Server_parameters.html
* http://www.mysql.com/doc/O/p/Option_files.html
* http://www.mysql.com/doc/S/H/SHOW_VARIABLES.html
__Что делать__:
* Ждем некоторое время, возможно хостер просто перезапускает сервер. Если ошибка повторяется длительное время, то следуем указаниям пункта 2.
* Стучимся к хостеру, недовольно сообщаем об ошибке.
* Счастливым обладателям dedicated серверов:
- По умолчанию, сервер закрывает соединение через 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, это в основном ошибки при составлении запросов к базе. В этом случае к хостеру обращаться не стоит, а попытаться решить проблему самому или же обратиться в раздел помощи на нашем форуме.