访问被拒绝用户'www-data'@'localhost - 如何处理?

时间:2011-10-06 07:30:08

标签: php mysql

我昨天遇到了一个奇怪的问题。我有运行Debian的服务器,安装了PHP 4.4.4-8和mysql 5.5.9。该服务器服务于几个网站。 出于某种原因,当我尝试加载网页时,我会随机收到“用户拒绝访问'www-data'@'localhost'(使用密码:NO)”错误。 如果我点击刷新页面正常加载,但几次点击该消息再次出现。该页面用于连接mysql服务器的用户名不是www-data。

有没有人遇到过类似的问题?

7 个答案:

答案 0 :(得分:16)

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()); }

答案 1 :(得分:2)

这听起来像是在调用特定内容时导致错误的查询。这可能意味着在调用查询时,您没有使用正确的用户名/密码连接到数据库。

尽量确保您已确定连接,在所有查询变量的末尾使用or die(mysql_error());进行调试。

另外,在php文件的顶部使用以下两行:

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

这将向您显示您的课程/文件中可能出现的任何小错误,这些错误可能是您之前未提起的。

如果您在此之后仍有问题,请发布您的PHP代码,我会直接看一下。

谢谢!

答案 2 :(得分:1)

我遇到了同样的问题。 问题出在我的config.php中! 我只是改变了 $ dbserver “127.0.0.1” - &gt; “本地主机”。 现在连接再次有效!

答案 3 :(得分:0)

使用密码&#39;否&#39;

&#13;
&#13;
for sheet_name in EF.sheet_names:
    temp_df = EF.parse(sheet_name)
    #perform your calculations 
    #export to SQL
&#13;
&#13;
&#13;

答案 4 :(得分:0)

取消安全模式为我修复了它:

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

答案 5 :(得分:0)

对于思维不集中的人,当在mysql_query()之后调用mysqli_connect()时,应该在mysqli_query()处调用此错误。

答案 6 :(得分:-1)

解决这个问题。我不得不改变连接脚本使用

&#13;
&#13;
(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";
?> 
&#13;
&#13;
&#13;