![SQLSTATE[HY000] [2003] Keine Verbindung zum MySQL-Server auf '127.0.0.1' (13) möglich, aber 'localhost' funktioniert](https://rvso.com/image/97160/SQLSTATE%5BHY000%5D%20%5B2003%5D%20Keine%20Verbindung%20zum%20MySQL-Server%20auf%20'127.0.0.1'%20(13)%20m%C3%B6glich%2C%20aber%20'localhost'%20funktioniert.png)
Cent os Apache + php + MySQL von php, wenn Sie versuchen, eine Verbindung zu MySQL unter der Adresse 127.0.0.1 herzustellen, tritt ein Fehler auf. Wenn Sie eine Zeile ersetzen, funktioniert 127.0.0.1
alles localhost
problemlos. Das einzige Problem mit php im Browser. Wenn die Konsole ausgeführt wird
php -r "var_dump (mysqli_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"
ist kein Fehler. Auch wenn die Konsole zum Eingeben der
mysql -u user -h 127.0.0.1 -p db_name
oder
mysql -u user -h localhost -p db_name
auch, alles funktioniert. Was könnte das Problem sein?
Softwareversionen
- PHP-5.6.26
- MySQL-5.5.53
- Apache 2.2.15
Endlich,
$ host localhost
localhost has address 127.0.0.1
PHP-Code funktioniert:
$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
PHP-Code funktioniert nicht:
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
SQLSTATE[HY000] [2003] Keine Verbindung zum MySQL-Server auf '127.0.0.1' möglich (13)
PHP-Code funktioniert:
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");
PHP-Code funktioniert nicht:
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
Lösung:
setsebool httpd_can_network_connect_db on
Antwort1
Entsprechenddiese (nicht akzeptierte) Antwort auf StackOverflow, der Grund dafür ist, dass MySQL localhost
anders interpretiert als 127.0.0.1
. Das istin der Dokumentation bestätigt, siehe den Absatz, der mit „ beginnt.Unter Unix behandeln MySQL-Programme den Hostnamen localhost
speziell".
- Dies
127.0.0.1
ist eine explizite IPv4-Adresse, daher versucht der Client, eine Verbindung über TCP/IP herzustellen. - Dies
localhost
ist ein impliziter Hinweis, den lokalen Host zu verwenden, was MySQL, wenn möglich, über einen lokalen Socket und nicht über TCP/IP implementiert.
Da Ihre localhost
Verbindung funktioniert, die 127.0.0.1
andere jedoch nicht, ist möglicherweise eines dieser Probleme die Ursache:
- Ihre Datenbankberechtigungen verweigern eine Verbindung von
127.0.0.1
- Sie verfügen über eine Firewall-Regel, die alle eingehenden Datenbankverbindungsversuche über TCP/IP blockiert
- Sie haben den
bind
Konfigurationseintrag für MySQL so geändert, dass er nicht an die Loopback-Adresse gebunden ist
Angesichts des Fehlercodes 13 (Zugriff verweigert), würde ich die erste davon vor den anderen beiden untersuchen.