设为首页 收藏本站
查看: 603|回复: 0

[经验分享] mysql 最大连接数的设置与优化

[复制链接]

尚未签到

发表于 2018-10-2 08:11:59 | 显示全部楼层 |阅读模式
  很多开发人员都会遇见”MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力;另一种原因就是MySQL配置文件中max_connections值过小
  首先,我们来查看mysql的最大连接数:
  1
  2
  3
  4
  5
  6
  7
  mysql> show variables like '%max_connections%';
  +-----------------+-------+
  | Variable_name  | Value |
  +-----------------+-------+
  | max_connections | 151  |
  +-----------------+-------+
  1 row in set (0.00 sec)
  其次,查看服务器响应的最大连接数:
  1
  2
  3
  4
  5
  6
  7
  mysql> show global status like 'Max_used_connections';
  +----------------------+-------+
  | Variable_name    | Value |
  +----------------------+-------+
  | Max_used_connections | 2   |
  +----------------------+-------+
  1 row in set (0.00 sec)
  可以看到服务器响应的最大连接数为2,远远低于mysql服务器允许的最大连接数值。
  对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。
  1
  Max_used_connections / max_connections * 100% = 2/151 *100% ≈ 1%
  我们可以看到占比远低于10%(因为这是本地测试服务器,结果值没有太大的参考意义,大家可以根据实际情况设置连接数的上限值)。
  再来看一下自己 linode VPS 现在(时间:2013-11-13 23:40:11)的结果值:
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  mysql> show variables like '%max_connections%';
  +-----------------+-------+
  | Variable_name  | Value |
  +-----------------+-------+
  | max_connections | 151  |
  +-----------------+-------+
  1 row in set (0.19 sec)
  mysql> show global status like 'Max_used_connections';
  +----------------------+-------+
  | Variable_name    | Value |
  +----------------------+-------+
  | Max_used_connections | 44  |
  +----------------------+-------+
  1 row in set (0.17 sec)
  这里的最大连接数占上限连接数的30%左右。
  上面我们知道怎么查看mysql服务器的最大连接数值,并且知道了如何判断该值是否合理,下面我们就来介绍一下如何设置这个最大连接数值。
  方法1:
  1
  2
  3
  4
  5
  6
  7
  8
  9
  mysql> set GLOBAL max_connections=256;
  Query OK, 0 rows affected (0.00 sec)
  mysql> show variables like '%max_connections%';
  +-----------------+-------+
  | Variable_name  | Value |
  +-----------------+-------+
  | max_connections | 256  |
  +-----------------+-------+
  1 row in set (0.00 sec)
  方法2:
  修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
  max_connections=128
  重启mysql服务即可。
  问题
  在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too many connections”-mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认是100, 最大可以达到16384。
  常用的有两种方式修改最大连接数。
  解决方式一:通过命令
  可以通过 set GLOBAL max_connections=100; 命令将最大连接数设置为100,此方法是即时生效的,不需要重启mysql服务。如下图所示:

  需注意的是,要通过root权限的mysql帐号才能操作,否则会报“1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation”的错误。
  同时,从上图也可以看出,设置max_connections最小值为1。
  设置完成后,我再通过另一个终端连接时,就报出了如下的错误提示:1040-Too many connections。

  解决方式二:修改my.cnf
  打开mysql的配置文件vim /etc/my.cnf,加入max_connections=100一行(如果有,直接修改值即可),然后重启服务:/etc/init.d/mysqld restart,此时生效。

  区别:
  1.通过修改配置文件,需要重启服务;而用命令修改,即时生效。
  2.采用修改配置文件的方式,更稳定可靠。因为如果配置文件中有max_connections=100,再去用命令修改的话,一旦重启mysql服务后,会重新以配置文件中指定的连接数为准。
  总结:
  在修改最大连接数的时候会有这样一个疑问—这个值是不是越大越好,或者设置为多大才合适?这个参数的大小要综合很多因素来考虑,比如使用的平台所支持的线程库数量(windows只能支持到2048)、服务器的配置(特别是内存大小)、每个连接占用资源(内存和负载)的多少、系统需要的响应时间等。可以在global或session范围内修改这个参数。连接数的增加会带来很多连锁反应,需要在实际中避免由此引发的负面影响。希望本文大家使用mysql有所帮助。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-607345-1-1.html 上篇帖子: MySQl5.6主主复制配置 下篇帖子: MySql语法大全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表