Schwerwiegender PHP-Fehler: Nicht abgefangene Ausnahme „PDOException“ mit der Meldung „SQLSTATE[HY000] [2002] Verbindung abgelehnt

Schwerwiegender PHP-Fehler: Nicht abgefangene Ausnahme „PDOException“ mit der Meldung „SQLSTATE[HY000] [2002] Verbindung abgelehnt

Ich habe einen anderen Server für meine Datenbank.

Als ich mich mit PDO mit der Datenbank verbunden habe, habe ich die IP-Adresse der Datenbank-VM als Hostparameter verwendet:

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

Aber die Verbindung wird abgelehnt (PDOException‘ mit der Meldung ‚SQLSTATE[HY000] [2002]‘). Ich vermute, dass MySQL dort nicht gefunden werden konnte. Die VM mit dieser IP konnte jedoch gefunden werden.

Antwort1

Prüfen Sie dann, ob MySQL wirklich nicht läuft:

sudo aptitude install nmap

Und dann:

sudo nmap -sS <ipofdbserverhere>

Sie können das Tool auch auf dem MySQL-Server installieren. Der Befehl lautet dann:

sudo nmap -sS localhost

In beiden Fällen sollte Ihre Antwort so aussehen.

[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

Wenn Port 3306 angezeigt wird, ist er tatsächlich offen und bereit für Verbindungen. Wenn das der Fall ist, verwenden Sie MySQL über die Befehlszeile von Ihrem Computer aus.

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

Es erscheint die gleiche Meldung? Verbindung abgelehnt? Dann hat Ihr Benutzer wahrscheinlich die falschen Rechte.

Ein weiterer Grund hierfür ist, wenn der MySQL-Server an eine bestimmte Adresse gebunden ist, beispielsweise 127.0.0.1.

Um dies herauszufinden, überprüfen Sie die Ausgabe von:

sudo netstat -tlpen

0.0.0.0:3306Wenn MySQL nicht auf , sondern auf hört 127.0.0.1:3306, können Sie nur vom lokalen Host aus eine Verbindung herstellen.

Um dies zu ändern, gehen Sie zu /etc/mysql/my.cnfund kommentieren Sie die folgende Zeile aus:

bind-address            = 127.0.0.1

Sie können es auskommentieren, indem Sie ein führendes #Zeichen hinzufügen:

#bind-address            = 127.0.0.1

Speichern Sie die Datei und starten Sie den MySQL-Dienst neu

sudo service mysql restart

Jetzt sollten Sie eine Verbindung herstellen können.

Um den Port zu ändern, geben Sie beispielsweise ein:

port = 8888

In /etc/mysql/my.cnf.

Speichern Sie die Datei und starten Sie den MySQL-Dienst neu:

sudo service mysql restart

Antwort2

Der Fehler 2002 bedeutet, dass MySQL keine Verbindung zum lokalen Datenbankserver über die Socket-Datei (z. B. /tmp/mysql.sock) herstellen kann.

Um herauszufinden, wo sich Ihre Socket-Datei befindet, führen Sie Folgendes aus:

mysql_config --socket

Überprüfen Sie dann noch einmal, ob Ihre Anwendung die richtige Unix-Socket-Datei verwendet, oder stellen Sie stattdessen die Verbindung über den TCP/IP-Port her.

Testen Sie die Steckdose:

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

Wenn der Unix-Socket falsch ist, können Sie einen symbolischen Link darauf erstellen, zum Beispiel:

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

oder korrigieren Sie Ihre Konfigurationsdatei (zB php.ini).

Zum Testen dergeschützte UrsprungsbezeichnungVerbindung direkt von PHP aus herstellen, können Sie Folgendes ausführen:

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

Überprüfen Sie auch die Konfiguration zwischen Apache und CLI (Befehlszeilenschnittstelle), da die Konfiguration unterschiedlich sein kann.

Möglicherweise läuft der Server, aber Sie versuchen, eine Verbindung über einen anderen TCP/IP-Port, eine andere Named Pipe oder eine andere Unix-Socket-Datei herzustellen als die, die der Server abhört. Um dies zu korrigieren, müssen Sie ein Client-Programm aufrufen (z. B. durch Angabe --porteiner Option), um die richtige Portnummer oder die richtige Named Pipe oder Unix-Socket-Datei (z. B. --socketOption) anzugeben.

Sehen:Beheben von Problemen bei der Verbindung mit MySQL


Andere Dienstprogramme/Befehle, die bei der Problemverfolgung helfen können:

  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • Verwenden Sie XDebug mit xdebug.show_exception_trace=1in Ihremxdebug.ini
  • Unter OS X versuchen Sie es sudo dtruss -fn mysqld, unter Linux debuggen Sie mitstrace
  • Überprüfen Sie die Berechtigungen für den Unix-Socket: stat $(mysql_config --socket)und ob Sie genügend freien Speicherplatz haben ( df -h).
  • Starten Sie MySQL neu.
  • Überprüfennet.core.somaxconn.

verwandte Informationen