如何关闭未关闭的mysql连接?

时间:2011-06-12 07:38:27

标签: php mysql

由于过多未关闭的mysql连接,我的客户托管服务提供商会阻止该网站。 该网站以前是由某人创建的,目前我正在维护它。

我在页面末尾添加了mysql_close功能。它正在关闭连接良好,但我仍然得到一些未公开的连接。我可能会留下一些......

我需要的是使用cron文件或某些东西关闭服务器中未关闭的mysql连接。

我该怎么做?

是否可以立即关闭所有连接?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:6)

您使用持久连接吗?如果没有,那么你真的不应该担心关闭你的连接。来自manual

  

通常不会使用mysql_close()   必要的,作为非持久的开放   链接自动关闭   脚本执行结束。看到   也释放资源。

你有太多的开放式连接,而不是太多的未闭合的连接,而不是(基本上是相同的)?例如,您网站上的用户数量太多了吗?

如果您确实有持久连接,请不要忘记:

  

mysql_close()不会关闭   创建的持久链接   mysql_pconnect()。

如评论中所述,在脚本结尾处不会释放mysql_connect()资源。来自另一个manual page

  

释放资源

     

感谢引用计数   系统介绍了PHP 4的Zend   引擎,没有更多的资源   检测到它的引用   自动,它被释放   垃圾收集器。出于这个原因,它   很少有必要释放记忆   手动

     

注意:持久数据库链接是一个   这个规则的例外。他们不是   被垃圾收集器摧毁。   请参阅持久连接部分   了解更多信息。

但是,mysql_close page

的评论可能会有一个旁注
  

至少使用PHP5.3.2和Windows   通过tcp连接,你应该永远   使用这个mysql_close()函数来   关闭并释放tcp套接字   由PHP使用。之后的垃圾收集   脚本执行没有关闭   tcp socket本身。插座   否则将保持“等待”状态   大约30秒,任何   额外的页面加载/连接   尝试只会增加总数   打开的tcp连接数。这个   等待时间似乎不是   可以通过PHP设置进行配置。

答案 1 :(得分:2)

mysql_connect将返回实际连接的标识符,您可以在mysql_close调用中使用该标识符。

$conn1 = mysql_connect(.....);
mysql_close($conn1);

如果页面本身打开多个连接,则需要使用标识符,因为否则mysql_close()只会关闭最后打开的连接。

但正如Nanne所说,PHP通常会在页面执行后自行清理连接,因此问题是如果不关闭它们,或者同时打开太多连接。通常,每个请求只需要一个连接,除非您同时打开并迭代多个结果集。

答案 2 :(得分:0)

如果您获得了一些未关闭的连接,很可能错过了某些页面,可能是通过包含等,或者调用“退出”的功能,因此您无法获得密码。

我不相信你可以使用cron从mysql启动其他连接。