繁体   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