web-dev-qa-db-ja.com

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

Cent os Apache + php + PHPからのMySQLアドレス127.0.0.1でMySQLに接続しようとすると、エラーが発生します。行を置き換える場合127.0.0.1からlocalhostすべてが問題なく機能します。ブラウザの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
3
Carl W.

StackOverflowでのこの(受け入れられない)回答 によると、理由はMySQLがlocalhost127.0.0.1とは異なる方法で解釈するためです。これは ドキュメントで確認済み で始まります。「Unixでは、MySQLプログラムはホスト名localhostを特別に扱います "。

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

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

  • データベースのアクセス許可は、127.0.0.1からの接続を拒否します
  • tCP/IPを介したすべてのインバウンドデータベース接続の試行をブロックするファイアウォールルールがあります
  • mySQLのbind構成エントリを変更して、ループバックアドレスにバインドしないようにしました

エラーコード13(permission denied)が与えられた場合、他の2つの前に最初の1つを調査します。

3
roaima