データベース接続エラー: エラー タイプ 2002 - アクセス許可が拒否されました
P粉757640504
2023-08-24 19:54:00
<p>次のスクリプト (cxn-test.php) を使用してデータベースに接続しようとしています</p>
<pre class="brush:php;toolbar:false;"><?php
$host = '155.30.136.20';//仮想IP
$user = 'abc_user';
$pass = 'xxxxxxxxx';
$dbname = 'ようこそ';
$link = mysqli_connect($host, $user, $pass,$dbname);
if (!$link) {
echo "エラー: MySQL に接続できません。" .PHP_EOL;
echo "デバッグ エラー番号:" . mysqli_connect_errno() . PHP_EOL;
echo "デバッグ エラー メッセージ:" . mysqli_connect_error() . PHP_EOL;
出口;
}それ以外 {
エコー「成功」 .PHP_EOL;
}</pre>
<p>ターミナルで試してみると</p>
<ブロック引用>
<p>php cxn-test.php //成功</p>
</blockquote>
<p>しかし、ローカルホストで試してみると、次のエラーが発生します: </p>
<ブロック引用>
<p>curl -s http://localhost/cxn-test.php</p>
</blockquote>
<p><code>エラー: MySQL に接続できません。
デバッグ エラー番号: 2002
デバッグ エラー メッセージ: アクセス許可が拒否されました</code></p>
<p>これは奇妙な問題です。ローカルホストでは動作しませんが、コマンドラインでは正常に動作します。 </p>
SELinux を実行する新しい CentOS 7 ボックスを入手した後、同じ問題に遭遇しました。コマンドライン経由でリモートの MySQL データベースサーバーに接続できますが、Drupal (およびテスト PHP スクリプト) は接続できません。
この問題は、最終的には SELinux セキュリティ ポリシーによって引き起こされます。
デフォルトでは、ポリシー httpd_can_network_connect_db は無効になっています (つまり、Web サーバー はリモート データベースに 接続できません)。
次のコマンドで確認します。
getsebool -a | grep httpd
httpd_can_network_connect_db がオフになっている場合は、次のコマンドを使用して有効にしてください:
リーリー(-P フラグは変更を永続的なものにするため、設定は再起動後も有効になります。)