Spec-Zone .ru
спецификации, руководства, описания, API

C.5.2.2. Can't connect to [local] MySQL server

Клиент 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 'server' (10061) указывает, что сетевому соединению отказали. Следует проверить, что есть выполнение сервера MySQL, что у него есть сетевые соединения, включенные, и что сетевой порт, который Вы определили, является тем, сконфигурированным на сервере.

Запустите, проверяя, есть ли процесс, названный работой mysqld Вашего узла сервера. (Используйте постскриптум xa | grep mysqld на Unix или Диспетчере задач на Windows.), Если нет такого процесса, следует запустить сервер. См. Раздел 2.10.1.3, "Запускаясь и Диагностируя MySQL Server".

Если процесс mysqld работает, можно проверить это, пробуя следующие команды. Номер порта или имя файла сокета Unix могли бы отличаться в Вашей установке. host_ip представляет IP-адрес машины, куда сервер работает.

shell> mysqladmin
        versionshell> mysqladmin
        variablesshell> mysqladmin -h `hostname` version
        variablesshell> mysqladmin -h `hostname` --port=3306
        versionshell> mysqladmin -h host_ip versionshell> 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 ошибка могла бы произойти:

Если Вы получаете сообщение об ошибке Can't connect to MySQL server on some_host, можно попробовать следующие вещи узнать, какова проблема:

C.5.2.2.1. Connection to MySQL Server Failing on Windows

Когда Вы выполняете сервер 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: http://support.microsoft.com/kb/256986/EN-US/.

  1. Запустите Редактор реестра (Regedt32.exe).

  2. Определите местоположение следующего ключа в реестре:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. На Edit меню, щелкнуть Add Value, и затем добавьте следующее значение реестра:

    Value Name: MaxUserPortData Type: REG_DWORDValue: 65534

    Это определяет номер эфемерных портов, доступных любому пользователю. Допустимый диапазон между 5000 и 65534 (десятичное число). Значение по умолчанию является 0x1388 (5000 десятичных чисел).

  4. На Edit меню, щелкнуть Add Value, и затем добавьте следующее значение реестра:

    Value Name: TcpTimedWaitDelayData Type: REG_DWORDValue: 30

    Это определяет номер секунд, чтобы сдержать соединение порта TCP TIME_WAIT состояние перед закрытием. Допустимый диапазон между 0 (нуль) и 300 (десятичное число). Значение по умолчанию является 0x78 (120 десятичных чисел).

  5. Редактор реестра выхода.

  6. Перезагрузите машину.

Отметьте: Отмена вышеупомянутое должно быть столь же простым как удаление ключей реестра, которые Вы создали.