簡體   English   中英

訪問被拒絕用戶'www-data'@'localhost - 如何處理?

[英]Access denied for user 'www-data'@'localhost - how to deal with that?

我昨天遇到了一個奇怪的問題。 我有運行Debian的服務器,安裝了PHP 4.4.4-8和mysql 5.5.9。 該服務器服務於幾個網站。 出於某種原因,當我嘗試加載網頁時,我會隨機收到“用戶拒絕訪問'www-data'@'localhost'(使用密碼:NO)”錯誤。 如果我點擊刷新頁面正常加載,但幾次點擊該消息再次出現。 該頁面用於連接mysql服務器的用戶名不是www-data。

有沒有人遇到過類似的問題?

www-data是運行apache和php的Debian用戶。 如果在沒有有效連接的情況下嘗試查詢,php / mysql將嘗試使用<unix-user>@localhost創建一個沒有密碼的連接。 這是www-data@localhost (using password:NO)的來源。

現在已經開始發生這種情況的最可能的原因(盡管它已經運行了2年之前)是你的數據庫負載增加到某些連接無法成功的程度(可能是由於max_connections或max_user_connections;盡管這也可能來自其他限制,如內存,線程等)。 發生這種情況時,調用mysql_connect將發出錯誤消息,並返回FALSE 如果您未能檢測到此故障,那么您的下一個mysql調用(可能是mysql_query或mysql_select_db)將嘗試連接到www-data @ localhost - 從而導致您看到的問題。

我建議啟用錯誤報告和錯誤顯示(由@DarkMantis建議):

ini_set('error_reporting', E_ALL|E_STRICT);
ini_set('display_errors', 1);

另外,請確保您對mysql_connect的調用前面沒有 @符號; 並確保檢查返回值。 它應該看起來像這樣:

$cxn = mysql_connect('localhost','yourusername','yourpassword');
if( $cxn === FALSE ) {  die('mysql connection error: '.mysql_error()); }

這聽起來像是在調用特定內容時導致錯誤的查詢。 這可能意味着在調用查詢時,您沒有使用正確的用戶名/密碼連接到數據庫。

盡量確保你是絕對連接,使用or die(mysql_error()); 在所有查詢變量的末尾調試它們。

另外,在php文件的頂部使用以下兩行:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);

這將顯示您的類/文件中可能出現的任何小錯誤,您可能以前沒有找到它們。

如果您在此之后仍有問題,請發布您的PHP代碼,我會直接看一下。

謝謝!

我遇到了同樣的問題。 問題出在我的config.php中! 我只是將$ dbserver“127.0.0.1” - >“localhost”更改為 現在連接再次起作用!

使用密碼'否'

 (MySQLi Object-Oriented) <?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?> 

取消激活安全模式為我修復了它:

Notice: mysql_connect(): SQL safe mode in effect - ignoring host/user/password information in /var/www/html/test.php on line 4

對於心不在焉的人,當在mysqli_connect()之后調用mysql_query()時,可能會發生此錯誤,而應該是mysqli_query()

為了解決這個問題。 我不得不更改連接腳本使用

 (MySQLi Object-Oriented) <?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM