我正在构建一个对我的数据库使用大量请求的Web应用程序。直到半小时前,当请求没有返回时,每件事情都工作得很顺利...我直接检查了PHP文件并显示以下内容:
<br />
<b>Warning</b>: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Too many connections in <b>/home/sanity/public_html/dev/forest/js/database.php</b> on line <b>7</b><br />
Unable to connect to MySQL
所以我想让我们检查一下phpMyAdmin,但是除了一个大红框说:
之外,它没有向我展示任何东西。SQL query: Edit Edit
SET CHARACTER SET 'utf8';
MySQL said: Documentation
#1045 - Access denied for user 'root'@'localhost' (using password: NO)
在最后一次工作之间,现在我还没有改变任何配置或代码 ..我该如何开始解决这个问题?
这可能是因为我的PHP文件在使用后没有关闭连接吗?如果是这样,我应该在每次查询后关闭连接?我想当用户离开网站时,连接会自动关闭。
编辑:请求现在正在发送,phpMyAdmin已备份,但如何为更重的流量准备此网站?
答案 0 :(得分:2)
虽然不推荐使用mysql_ *函数(例如使用像PDO
这样的现代驱动程序),但您应该查看mysql_close($con)
函数。
这是doc。
修改强>
如果您没有使用mysql_pconnect
功能,则应在脚本执行结束时关闭连接。
显然,出现此类错误的一个原因是共享主机。如果您使用的是共享主机,一般来说,托管所允许的与服务器的最大连接数并不是最大的。
如果您可以更改max_connections
系统变量,请尝试将其更改为更大的数字:
max_connections = 200
答案 1 :(得分:2)
当我开始工作时,我的首要任务之一就是继续研究其中一位导演开始编码的内容。在他的代码中,我看到了这种怪异:
function getTicket($id) {
mysql_connect("localhost","username","password");
mysql_select_db("database");
$sql = mysql_query("select * from tickets where id = ".intval($id));
return mysql_fetch_assoc($sql);
}
换句话说,他每次想要从数据库中获取内容时都会创建一个全新的数据库连接,并且永远不会关闭它们中的任何一个(而是让它们在脚本末尾自动关闭)
这对于基本测试来说很好,但是一旦我开始编写更高级的东西(在我发现这段代码之前),事情主要与你的“太多连接”错误搞砸了。
解决方案很简单:重新启动服务器以清除所有挂起的连接,并修复代码,使其仅在每个脚本执行时连接一次。
这是你应该做的。在你的脚本中只应该对mysql_connect
(或者实际上任何数据库库的连接函数)进行一次调用(我并不是指多次调用的函数!)< / p>
您还应检查数据库的配置,以防万一有人意外地将最大连接设置得太低,但如果您正确管理连接,通常这不应该是一个问题。