分类: Mysql/postgreSQL
2012-12-06 18:29:45
相信大家会经常遇到这么一刺头,mysql经常报连接数过多告警,本草根对此类故障更是家常便饭了,从而也有了一点点的心得,主要有两种方法可处理:
1)mysql的开发大婶已经预见到了此类问题,从而留了一手,mysql系统本身可支持拥有super帐号的用户在连接数满的情况下仍可进入调整连接数:
set global max_connections=n;
2)但是我们知道,由于SUPER权限有很多特权,因此不会把这个权限给予应用的账号。 但是,当应用异常或者数据库异常,达到最大连接数的时候,用管理账号登录,有时候仍然会报Too many connections。此时,如果应用不能及时处理,数据库这边就很难办了。
这时如果有从机不妨这样试下:
主机执行:
For i in `seq 1 10000` ;do mysql -hip -port -uuser -ppassword;done
原理:
在主机执行的时候,在从机执行slave stop;这样就释放一个线程,而主机一直连接中,就有很大几率可以连接上了,如果没有从机的话,可以的话也可通过应用程序释放一个哦。
再说点话外话
为什么super账号没有得到额外的那个连接。看mysql源码中,MySQL的逻辑是,建立线程在前,验证账号在后,建立线程的时候,还不知道是具有super权限的帐号,MySQL是以一个新的(或者是线程池中的)线程来提供除监听以外的所有服务,所以第max_connections+1个连接很可能被比super帐号动作还快发出请求的普通帐号给占用了,等到super再用的时候连接数都已经空空了。