У меня есть другой сервер для моей базы данных.
Когда я подключался к базе данных с помощью PDO, я использовал IP-адрес виртуальной машины базы данных в качестве параметра хоста:
$dbh = new pdo("mysql:host=192.168.56.103;port=3306;dbname=data",'root','root')
Но я получаю отказ в соединении (PDOException 'с сообщением' SQLSTATE [HY000] [2002] '). Думаю, он не смог найти там MySQL. Однако он смог найти виртуальную машину с этим IP-адресом.
Хорошо затем проверьте, не работает ли 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
Ошибка 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.show_exception_trace=1
в Вашем xdebug.ini
sudo dtruss -fn mysqld
, на Linux отлаживают с strace
stat $(mysql_config --socket)
и если у Вас есть достаточно свободного пространства (df -h
).net.core.somaxconn
.