web-dev-qa-db-ja.com

Connect DATABASEエラータイプ:2002:アクセスが拒否されました

次のスクリプト(cxn-test.php)でデータベースに接続しようとしています

<?php
$Host = '155.30.136.20';//dummy ip 
$user = 'abc_user';
$pass = 'xxxxxxxxx';
$dbname = 'welcome';
$link = mysqli_connect($Host, $user, $pass,$dbname);
if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}else {
    echo "success" . PHP_EOL;
}

ターミナルで試しているとき

php cxn-test.php //成功

しかし、ローカルホストで試していると、次のエラーが発生します。

curl -s http://localhost/cxn-test.php

Error: Unable to connect to MySQL. Debugging errno: 2002 Debugging error: Permission denied

これは奇妙な問題で、ローカルホストでは機能していませんが、コマンドラインでは正常に機能しています。

7
Sundar

SELinuxを実行している新しいCentOS7ボックスを入手した後、同じ問題が発生しました。コマンドラインからリモートMySQLDBサーバーに接続できましたが、Drupal(およびテストPHPスクリプト)は接続できませんでした。

問題はSELinuxセキュリティポリシーであることが判明しました。

デフォルトでは、ポリシーhttpd_can_network_connect_dbは無効になっています(つまり、WebサーバーはリモートDBに接続できません)。

これを確認してください:

getsebool -a | grep httpd

Httpd_can_network_connect_dbがオフの場合は、次の方法で有効にします。

setsebool -P httpd_can_network_connect_db 1

(-Pフラグは変更を永続的にするため、設定は再起動後も存続します。)

22
Charlie