今天朋友公司的线上MySQL数据库进不去了,报错
mysqladmin:connect to server at 'localhost' failed
error:'Too many connections'
很显然是数据库的连接达到了上限,max_connections的设置
解决方案有三个:
1、停止连接(停应用)或者减少连接
2、重启数据库,在文件中修改max_connections的参数,量力修改,小心连接数上来的时候占用内存过多,导致OOM,MySQL进程被系统杀死。
3、使用gdb来修改(只能使用root的用户去执行)
gdb -p $(cat /data/mysql/mysqld.pid) -ex "set max_connections=100" -batch
下面是一些连接相关的参数介绍:
1、interactive_timeout
和上面的参数同时设置,控制空闲连接的超时时间,长时间连接上来不作操作就踢出
这里经常出现的一个问题:
做一个操作的时候时快时慢:比如由于打开一个界面要输身份证号的时候我去看一眼输入会超时
原理:界面还在,但是连接已经没了,尝试着去连接这个会话连接不上就等不然就重新建立连接(这个时间就体现为连接卡住了)
如果表锁严重的时候可以调短一些
2、skip_name_resolve = 1
关闭反向解析
跳过反向解析,客户端连接应用服务器的时候,会拿着ip去解析成主机名,在实际系统里面没有建立dnc,这时候解析不了就挂在那里了,所以要配置好/etc/hosts文件里把所有ip地址对应主机名都写上,
防止上来解析的时候解析不了发生等待时间。
3、max_connections 数据库最大连接数
4、wait_timeout
5、lock_wait_timeout
表锁的超时,默认时间很大,所以看不出来表锁超时
6、max_connect_errors阻止过多尝试失败的客户端以防止暴力破解密码的情况
7、max_user_connections 用户最大连接数
经常会因为某个程序起的连接太多或者存在太多的等待线程,导致连接满了。
本文介绍了当遇到MySQL数据库连接达到上限时的几种解决方案,并详细解释了相关参数的作用,如max_connections、interactive_timeout等,帮助读者更好地管理和优化数据库连接。

3857

被折叠的 条评论
为什么被折叠?



