MySQL连接太多错误的原因有哪些

  介绍

这篇文章将为大家详细讲解有关MySQL连接太多错误的原因有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

,,今天中午,开发测试环境的MySQL服务报了一个连接的太多错误,从问题上看,可能是连接池被打满了,导致所有的连接都不可用了。

,,在这种情况下,最为直接的办法就是重新设置最大连接数,查文看my . cnf中所做件,里面关于连接数的参数有两个,分别是:

max_connections:最大连接数

max_user_connections:用户最大连接数

其中,第一个参数确定的是该实例的最大连接数,第二个参数确定的是单个用户的最大连接数。

,,一般的线上环境,为了保险起见,一般这两个参数不能设置为相等,可以将max_user_connections参数设置的稍微小一点,留有一定的余量,这样可以防止单个用户占用完所有的连接池。

,,看到上面这个问题,我的第一反应是,登陆上去,杀死掉一些连接,然而,当我想办法登陆的时候,发现已经没法登陆了,连DBA的管理账号dba_admin都已经无法建立连接了。查看错误日志:

2019 - 08 - 12 - t06:02:42.928412z  0,[警告],Too  many 连接   2019 - 08 - 12 t06:02:42.930181z  0,[警告],Too  many 连接   2019 - 08 - 12 t06:02:44.595199z  0,[警告],Too  many 连接   2019 - 08 - 12 t06:02:44.597160z  0,[警告],Too  many 连接   2019 - 08 - 12 t06:02:44.782042z  0,[警告],Too  many 连接

,,全部都是太多的连接,幸亏是开发环境,这样的话,我们可以使用停止数据库服务的方法来进行重启,然后重新增加最大连接数,当然,这个增加的量需要考量,一般情况下,需要跟wait_timeout的值结合起来设置,也就是等待超时时间,一般情况下,如果wait_timeout的值比较大,往往会造成连接数比较多的情况,而一个连接会消耗大约2米左右的内存,如果你设置的连接比较多,很可能出现内存耗尽的情况,而wait_timeout的值如果设置的比较小,连接会不停的创建和销毁,这样会浪费一定的IO资源。

,所以,如何得到一个平衡的值成为关键,在MySQL官方文档中有如下解释:

癕ySQL太多的连接错误的原因有哪些"

癕ySQL太多的连接错误的原因有哪些"

,,从官方文档的这个说明来看,几个GB的内存完全可以支持你把连接数设置在500 - 1000年之间,事实上,这个区间的值能够满足大部分的需求。

,,除此之外,官方文档上还说了一个特点,挺好的,就是

mysqld 实际上permits  max_connections  + 1客户端连接。保留额外的连接使用的账户,从而SUPER 特权。通过授予特权管理员和不正常的用户(他们应该不需要它),管理员也有,PROCESS 特权可以连接到服务器并use 显示PROCESSLIST 诊断问题即使贫穷的客户端连接的最大数量只

,,翻译过来就是事实上,允许的最大连接数是max_connections的值+ 1个连接,最后多的这个链接,是给超级权限的用户用的,这样在连接被耗尽的时候,可以使用超级权限登陆上去,进行显示processlist的方法来查看连接,并杀死掉一些不需要的连接,让服务重新可用。

,,,然而,实际应用中,我们经常为了操作方便,而给一些不必要的账号分配超权限,导致拥有超级权限的普通用户占用了多余的这一个连接,在今天这个问题中,这样的设置却无济于事,还是无法登陆,因为,毕竟一个连接太少了,如果有其他的账号已经占用了个这个超级的连接,那么这个实例还是无法访问。

,,这样的情况下,除了重启mysql实例,修文改my . cnf中所做件中的最大连接数,有没有不停止服务而进行处理方法呢,答案是有的。但是有一个前提,你的服务要是Percona-server的,如果你使用的官方版本的mysql,那这个办法是行不通的,据说MariaDB也可以使用这个办法,没有测试过,不太懂,有兴趣的可以测一测。

,,从Percona服务器5.5.29开始,您可以简单地添加extra_port到您,的my . cnf中所做并且下次重新启动时,端口将变为可用,并将侦听与常规连接相同的bind_address。如果未设置extra_port变量,则默认情况下不会有其他端口可用。您还可以定义extra_max_connections此端口将处理的连接数。此默认值为1 .

,,以上所述,是Percona-Server官网上的描述,可以通过另外2个参数来实现连接池占用完之后的登陆问题:

MySQL连接太多错误的原因有哪些