SQLSTATE[HY000] [2003] Keine Verbindung zum MySQL-Server auf '127.0.0.1' (13) möglich, aber 'localhost' funktioniert

SQLSTATE[HY000] [2003] Keine Verbindung zum MySQL-Server auf '127.0.0.1' (13) möglich, aber 'localhost' funktioniert

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.1alles localhostproblemlos. 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 localhostanders 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 localhostspeziell".

  • Dies 127.0.0.1ist eine explizite IPv4-Adresse, daher versucht der Client, eine Verbindung über TCP/IP herzustellen.
  • Dies localhostist 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 localhostVerbindung funktioniert, die 127.0.0.1andere jedoch nicht, ist möglicherweise eines dieser Probleme die Ursache:

  • Ihre Datenbankberechtigungen verweigern eine Verbindung von127.0.0.1
  • Sie verfügen über eine Firewall-Regel, die alle eingehenden Datenbankverbindungsversuche über TCP/IP blockiert
  • Sie haben den bindKonfigurationseintrag 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.

verwandte Informationen