php,mysql - 与数据库错误的连接太多

时间:2011-02-18 10:16:06

标签: php mysql zend-framework pdo database-connection

大家好日子。我有一个奇怪的错误。我创建了一个像这样的聊天:

  • 问题/答案被插入到数据库
  • 每隔2秒将ajax请求发送到一个获取新问题/答案的php脚本

直到今天我收到此错误时才工作正常:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1040] Too many connections' in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php:129 
Stack trace: #0 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(129): PDO->__construct('mysql:host=loca...', '', '', Array) 
s#1 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect() 
s#2 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(448): Zend_Db_Adapter_Pdo_Mysql->_connect() 
s#3 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('select profile_...', Array) 
s#4 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(782): Zend_Db_Adapter_Pdo_Abstract->query('select profile_...', Array) 
s#5 /var/www/html/dbdev/include/Profile.php(43): Zend_Db_Adapter_Abstract->fetchPairs('select profile_...') 
s#6 /var/www/html/dbdev/public_html/index.php(29): Profile->load() 
s#7 {main} Next exception 'Zend_Db_Adapter_Exception' with in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php on line 144

问题是我们不是那么多......(8)并且我认为数据库不能同时支持超过8到16个连接(在规范上写的聊天必须支持50-100个用户所以8是......小)。

所以...可以告诉我为什么会这样(昨天我们15岁并且工作正常)以及如何解决它?谢谢您的帮助。如果您需要任何代码示例,请询问。

6 个答案:

答案 0 :(得分:34)

“Too Many Connections”错误有很多不同的原因。

在MySQL.com上查看此常见问题解答页面:http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

检查my.cnf文件中的“max_connections”。如果不存在,请尝试:

[mysqld]
set-variable=max_connections=250

但是默认值是151,所以你应该没问题。

如果您在共享主机上,则可能是其他用户占用了太多连接。

需要注意的其他问题是使用持久连接和耗尽磁盘空间。

答案 1 :(得分:15)

错误SQLSTATE[HY000] [1040] Too many connections是一个SQL错误,与sql server有关。可能有其他应用程序连接到服务器。服务器具有最大可用连接数。

如果你有phpmyadmin,你可以使用'变量'选项卡来检查设置是什么。

您还可以像这样查询状态表:

show status like '%onn%';

或者有些不一致。检查the manual有哪些变量

(请注意,'连接'不是当前连接,请检查该链接:))

答案 2 :(得分:5)

如果达到mac连接限制 转到/etc/my.cnf并在[mysqld]部分下添加 max_connections = 500

并重启MySQL。

答案 3 :(得分:2)

请检查您是否为每个请求打开了一个新连接(mysql_connect(...))。如果这样做,请确保之后关闭连接(使用mysql_close($ link))。

此外,您应该考虑更改此行为,因为为每个用户保持稳定的连接可能是完成任务的更好方法。

如果你还没有,请看一下这个显而易见但仍然有用的信息资源:http://php.net/manual/function.mysql-connect.php

答案 4 :(得分:2)

这可能是由于同时连接太多或同时进行多次聊天而导致的。也可能因为会话太多而发生。

解决此问题的最佳方法是重启MySQL。

keys.equals(finishedLine3)

finishedLine3

service mysqld restart

答案 5 :(得分:1)

如果需要在不重新启动MySQL的情况下增加MySQL连接,请执行以下操作,如果您不知道配置文件,请在下面使用mysqlworkbench或phpmyadmin或命令提示符在以下查询中运行。

Working Draft

这些设置将在MySQL重新启动时更改。


要进行永久更改,请在my.cnf中添加以下行,然后重新启动MySQL。

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL max_connections = 250;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 250   |
+-----------------+-------+
1 row in set (0.00 sec)