SQLSTATE[HY000] [2003] Não é possível conectar ao servidor MySQL em '127.0.0.1' (13), mas 'localhost' funciona

SQLSTATE[HY000] [2003] Não é possível conectar ao servidor MySQL em '127.0.0.1' (13), mas 'localhost' funciona

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.1tudo localhostfunciona 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 localhostde 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 localhostespecialmente".

  • 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 localhostconexão funciona, mas a 127.0.0.1outra não, parece possível que um destes problemas seja o culpado:

  • suas permissões de banco de dados negam uma conexão de127.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 bindentrada 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.

informação relacionada