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

1

Centavo do Apache + php + MySQL do php quando você tenta se conectar ao MySQL no endereço 127.0.0.1, ocorre um erro. Se você substituir uma linha 127.0.0.1 to localhost , tudo funcionará sem problemas. O único problema com o php no navegador. Se o console executar

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

não é um 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
  • 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();
}

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-se 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
    
por Carl W. 25.10.2016 / 10:01

1 resposta

2

De acordo com esta resposta (não aceita) no StackOverflow , o motivo é que o MySQL interpreta localhost diferentemente de% código%. Isso é confirmado na documentação , veja o parágrafo começando, " No Unix , Os programas MySQL tratam o nome do host 127.0.0.1 especialmente ".

  • O localhost é um endereço IPv4 explícito, portanto, o cliente tenta se conectar através de TCP / IP
  • O 127.0.0.1 é uma dica implícita para usar o host local, implementado pelo MySQL, onde possível, por meio de um soquete local, em vez de TCP / IP

Como sua conexão localhost funciona, mas o localhost não funciona, parece possível que um desses 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 banco de dados de entrada em TCP / IP
  • você alterou a entrada de configuração 127.0.0.1 para o 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.

    
por 25.10.2016 / 12:31