Неустранимая ошибка PHP: неперехваченное исключение «PDOException» с сообщением «SQLSTATE [HY000] [2002] Connection отказано

У меня есть другой сервер для моей базы данных.

Когда я подключался к базе данных с помощью PDO, я использовал IP-адрес виртуальной машины базы данных в качестве параметра хоста:

$dbh = new pdo("mysql:host=192.168.56.103;port=3306;dbname=data",'root','root')

Но я получаю отказ в соединении (PDOException 'с сообщением' SQLSTATE [HY000] [2002] '). Думаю, он не смог найти там MySQL. Однако он смог найти виртуальную машину с этим IP-адресом.

1
задан 11 April 2015 в 10:28

2 ответа

Хорошо затем проверьте, не работает ли mysql действительно:

sudo aptitude install nmap

И затем:

sudo nmap -sS <ipofdbserverhere>

Можно также установить инструмент на mysql сервере, команда была бы:

sudo nmap -sS localhost

В обоих случаях Ваш ответ должен быть похожим на это.

[simmel]@[mars]$ sudo nmap -sS 172.16.1.41

Starting Nmap 6.40 ( http://nmap.org ) at 2015-04-08 15:09 CEST

Nmap scan report for 172.16.1.41
Host is up (0.010s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 33.17 seconds

Если это показывает Вам порт 3306, это действительно открыто и готово к соединениям. Если это так, используйте mysql через командную строку от Вашего компьютера.

mysql -u<USER> -p<PASSWORD> -h<ipofdbserverhere> <databasename>

То же сообщение появляется?В соединении отказано? Затем у Вашего пользователя есть, вероятно, неправильные права.

Другая причина этого состоит в том, когда mysql сервер связывается с определенным адресом, как 127.0.0.1.

Для обнаружения проверяют вывод от:

sudo netstat -tlpen

Если mysql не слушает 0.0.0.0:3306 но к 127.0.0.1:3306, только можно соединиться от localhost.

Изменить то движение на /etc/mysql/my.cnf и прокомментируйте следующую строку:

bind-address            = 127.0.0.1

Способ прокомментировать его состоит в том, чтобы добавить продвижение # символ:

#bind-address            = 127.0.0.1

Сохраните файл и перезапустите mysql сервис

sudo service mysql restart

Теперь необходимо смочь соединиться.

Для изменения порта войдите, например:

port = 8888

в /etc/mysql/my.cnf.

Сохраните файл и перезапустите mysql сервис:

sudo service mysql restart
3
ответ дан 11 April 2015 в 10:28

Ошибка 2 002 средства, которые MySQL не может подключить к серверу локальной базы данных через файл сокета (например. /tmp/mysql.sock).

Для обнаружения, где файл сокета, выполненный:

mysql_config --socket

затем двойная проверка, чтобы Ваше приложение использовало правильный файл сокета Unix или подключение через порт TCP/IP вместо этого.

Протестируйте сокет:

mysql --socket=/var/mysql/mysql.sock

Если сокет Unix является неправильным, Вы можете символьная ссылка он, например:

ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

или исправьте свой конфигурационный файл (например. php.ini).

Для тестирования соединения PDO непосредственно от PHP можно работать:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

Проверьте также конфигурацию между Apache и CLI (интерфейс командной строки), как конфигурация может быть, отличаются.

Могло бы случиться так, что сервер работает, но Вы пытаетесь соединить использование порта TCP/IP, именованного канала или файла сокета Unix, отличающегося от того, на котором слушает сервер. Для исправления этого, необходимо вызвать клиентскую программу (например, определение --port опция) для указания на число соответствующего порта, или надлежащий именованный канал или Unix снабжают файл сокетом (например. --socket опция).

См.: поиск и устранение неисправностей проблем, соединяющихся с MySQL


Другой utils/commands, который может помочь отследить проблему:

  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • Используйте XDebug с xdebug.show_exception_trace=1 в Вашем xdebug.ini
  • На попытке OS X sudo dtruss -fn mysqld, на Linux отлаживают с strace
  • Проверьте полномочия на сокете Unix: stat $(mysql_config --socket) и если у Вас есть достаточно свободного пространства (df -h).
  • Перезапустите свой MySQL.
  • Проверить net.core.somaxconn.
0
ответ дан 11 April 2015 в 10:28

Другие вопросы по тегам:

Похожие вопросы: