![SQLSTATE[HY000] [2003] No se puede conectar al servidor MySQL en '127.0.0.1' (13) pero 'localhost' funciona](https://rvso.com/image/97160/SQLSTATE%5BHY000%5D%20%5B2003%5D%20No%20se%20puede%20conectar%20al%20servidor%20MySQL%20en%20'127.0.0.1'%20(13)%20pero%20'localhost'%20funciona.png)
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.1
todo localhost
funciona 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 localhost
de 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 localhost
de manera especial".
- Es
127.0.0.1
una dirección IPv4 explícita, por lo que el cliente intenta conectarse a través de TCP/IP. - Hay
localhost
una 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 localhost
conexión funciona pero la 127.0.0.1
otra no, parece posible que uno de estos problemas sea el culpable:
- los permisos de su base de datos niegan una conexión desde
127.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
bind
entrada 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.