A.2.1 Ошибка Access denied |
Оглавление | A.2.3 Ошибка Can't connect to [local] MySQL server |
MySQL server has gone away
Все изложенное в данном разделе относится также и к родственной ошибке
Lost connection to server during query
.
Наиболее часто ошибка MySQL server has gone away возникает в
результате тайм-аута соединения и его закрытия сервером. По умолчанию
сервер закрывает соединение по прошествии 8 часов бездействия. Можно
изменить лимит времени, установив при запуске
переменную
mysqld
wait_timeout
.
Другой распространенной причиной получения ошибки MySQL server has gone away является выдача команды "закрытия" на соединении MySQL с последующей попыткой выполнить запрос на закрытом соединении.
Если это получено в скрипте, то достаточно просто повторить запрос от клиента, чтобы соединение автоматически восстановилось.
Обычно в этом случае выдаются следующие коды ошибки (какой из них вы получите, зависит от ОС):
Код ошибки | Описание |
CR_SERVER_GONE_ERROR | Клиент не может послать запрос серверу. |
CR_SERVER_LOST | Клиент не получил ошибки при передаче запроса серверу, но он не получил также полного ответа (или хоть какого-то ответа) на запрос. |
Ошибка будет также выдана, если кто-нибудь уничтожит выполняющийся поток
посредством kill номерпотока
.
Проверить, что MySQL на ходу, можно, запустив mysqladmin version
и изучив
время работы (uptime
). Если проблема в аварийном завершении
, то
необходимо сосредоточиться на поиске причины аварии. В этом случае следует
сначала проверить, не будет ли уничтожен MySQL снова при повторном задании
запроса (see section A.4.1 Что делать, если работа MySQL сопровождается постоянными сбоями).
mysqld
Эти ошибки будут также выдаваться при посылке серверу неверного или
слишком длинного запроса. Если
получает неправильный или слишком
большой пакет, то сервер предполагает, что с клиентом что-то не так, и
закрывает соединение. Если необходимо выполнять объемные запросы
(например, при работе с большими столбцами типа mysqld
BLOB
), можно увеличить
предельный размер запроса, запустив
с опцией mysqld
-O
max_allowed_packet=#
(по умолчанию 1 Mб). Дополнительная память выделяется
по требованию, так что
будет использовать больше памяти только в
случае, когда выдан большой запрос или когда mysqld
должен возвратить
большую строку результата!
mysqld
Если у вас возникнет желание сделать отчет об ошибке по этой проблеме, то не забудьте включить в него следующие сведения:
hostname.err
(see section A.4.1 Что делать, если работа MySQL сопровождается постоянными сбоями).
mysqld
, а используемые в нем
таблицы перед выполнением запроса проверялись с помощью CHECK TABLE
,
то желательно составить контрольный тест (see section E.1.6 Создание контрольного примера при повреждении таблиц).
wait_timeout
в сервере (это значение выдает
mysqladmin variables
).
mysqld
с --log
и
проверять, появляется ли выданный запрос в журнале.
Обращайтесь к разделу See section 1.8.1.2 Как задавать вопросы и направлять сообщения об ошибках.
A.2.1 Ошибка Access denied |
Оглавление | A.2.3 Ошибка Can't connect to [local] MySQL server |