2011-02-18 122 views
11

所有的好日子。我有一个奇怪的错误。我创建了是这样的一个聊天:php,mysql - 数据库错误连接太多

  • 问题/答案被插入到数据库
  • 每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岁,工作正常)以及如何解决这个问题?感谢您的帮助。如果您需要任何代码示例,请询问。

+0

whats在放的 “秀变量,如 'max_connections的';”在mysql客户端 – Zimbabao 2011-02-18 10:19:42

回答

28

还有一堆不同的原因,“太多的连接”的错误。

检查出MySQL.com此FAQ页面: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

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

此外,你应该考虑改变这种行为,为每个用户保持一个稳定的连接可能是一个更好的方式来完成你的任务。

如果您尚未,看看这个很明显,但仍然有用的信息资源:http://php.net/manual/function.mysql-connect.php

11

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

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

您还可以查询状态表所示:

show status like '%onn%'; 

或者在一些差异。检查the manual什么变量有

(注意,“关系”是不是当前连接,请检查该链接:))

+0

检查。我看了一分钟 – zozo 2011-02-18 10:25:00

4

如果您在达到MAC连接限制 去/etc/my.cnf和下[mysqld]部分添加 max_connections = 500

和重启MySQL。

1

这可能是由于同时连接太多或同时有很多聊天造成的。也可能因太多会话而发生。

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

service mysqld restart 

service mysql restart 

/etc/init.d/mysqld restart