2010-02-09 87 views
2

我哪里有我的网站上的用户最近开始收到错误消息的问题:太多连接到DB防止某些查询从执行

无法通过套接字连接到本地MySQL服务器“的/ var/(2)

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

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

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

在此先感谢您的意见。

+1

你需要检查你的MySQL日志并找出真正发生的事情。 – 2010-02-09 03:08:59

回答

1

您应确保实际关闭连接或更好地确保您没有在单个请求中打开太多连接。如果你在一个页面中有一个包含标签,并且包含页面和包含页面都会执行一个mysql_open(),你将在一个点上同时有两个打开的连接。您应该尽量避免这种情况,并重新使用mysql_open()提供的连接。请务必关闭它:-)。

+0

相信与否,就像这样简单,就是这个问题。非常感谢。 – Jen 2010-02-17 23:21:14

1

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

这是一个可能工作的命令 - show processlist;

然后你会看到挥之不去的过程。每个人都有一个ID,并可以通过键入通过在MySQL监控进程ID右杀了他们:

kill 2309344; 

希望这有助于一点。

这是一个问题,当你认为你已经关闭了一个连接,但有一些程序员的页面....以及程序员忘记关闭他/她的连接!

+0

我认为连接池是为了节省创建和打开数据库连接时的要求,因为它们是事先创建(并因此汇集)的......这个想法并不是要限制连接,而是要使交易更有效率,而不必每次都打开连接。 – Russell 2010-02-09 03:18:15

0

show status;从一个mysql客户端将显示您的统计信息。特别是你想看看我认为的max_used_connections

0

切线评论:如果您向网络用户显示mysql错误,您可以很容易地利用您可能具有的任何安全漏洞。