SQLSTATE[HY000] [2003] '127.0.0.1'(13) で MySQL サーバーに接続できませんが、 'localhost' は機能します。

SQLSTATE[HY000] [2003] '127.0.0.1'(13) で MySQL サーバーに接続できませんが、 'localhost' は機能します。

Cent os Apache + php + MySQL from php 127.0.0.1 アドレスから MySQL に接続しようとするとエラーが発生します。 1行を変更すると、すべて127.0.0.1localhost問題なくうまく機能します。ブラウザでPHPの唯一の問題です。コンソールが実行されている場合

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

エラーはありません。しかもコンソールに入ると

mysql -u user -h 127.0.0.1 -p db_name

または

mysql -u user -h localhost -p db_name

繰り返しますが、すべてがうまくいきます。何が問題なのでしょうか?

ソフトウェアバージョン

  • PHP-5.6.26
  • MySQL-5.5.53
  • Apache 2.2.15

ついに、

$ host localhost
localhost has address 127.0.0.1

PHPコード動作中:

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

PHPコードが機能しません:

$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] 「127.0.0.1」でMySQLサーバーに接続できません(13)

PHPコード動作中:

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

PHPコードが機能しません:

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

解決策:

setsebool httpd_can_network_connect_db on

答え1

~によるとStackOverflowに対するこの(許可されていない)回答localhostその理由は MySQL が異なって解釈するからです127.0.0.1。これは文書で確認、最初の段落」を参照してください。localhostUnixでは、MySQLプログラムはホスト名を処理します。」。

  • これは127.0.0.1明示的なIPv4アドレスなので、クライアントはTCP / IPを介して接続を試みます。
  • これはlocalhostlocalhostを使用するための暗黙のヒントです。 MySQLは、可能であればTCP / IPの代わりにローカルソケットを介してそれを実装します。

あなたのlocalhost接続は機能しますが、127.0.0.1他の接続は機能しないため、次のいずれかの問題が原因である可能性があります。

  • お客様のデータベース権限は、次の接続を拒否します。127.0.0.1
  • TCP / IPを介したすべてのインバウンドデータベース接続の試みをブロックするファイアウォールルールがあります。
  • bindループバックアドレスにバインドされないようにMySQLの設定項目を変更しました。

エラーコード13(許可が拒否されました)、このうち最初を見て、残りの2つを見てみましょう。

関連情報