与DB的连接太多,导致某些查询无法执行

时间:2010-02-09 03:07:53

标签: php mysql connection-string

我遇到一个问题,我网站上的用户最近开始收到错误消息:

无法通过socket'/var/lib/mysql/mysql.sock'连接到本地MySQL服务器(2)

我知道代码中的连接字符串是正确的,因为用户可以查询从中检索信息的数据库视图页面并将用户生成的信息提交给数据库。这让我相信错误是由于一次打开太多连接造成的。代码是php,每个php页面都有自己的mysql_open和mysql_close命令,所以我想知道一次打开的连接是否太多。我不知道是否可能,因为在任何一天只有20人登录该网站。我的问题是 - 如何判断在任何给定时间有多少连接是打开的,我可以以某种方式跟踪随机日开放的连接数吗?我对此比较陌生,我正在使用phpmyadmin来管理数据库。如果实际上连接太多,那么处理它的最佳方法是什么?

还有其他可能的原因我还没有考虑过吗?基本上,没有可预测的方法来确定是否将提交用户的数据或是否将返回错误,这至少可以说是从用户的角度来看是令人不安的。

This question最接近我的问题,但没有提供解决我的具体问题的解决方案,因此我发布了一个新问题。

提前感谢您的想法。

4 个答案:

答案 0 :(得分:1)

使用“连接池”创建连接池,这可能有助于管理您允许的连接数。此外,MYSQL中还有一个命令可以告诉您有多少连接。

这是一个可能有效的命令 -     show processlist;

然后你会看到挥之不去的过程。每个都有一个ID,您可以通过键入以下命令在MySQL监视器中按进程ID终止它们:

kill 2309344;

希望这有点帮助。

如果您认为已关闭连接,但有来自程序员的页面,那么这是一个问题......程序员只是忘了关闭他/她的连接!

答案 1 :(得分:1)

您应该确保实际关闭连接或更好地确保您没有在单个请求上打开太多连接。如果页面中包含include标记,并且包含和包含的页面都将执行mysql_open(),则您将同时具有两个打开的连接。您应该尝试避免这种情况并重用mysql_open()提供的连接。确保实际关闭它: - )。

答案 2 :(得分:0)

来自mysql客户端的

show status;将显示统计信息。特别是你想看看max_used_connections我认为。

答案 3 :(得分:0)

切向评论:如果向Web用户显示mysql错误,则可以很容易地利用您可能遇到的任何安全漏洞。