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

jin*_*ngo 11 php mysql

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

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

Lee*_*Lee 17

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);
Run Code Online (Sandbox Code Playgroud)

另外,请确保您对mysql_connect的调用前面没有@符号; 并确保检查返回值.它应该看起来像这样:

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