Spec-Zone .ru
спецификации, руководства, описания, API
|
Клиент MySQL на Unix может соединиться с mysqld сервером двумя различными способами: При использовании
Unix снабжают файл сокетом, чтобы соединиться через файл в файловой системе (значение по умолчанию /tmp/mysql.sock
), или при использовании TCP/IP, который соединяется через номер
порта. Соединение файла сокета Unix быстрее чем TCP/IP, но может использоваться только, соединяясь с сервером на
том же самом компьютере. Файл сокета Unix используется, если Вы не определяете имя хоста или если Вы определяете
специальное имя хоста localhost
.
Если сервер MySQL работает на Windows, можно соединить использование TCP/IP. Если сервер запускается с --enable-named-pipe
опция, можно также соединиться с именованными каналами, если Вы выполняете клиент на узле, куда сервер работает.
Имя именованного канала MySQL
по умолчанию. Если Вы не даете имя хоста, соединяясь
с mysqld, клиент MySQL сначала пытается соединиться с
именованным каналом. Если это не работает, это соединяется с портом TCP/IP. Можно вызвать использование
именованных каналов на Windows при использовании .
как имя хоста.
Ошибка (2002) Can't connect to ...
обычно средства, что нет никакого сервера MySQL,
работающего на системе или что Вы используете неправильный Unix, снабжают сокетом имя файла или номер порта
TCP/IP, пытаясь соединиться с сервером. Следует также проверить, что порт TCP/IP, который Вы используете, не был
блокирован брандмауэром или службой блокирования порта.
Ошибка (2003) Can't connect to MySQL server on '
указывает, что сетевому соединению отказали.
Следует проверить, что есть выполнение сервера MySQL, что у него есть сетевые соединения, включенные, и что
сетевой порт, который Вы определили, является тем, сконфигурированным на сервере. server
' (10061)
Запустите, проверяя, есть ли процесс, названный работой mysqld Вашего узла сервера. (Используйте постскриптум xa | grep mysqld на Unix или Диспетчере задач на Windows.), Если нет такого процесса, следует запустить сервер. См. Раздел 2.10.1.3, "Запускаясь и Диагностируя MySQL Server".
Если процесс mysqld работает, можно проверить это, пробуя следующие команды.
Номер порта или имя файла сокета Unix могли бы отличаться в Вашей установке. host_ip
представляет IP-адрес машины, куда сервер работает.
shell>mysqladmin version
shell>mysqladmin variables
shell>mysqladmin -h `hostname` version variables
shell>mysqladmin -h `hostname` --port=3306 version
shell>mysqladmin -h host_ip version
shell>mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version
Отметьте использование обратных галочек, а не передайте кавычки с командой имени
узла; они заставляют вывод имени узла (то есть,
текущее имя хоста) быть замененным в mysqladmin команду. Если Вы не имеете никакой команды имени узла или работаете на Windows, можно вручную ввести имя
хоста своей машины (без обратных галочек) после -h
опция. Можно также попробовать
-h 127.0.0.1
соединяться с TCP/IP с локальным узлом.
Удостоверьтесь, что сервер не был сконфигурирован, чтобы проигнорировать сетевые соединения или (если Вы
пытаетесь соединиться удаленно), что он не был сконфигурирован, чтобы слушать только локально на его сетевых
интерфейсах. Если сервер был запущен с --skip-networking
, это не будет принимать соединения TCP/IP вообще. Если
сервер был запущен с --bind-address=127.0.0.1
, это прислушается к соединениям TCP/IP только
локально в петлевом интерфейсе и не будет принимать удаленные соединения.
Проверьте, чтобы удостовериться, что нет никакого доступа блокирующего брандмауэра к MySQL. Ваш брандмауэр может быть сконфигурирован на основе приложения, выполняемого, или номер порта, используемый MySQL для передачи (3306 по умолчанию). Под Linux или Unix, проверьте свои таблицы IP (или подобный) конфигурация, чтобы гарантировать, что порт не был блокирован. Под Windows приложения, такие как ZoneAlarm или Windows XP персональный брандмауэр, возможно, должен быть сконфигурирован, чтобы не блокировать порт MySQL.
Вот некоторые причины Can't connect to local MySQL server
ошибка могла бы
произойти:
mysqld не работает на локальном узле. Проверьте список процессов своей операционной системы, чтобы гарантировать, что процесс mysqld присутствует.
Вы выполняете сервер MySQL на Windows со многими соединениями TCP/IP с этим. Если
Вы испытываете это довольно часто, Ваши клиенты получают ту ошибку, можно найти обходное решение здесь:
Раздел C.5.2.2.1,"Connection to MySQL Server Failing on Windows
".
Кто-то удалил файл сокета Unix это использование mysqld (/tmp/mysql.sock
по
умолчанию). Например, у Вас могло бы быть cron задание,
которое удаляет старые файлы из /tmp
каталог. Можно всегда выполнять mysqladmin версию, чтобы проверить, существует ли
файл сокета Unix, который mysqladmin пытается использовать действительно.
Фиксация в этом случае должна сменить cron работу, чтобы
не удалить mysql.sock
или поместить файл сокета где-то в другом месте. См.
Раздел C.5.4.5, "Как
Защитить или Изменить MySQL Unix Socket File".
Вы запустили mysqld сервер с --socket=/path/to/socket
опция, но забытый, чтобы сказать клиенту
программирует новое имя файла сокета. Если Вы изменяете путь сокета для сервера, следует также уведомить
клиенты MySQL. Можно сделать это, обеспечивая то же самое --socket
опция, когда Вы выполняете клиентские программы. Вы также
должны гарантировать, что у клиентов есть разрешение к доступу mysql.sock
файл. Чтобы узнать, где файл сокета, можно сделать:
shell> netstat -ln | grep
mysql
См. Раздел C.5.4.5, "Как Защитить или Изменить MySQL Unix Socket File".
Вы используете Linux, и один поток сервера умер (выведенное ядро). В этом случае следует уничтожить другие потоки mysqld (например, с уничтожением или с mysql_zap сценарием) прежде, чем можно будет перезапустить сервер MySQL. См. Раздел C.5.4.2, "Что к MySQL Do If Продолжает Отказывать".
У сервера или клиентской программы не могло бы быть надлежащих прав доступа для
каталога, который содержит файл сокета Unix или файл сокета непосредственно. В этом случае следует или
изменить права доступа для каталога или файла сокета так, чтобы сервер и клиенты могли получить доступ к
ним, или перезапустить mysqld с a --socket
опция, которая определяет имя файла сокета в каталоге, где
сервер может создать ее и где клиентские программы могут получить доступ к ней.
Если Вы получаете сообщение об ошибке Can't connect to MySQL server on some_host
,
можно попробовать следующие вещи узнать, какова проблема:
Проверьте, работает ли сервер на том узле, выполняясь telnet
some_host 3306
и нажатие клавиши Enter пару раз. (3306 номер порта MySQL значения по умолчанию.
Измените значение, если Ваш сервер слушает различный порт.), Если есть выполнение сервера MySQL и
слушание порта, следует получить ответ, который включает номер версии сервера. Если Вы получаете ошибку
такой как telnet: Unable to connect to remote host: Connection refused
,
тогда нет никакого сервера, работающего на данном порту.
Если сервер работает на локальном узле, попытайтесь использовать mysqladmin-h localhost переменные, чтобы соединить
использование файла сокета Unix. Проверьте номер порта TCP/IP, который сервер конфигурируется, чтобы
слушать (это - значение port
переменная.)
Если Вы работаете под Linux, и Улучшенному безопасностью Linux (SELinux) включают,
удостоверьтесь, что Вы отключили защиту SELinux для mysqld
процесс.
Когда Вы выполняете сервер MySQL на Windows со многими соединениями TCP/IP с этим, и Вы испытываете это
довольно часто, Ваши клиенты получают a Can't connect to MySQL server
ошибка,
причина могла бы состоять в том, что Windows не учитывает достаточно многие эфемерные (недолгие) порты,
чтобы служить тем соединениям.
Цель TIME_WAIT
должен сохранить соединение, принимающее пакеты даже после того,
как соединение было закрыто. Это - то, потому что интернет-маршрутизация может заставить пакет следовать
медленным маршрутом своему месту назначения, и она может прибыть после того, как обе стороны согласились
закрыться. Если порт используется для нового соединения, тот пакет от старого соединения мог бы повредить
протокол или поставить под угрозу персональные данные от исходного соединения. TIME_WAIT
задержка предотвращает это, гарантируя, что порт не может быть снова использован, пока некоторое время не
было разрешено для тех задержанных пакетов прибыть.
Безопасно уменьшить TIME_WAIT
значительно на LAN-соединениях, потому что есть
немного шанса пакетов, достигающих очень длинных задержек, как они могли через Интернет с его сравнительно
большими расстояниями и задержками.
Windows разрешает эфемерные (недолгие) порты TCP пользователю. После того, как любой порт закрывается, это
останется в a TIME_WAIT
состояние в течение 120 секунд. Порт не будет доступен
снова, пока это время не истекает. Диапазон значения по умолчанию номеров портов зависит от версии Windows с
большим ограниченным количеством портов в более старых версиях:
Windows через Сервер 2003: Порты в диапазоне 1025–5000
Windows Vista, Сервер 2008, и более новый: Порты в диапазоне 49152–65535
С маленьким стеком доступных портов TCP (5000) и высокое число портов TCP, являющихся открытым и закрытым за
короткий период времени наряду с TIME_WAIT
состояние у Вас есть хороший шанс
для того, чтобы исчерпать порты. Есть два способа рассмотреть эту проблему:
Сократите количество портов TCP, использованных быстро, исследуя объединение в пул соединения или персистентные соединения где только возможно
Настройте некоторые настройки в реестре Windows (см. ниже),
ВАЖНЫЙ: следующая процедура включает изменение реестра Windows. Прежде, чем Вы
измените реестр, удостоверьтесь, что поддержали его и удостоверились, что Вы понимаете, как восстановить
реестр, если проблема происходит. Для получения информации о том, как поддержать, восстановите, и
отредактируйте реестр, просмотрите следующую статью в Microsoft Knowledge Base:
Запустите Редактор реестра (Regedt32.exe
).
Определите местоположение следующего ключа в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
На Edit
меню, щелкнуть Add
Value
, и затем добавьте следующее значение реестра:
Value Name: MaxUserPortData Type: REG_DWORDValue: 65534
Это определяет номер эфемерных портов, доступных любому пользователю. Допустимый диапазон между 5000 и 65534 (десятичное число). Значение по умолчанию является 0x1388 (5000 десятичных чисел).
На Edit
меню, щелкнуть Add
Value
, и затем добавьте следующее значение реестра:
Value Name: TcpTimedWaitDelayData Type: REG_DWORDValue: 30
Это определяет номер секунд, чтобы сдержать соединение порта TCP TIME_WAIT
состояние перед закрытием. Допустимый диапазон между 0
(нуль) и 300 (десятичное число). Значение по умолчанию является 0x78 (120 десятичных чисел).
Редактор реестра выхода.
Перезагрузите машину.
Отметьте: Отмена вышеупомянутое должно быть столь же простым как удаление ключей реестра, которые Вы создали.