MYSQL连接数过多问题修正

原文链接http://blog.csdn.net/cityeremite/article/details/4488253

当你试图连接到mysqld服务器时遇到“过多连接”错误,这表示所有可用的连接均已被其他客户端使用。

 

允许的连接数由max_connections系统变量控制。默认值为100。如果需要支持更多的连接,应使用该变量的较大值重启mysqld

mysqld实际上允许max_connections+1个客户端进行连接。额外的连接保留给具有SUPER权限的账户。(这个有点类型SQL Server 2005+的DAC专业管理员连接,不知道谁抄谁的,呵呵)通过为系统管理员而不是普通用户授予SUPER权限(普通用户不应具有该权限),系统管理员能够连接到服务器,并使用SHOW PROCESSLIST来诊断问题,即使已连接的无特权客户端数已达到最大值也同样。


MySQL能支持的最大连接数取决于给定平台上线程库的质量。Linux或Solaris应能支持500-1000个并发连接,具体情况取决于RAM容量,以及客户端正在作什么。MySQL AB提供的静态Linux库能支持高达4000个连接。



修改方法:

来自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7603fd4814968d4e414c42246171420b0eb746347198c8e3d245fb24f58e0f4336537747af1c4dccd179ded9d7764c9646a671df65663d00edcba5155b737e65bfeae69f0cb8325e7d8c5d2af4323c144710c97808f4d7716&p=9d6ac54ad6c542fb05aef82d02148f&newp=882a9543d59c12a05aa7db344b4cc6231610db2151d4d31620&user=baidu&fm=sc&query=mysql%C1%AC%BD%D3%CA%FD%B9%FD%B6%E0&qid=dac2d1e700012a09&p1=2

遇到mysql超出最大连接数,相信不少人第一反应就是查看mysql进程,看有没有慢查询,当然这个做法是完全正确的!
但是很多时候真正的问题不在这里。
今天有遇到同样的问题,一味查看mysql进程和慢查询日志,无果。
后来老大提点了一下,查看一下nginx日志,发现有一两个访问执行时候比较长,然后使用top命令查看了一下服务器负载,惊了,居然超高!
最后发现原来有一台web分流主机挂了,导致另外几台web主机负载增高,从而导致了php-fpm的执行效率降低。
那么这跟mysql有什么关系呢?原因很简单,因为php执行时间过长,mysql连接迟迟未释放,就会导致连接数过多出现。
最后总结:其实很多时候,一个问题的根本原因并不是那么直接的呈现出来,需要自己去跟踪。
老大有一句很实用的话:遇到问题先查日志(mysql、php、nginx等)


windows2003系统

增加默认MYSQL连接数的方法

方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100   修改为 max_connections=1000 服务里重起MYSQL即可

方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword

设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

显示当前运行的Query:mysql> show processlist

显示当前状态:mysql> show status

退出客户端:mysql> exit

查看当前最大连接数:mysqladmin -uusername -ppassword variables


linux系统

以centos 4.4 下面的MySQL 5.0.33 手工编译版本为例说明:

 代码如下复制代码

    vi /usr/local/MySQL/bin/MySQLd_safe

找到safe_MySQLd编辑它,找到MySQLd启动的那两行,在后面加上参数 :

 代码如下复制代码

    -O max_connections=1500

具体一点就是下面的位置:

用说明:

 代码如下复制代码

    then $NOHUP_NICENESS $ledir/$MySQLD 
    $defaults --basedir=$MY_BASEDIR_VERSION 
    --datadir=$DATADIR $USER_OPTION 
    --pid-file=$pid_file 
    --skip-external-locking 
    -O max_connections=1500
    >> $err_log 2>&1 else 
    eval "$NOHUP_NICENESS $ledir/$MySQLD 
    $defaults --basedir=$MY_BASEDIR_VERSION 
    --datadir=$DATADIR $USER_OPTION 
    --pid-file=$pid_file 
    --skip-external-locking $args 
    -O max_connections=1500 >>
    $err_log 2>&1" 

保存。

 代码如下复制代码

    # service MySQLd restart 
    # /usr/local/MySQL/bin/MySQLadmin -uroot -p variables 

输入root数据库账号的密码后可看到

max_connections 1500 即新改动已经生效。

还有一种方法,

修改原代码:

解开MySQL的原代码,进入里面的sql目录修改MySQLd.cc找到下面一行:

 代码如下复制代码

    {"max_connections", OPT_MAX_CONNECTIONS, 
    "The number of simultaneous clients allowed.", (gptr*) &max_connections, 
    (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1, 
    0}, 

把它改为:

 代码如下复制代码

    {"max_connections", OPT_MAX_CONNECTIONS, 
    "The number of simultaneous clients allowed.", (gptr*) &max_connections, 
    (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1, 
    0}, 

存盘退出,然后./configure ;make;make install可以获得同样的效果。以上的相关内容就是对修改MySQL最大连接数的3种方法的介绍,望你能有所收获。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值