MySql 问题:Too many connections

情况:

使用远程链接工具或者打开网站时,提示【too many connections

可能问题:

出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;

当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?

正常的mysql_connect 之后调用 mysql_close()关闭连接

但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_close();

所以在程序return 之前一定要判断是否close(),最稳妥的方法就是在写任何函数时都只有一个出口!-- 这是一个良好的习惯!

还有可以通过修改mysql配置文件来加大允许连接的数量!

从官方文档知道Linux上面编译安装的mysql默认的连接为100个

文档:http://dev.mysql.com/doc/refman/5.0/en/too-many-connections.html

解决:

修改链接数,并加入相应的链接超时时间:

max_connections=N 例如:

 [mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 160M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=1000
wait_timeout = 600 
interactive_timeout = 600

相关命令:

show processlist; # 显示当前进程
show variables like "max_connections"; #显示最大罗拉数
set GLOBAL max_connections=1000; # 设置全局最大链接数
show global variables like 'wait_timeout'; # 显示全局链接超时时间
set global wait_timeout=300; # 设置链接超时
show global variables like "interactive_timeout"; # 显示链接间隔超时时间
set global interactive_timeout=500; # 显示链接间隔的超时时间

关闭不需要链接进程,方法如下:

select concat('KILL ',id,';') from information_schema.processlist where user='root'; 先把要kill的连接id都查询出来

根据输出的命令结果,强制在终端界面,强制 kill 掉进程