Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573
  • 博文数量: 1
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-06 18:26
文章分类
文章存档

2012年(1)

我的朋友
最近访客

分类: Mysql/postgreSQL

2012-12-06 18:29:45

相信大家会经常遇到这么一刺头,mysql经常报连接数过多告警,本草根对此类故障更是家常便饭了,从而也有了一点点的心得,主要有两种方法可处理:

1mysql的开发大婶已经预见到了此类问题,从而留了一手,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再用的时候连接数都已经空空了。

 

阅读(287) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~