Проблемы и распространенные ошибки

В этой главе перечислены некоторые распространенные проблемы и сообщения об ошибках, с которыми приходится сталкиваться пользователям. Вы научитесь выяснять, в чем заключается проблема и что следует сделать для ее решения. Кроме того, здесь даны правильные решения некоторых распространенных проблем. Если присутствует один из следующих симптомов, то проблема, скорее всего, связана с аппаратным обеспечением (с памятью, материнской платой, процессором или жестким диском) либо с ядром: Не работает клавиатура. Обычно ее работоспособность можно проверить по реакции на нажатие . Если индикатор не меняется, то клавиатуру необходимо заменить (прежде чем это сделать, следует попробовать перезагрузить компьютер и проверить все кабели к клавиатуре). Не перемещается курсор мыши. Машина не отвечает на ping-запросы удаленной машины. Различные не связанные между собой программы не работают, как надо. Система неожиданно перезагрузилась (дефектная программа пользовательского уровня никогда не должна быть способна вызвать отказ системы). В этом случае необходимо начать с проверки всех кабелей и запуска диагностических средств для проверки аппаратуры! Следует также проверить, нет ли патчей, обновлений, сервисных пакетов ( ) для используемой операционной системы, при помощи которых вы, возможно, могли бы решить проблемы. Кроме того, следует удостовериться, что у вас установлены достаточно свежие версии библиотек (таких как ). Для раннего обнаружения проблем хорошо использовать машину с ECC-памятью! В случае блокировки клавиатуры положение можно исправить, если войти на свою машину с другой машины и выполнить на своей машине -a. или т.п.) на предмет причин возникающих проблем. Если есть основания полагать, что проблема - в MySQL, то следует также изучить журнальные файлы MySQL (see section ). Если вы считаете, что аппаратные проблемы отсутствуют, следует попробовать обнаружить вызывающую проблемы программу. Попробуйте с помощью , , или подобной программы проверить, какая программа забирает все ресурсы процессора или блокирует машину. , или подобной программы, нет ли нехватки памяти, дискового пространства, дескрипторов для открытия файлов или каких-либо других критических ресурсов. Если проблема связана с бесконтрольным процессом, то всегда можно попробовать уничтожить его. Если он не хочет уничтожаться, то, вероятно, существует ошибка в операционной системе. Если после изучения всех возможных причин вы сделали вывод, что источником проблемы является именно MySQL-сервер или клиент, то следует сделать отчет об ошибке для нашего списка рассылки или команды поддержки. В отчете об ошибке постарайтесь дать очень подробное описание поведения системы и свое мнение по поводу происходящего. Следует также объяснить, почему вы считаете, что проблемы вызывает именно MySQL. Примите во внимание все ситуации, описанные в данном разделе. Опишите все проблемы в точности так, как они наблюдаются при исследовании системы. При помещении в отчет для всего вывода программ и/или их сообщений об ошибках и/или подобной информации из журнальных файлов используйте метод "вырезать и вставить"! Просьба детально описать, какая именно программа не работает, и какие симптомы вы наблюдали! Нам доводилось получать много отчетов об ошибках, где просто утверждалось, что "система не работает", - такие отчеты не давали никакой информации о характере возможной проблемы. Если программа сбоит, то всегда полезно выяснить: )? Не забирает ли программа все ресурсы процессора? Проверьте с помощью . Дайте программе немного поработать - возможно, она занимается сложными вычислениями. , то можно ли выполнить ? Что сообщает клиентская программа (попробуйте поработать, например, с ) при попытке соединиться с MySQL? Происходит ли заклинивание клиента? Выдает ли программа какой-нибудь вывод? При посылке отчета об ошибке необходимо придерживаться схемы, описанной в этом руководстве (see section ). В этом разделе перечислены некоторые ошибки, с которыми часто приходится сталкиваться пользователям; дается описание этих ошибок и способы их исправления. See section ("в доступе отказано") . See section . . Наиболее часто ошибка MySQL server has gone away возникает в результате тайм-аута соединения и его закрытия сервером. По умолчанию сервер закрывает соединение по прошествии 8 часов бездействия. Можно изменить лимит времени, установив при запуске . Другой распространенной причиной получения ошибки MySQL server has gone away является выдача команды "закрытия" на соединении MySQL с последующей попыткой выполнить запрос на закрытом соединении. Если это получено в скрипте, то достаточно просто повторить запрос от клиента, чтобы соединение автоматически восстановилось. Обычно в этом случае выдаются следующие коды ошибки (какой из них вы получите, зависит от ОС): Ошибка будет также выдана, если кто-нибудь уничтожит выполняющийся поток посредством . Проверить, что MySQL на ходу, можно, запустив ). Если проблема в аварийном завершении , то необходимо сосредоточиться на поиске причины аварии. В этом случае следует сначала проверить, не будет ли уничтожен MySQL снова при повторном задании запроса (see section ). Эти ошибки будут также выдаваться при посылке серверу неверного или слишком длинного запроса. Если получает неправильный или слишком большой пакет, то сервер предполагает, что с клиентом что-то не так, и закрывает соединение. Если необходимо выполнять объемные запросы (например, при работе с большими столбцами типа ), можно увеличить предельный размер запроса, запустив (по умолчанию 1 Mб). Дополнительная память выделяется по требованию, так что будет выделять больше памяти только в случае, когда выдан большой запрос или когда должен возвратить большую строку результата! Вы также можете получить разрыв соединения, если вы отправили пакет больше 16Мб, если ваш клиент старше чем 4.0.8, а ваш сервер 4.0.8 или новее. Если у вас возникнет желание сделать отчет об ошибке по этой проблеме, то не забудьте включить в него следующие сведения: Информацию о том, упал MySQL или нет (это можно определить по файлу hostname.err (see section ). , а используемые в нем таблицы перед выполнением запроса проверялись с помощью , то желательно составить контрольный тест (see section ). ). Информацию о том, пробовали ли вы запускать и проверять, появляется ли выданный запрос в журнале. Обращайтесь к разделу See section . двумя различными способами: используя либо Unix-сокеты, когда соединение происходит через файл в файловой системе (по умолчанию `/tmp/mysqld.sock' ), либо TCP/IP с соединением через номер порта. Unix-сокеты обеспечивают большую скорость, чем TCP/IP, но могут применяться только при соединении с сервером на том же компьютере. Unix-сокеты используются, если не задано имя хоста или если задано специальное имя . В Windows, если сервер выполняется в 9x/Me, возможно соединение только через TCP/IP. Если сервер работает на NT/2000/XP и , то можно также устанавливать соединение с помощью именованных каналов. Имя именованного канала - MySQL. Если имя хоста не указано при соединении с , то клиент MySQL сначала попробует подключиться к именованному каналу, а если этого сделать не удастся, то к порту TCP/IP. Можно предписать использование именованных каналов в Windows, используя . в качестве имени хоста. (2002) Can't connect to ... обычно говорит о том, что MySQL не запущен на данной системе или что при попытке соединиться с сервером используется неверный сокет-файл или порт TCP/IP. в Windows), выполняется ли на сервере процесс с именем ! Если процесса нет, то его необходимо запустить (see section ). выполняется, то можно проверить сервер, пробуя использовать следующие различные соединения (конечно, номер порта и путь сокета для вашей конфигурации могут быть другими): shell> mysqladmin version shell> mysqladmin variables shell> mysqladmin -h `hostname` version variables shell> mysqladmin -h `hostname` --port=3306 version shell> mysqladmin -h 'ip for your host' version shell> mysqladmin --protocol=socket --socket=/tmp/mysql.sock version Обратите внимание на то, что для (т.е. текущего имени хоста) в команду . Ниже приводится несколько причин, которые могут вызывать ошибку не выполняется. Сервер запущен на системе, использующей MIT-потоки. При работе на системе, в которой отсутствуют "родные" потоки, (see section ). Однако не во всех версиях MIT-потоков поддерживаются Unix-сокеты. В системе без поддержки сокетов при соединении с сервером всегда необходимо явно указывать имя хоста. Попробуйте проверить соединение с сервером с помощью следующей команды: Кто-либо удалил Unix-сокет, используемый `/tmp/mysqld.sock' ). Возможно, есть задание , которое удаляет сокет MySQL (например, задание, удаляющее старые файлы в каталоге ). В таком случае всегда можно выполнить и проверить, действительно ли существует сокет, который используется . Решение здесь заключается в следующем: можно либо изменить задание cron с тем, чтобы оно не удаляло `mysqld.sock' , либо поместить сокет в каком-нибудь другом месте (see section ). . Если путь к сокету для сервера был изменен, то необходимо уведомить о новом пути и клиентов MySQL. Это можно сделать, передав клиенту путь к сокету в качестве аргумента. see section . Используется Linux, и один из потоков аварийно завершился ( ). В этом случае, перед тем как заново запустить MySQL, необходимо уничтожить все остальные потоки (например, с помощью сценария ). Обращайтесь к разделу See section . Возможно, пользователь, от которого запущен MySQL-сервер, не имеет привилегий чтения и записи для каталога, содержащего сокет-файл, либо для самого сокет-файла. В этом случае необходимо либо изменить привилегии для каталога/файла, либо перезапустить , так чтобы сервер использовал каталог, к которому пользователь имеет доступ. , то чтобы выяснить, в чем проблема, можно попробовать выполнить следующие действия: Проверить, запущен ли сервер, выполнив , и несколько раз нажать Enter. Если MySQL работает на этом порту, то должен быть получен ответ, включающий номер версии запущенного сервера. Если будет выдана ошибка вроде , то на указанном порту сервер не работает. , какой порт TCP/IP сконфигурирован для использования (переменная port). Проверьте, не запускается ли сервер . Host '...' is blocked Ошибка, подобная следующей: Host 'hostname' is blocked because of many connection errors. Unblock with 'mysqladmin flush-hosts' говорит о том, что от хоста . После делает предположение, что что-то не так (может, атака от кракера), и блокирует последующие соединения с узла до того момента, пока кто-нибудь не выполнит команду . блокирует хост после 10 ошибок соединения. Это значение можно легко отрегулировать, запустив сервер следующим образом: Заметим, что если для некоторого хоста получено это сообщение об ошибке, то следует сначала проверить, все ли в порядке с TCP/IP-соединениями от этого хоста. Если TCP/IP-соединения не работают, то увеличивать значение переменной бесполезно! при попытке соединиться с MySQL означает, что уже есть клиентов, соединившихся с сервером . Если есть потребность в большем количестве соединений, чем задано по умолчанию (100), то следует перезапустить с заданием большего значения для переменной max_connections. Заметим, что фактически +1) клиентам. Последнее соединение зарезервировано для пользователя с привилегией . Если не наделять этой привилегией обычных пользователей (они могут обойтись и без нее), то администратор, располагая этой привилегией, может войти и использовать для выяснения причин неполадок (see section ). Максимальное число соединений MySQL зависит от того, насколько хорошей является библио

Hosted by uCoz