資料庫連線錯誤:錯誤類型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 = 'welcome';
$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;
exit;
}else {
echo "成功" . PHP_EOL;
}</pre>
<p>當我在終端上嘗試時</p>
<blockquote>
<p>php cxn-test.php //成功</p>
</blockquote>
<p>但當我在本地主機上嘗試時,我遇到了以下錯誤:</p>
<blockquote>
<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為Off,請透過下列指令啟用:
(-P標誌使變更永久生效,因此設定在重新啟動後仍然有效。)