![SQLSTATE[HY000] [2003] Não é possível conectar ao servidor MySQL em '127.0.0.1' (13), mas 'localhost' funciona](https://rvso.com/image/97160/SQLSTATE%5BHY000%5D%20%5B2003%5D%20N%C3%A3o%20%C3%A9%20poss%C3%ADvel%20conectar%20ao%20servidor%20MySQL%20em%20'127.0.0.1'%20(13)%2C%20mas%20'localhost'%20funciona.png)
Cent os Apache + php + MySQL do php ao tentar conectar ao MySQL no endereço 127.0.0.1, ocorre um erro. Se você substituir uma linha 127.0.0.1
tudo localhost
funciona sem problemas. O único problema com php no navegador. Se o console executar
php -r "var_dump (mysqli_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"
não há erro. Além disso, se o console para entrar no
mysql -u user -h 127.0.0.1 -p db_name
ou
mysql -u user -h localhost -p db_name
também, tudo funciona. Qual poderia ser o problema?
Versões de software
- PHP-5.6.26
- MySQL-5.5.53
- Apache2.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();
}
código php não 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] Não é possível conectar ao servidor MySQL em '127.0.0.1' (13)
código php funcionando:
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");
código php não funciona:
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
solução:
setsebool httpd_can_network_connect_db on
Responder1
De acordo comesta resposta (não aceita) no StackOverflow, o motivo é que o MySQL interpreta localhost
de maneira diferente do 127.0.0.1
. Isso éconfirmado na documentação, veja o parágrafo que começa com "No Unix, os programas MySQL tratam o nome do host localhost
especialmente".
- O
127.0.0.1
é um endereço IPv4 explícito, portanto o cliente tenta se conectar por TCP/IP - Esta
localhost
é uma dica implícita para usar o host local, que o MySQL implementa, sempre que possível, através de um soquete local ao invés de TCP/IP.
Como sua localhost
conexão funciona, mas a 127.0.0.1
outra não, parece possível que um destes problemas seja o culpado:
- suas permissões de banco de dados negam uma conexão de
127.0.0.1
- você tem uma regra de firewall bloqueando todas as tentativas de conexão de entrada do banco de dados por TCP/IP
- você alterou a
bind
entrada de configuração do MySQL para que ela não seja vinculada ao endereço de loopback
Dado o código de erro 13 (permissão negada), eu investigaria o primeiro deles antes dos outros dois.