SQLSTATE[HY000] [2003] No se puede conectar al servidor MySQL en '127.0.0.1' (13) pero 'localhost' funciona

SQLSTATE[HY000] [2003] No se puede conectar al servidor MySQL en '127.0.0.1' (13) pero 'localhost' funciona

Cent os Apache + php + MySQL desde php cuando intenta conectarse a MySQL en la dirección 127.0.0.1, se produce un error. Si reemplazas una línea 127.0.0.1todo localhostfunciona sin problemas. El único problema con php en el navegador. Si la consola ejecuta

php -r "var_dump (mysqli_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"

no es ningún error. Además, si la consola para ingresar al

mysql -u user -h 127.0.0.1 -p db_name

o

mysql -u user -h localhost -p db_name

Además, todo funciona. ¿Cual podría ser el problema?

Versiones de software

  • PHP-5.6.26
  • MySQL-5.5.53
  • Apache 2.2.15

Finalmente,

$ host localhost
localhost has address 127.0.0.1

código php funcionando:

$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();
}

El código php no funciona:

$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] No se puede conectar al servidor MySQL en '127.0.0.1' (13)

código php funcionando:

$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");

El código php no funciona:

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

solución:

setsebool httpd_can_network_connect_db on

Respuesta1

De acuerdo aesta respuesta (no aceptada) en StackOverflow, la razón es que MySQL interpreta localhostde manera diferente a 127.0.0.1. Esto esconfirmado en la documentación, vea el párrafo que comienza, "En Unix, los programas MySQL tratan el nombre de host localhostde manera especial".

  • Es 127.0.0.1una dirección IPv4 explícita, por lo que el cliente intenta conectarse a través de TCP/IP.
  • Hay localhostuna sugerencia implícita para usar el host local, que MySQL implementa, cuando sea posible, a través de un socket local en lugar de TCP/IP.

Dado que su localhostconexión funciona pero la 127.0.0.1otra no, parece posible que uno de estos problemas sea el culpable:

  • los permisos de su base de datos niegan una conexión desde127.0.0.1
  • tiene una regla de firewall que bloquea todos los intentos de conexión entrante a la base de datos a través de TCP/IP
  • ha cambiado la bindentrada de configuración para MySQL para que no se vincule a la dirección de bucle invertido

Dado el código de error 13 (Permiso denegado), investigaría el primero de ellos antes que los otros dos.

información relacionada