昨天我面对一个奇怪的问题.我有服务器运行Debian,安装了
PHP 4.4.4-8和MysqL 5.5.9.该服务器服务于几个网站.
由于某些原因随机我得到那个错误“访问被拒绝为用户’www-data’@’localhost'(使用密码:否)”当我尝试加载网页.
如果我点击刷新页面加载正常,但多次点击该消息再次出现.该页面用于连接到MysqL服务器的用户名不是www-data.
由于某些原因随机我得到那个错误“访问被拒绝为用户’www-data’@’localhost'(使用密码:否)”当我尝试加载网页.
如果我点击刷新页面加载正常,但多次点击该消息再次出现.该页面用于连接到MysqL服务器的用户名不是www-data.
有没有人遇到类似的问题?
www-data是运行apache和PHP的Debian用户.如果您在没有有效连接时尝试查询,则PHP / MysqL将尝试使用< unix-user> @localhost创建一个没有密码的连接.这是www-data @ localhost(使用密码:NO)来自哪里.
这个现在已经开始发生的最有可能的原因(尽管它在两年前已经运行良好)是您的数据库负载已经增加到某些连接无法成功的程度(可能是由于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()); }