Cent os Apache + php + MySQL from php 127.0.0.1 アドレスから MySQL に接続しようとするとエラーが発生します。 1行を変更すると、すべて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
答え1
~によるとStackOverflowに対するこの(許可されていない)回答localhost
その理由は MySQL が異なって解釈するからです127.0.0.1
。これは文書で確認、最初の段落」を参照してください。localhost
Unixでは、MySQLプログラムはホスト名を処理します。」。
- これは
127.0.0.1
明示的なIPv4アドレスなので、クライアントはTCP / IPを介して接続を試みます。 - これは
localhost
localhostを使用するための暗黙のヒントです。 MySQLは、可能であればTCP / IPの代わりにローカルソケットを介してそれを実装します。
あなたのlocalhost
接続は機能しますが、127.0.0.1
他の接続は機能しないため、次のいずれかの問題が原因である可能性があります。
- お客様のデータベース権限は、次の接続を拒否します。
127.0.0.1
- TCP / IPを介したすべてのインバウンドデータベース接続の試みをブロックするファイアウォールルールがあります。
bind
ループバックアドレスにバインドされないようにMySQLの設定項目を変更しました。
エラーコード13(許可が拒否されました)、このうち最初を見て、残りの2つを見てみましょう。