2023-04-26
温故知新
00
请注意,本文编写于 574 天前,最后修改于 319 天前,其中某些信息可能已经过时。

目录

简介
相关操作
拓展
最大连接数太小
连接没有及时关闭

简介

使用Mysql时,如果使用/配置不当,可能会造成连接过多,超过Mysql限制的最大连接数,此时新的连接就无法建立了。

本文记录查看MySQL连接,并关闭不必要连接的方法。

相关操作

  • 查看连接
sql
show processlist;

输出信息一般如下:

IdUserHostdbCommandTimeStateInfo
5event_schedulerlocalhostDaemon1144Waiting fornext activation
294682root192.168.7.180:53984factorySleep125
294684root192.168.7.180:54192factorySleep5
294685root192.168.7.180:54210factorySleep125
353757root192.168.7.180:38702iominterfaceSleep5
364388root192.168.7.180:34048iominterfaceSleep5
364857root192.168.10.148:57409face_recognitionSleep6805
364858root192.168.10.148:57426face_recognitionSleep6505
364859root192.168.10.148:57427face_recognitionSleep6505
364860root192.168.7.180:43082iominterfaceSleep5
364861root192.168.10.142:53161face_recognitionSleep3447
364862root192.168.10.142:53221face_recognitionSleep3447
364918root192.168.7.180:48004iominterfaceSleep5
364933root192.168.10.148:60690face_recognitionSleep6505
365051root192.168.10.136:60726face_recognitionSleep2461
365052root192.168.10.136:60727face_recognitionSleep2461
365803root192.168.10.148:58923face_recognitionSleep1741
365804root192.168.10.148:58924face_recognitionSleep1741
365805root192.168.10.148:58925face_recognitionSleep1751
365806root192.168.10.148:58980face_recognitionSleep943
365807root192.168.10.148:59003face_recognitionSleep943

其中id列在主动关闭连接时需要使用;Host列是客户端的地址;db列为连接到的数据库;State为当前连接状态。

又是由于某些原因,可能导致出现大量的Sleep连接,从而使连接数超过最大连接,此时新连接就服务建立了,会报错Too many Connection,此时需要检查哪些是不必的sleep连接,手动将其关闭即可。

比如上面表中,如果认为来自192.168.10.148连接face_recognition库的连接是不必要的,就可以找到其对应的id,使用以下sql关闭连接即可:

  • 关闭连接
sql
-- kill id; kill 364933;

其中364933就是通过上一步查询到的id列的值。

拓展

出现连接数过多,超出最大连接数时,通过上面的方法可以关闭不必要的连接,但这只是临时解决问题,要想尽量避免连接数过多的问题,应该分析什么原因并解决,一般有两种原因:

  1. 最大连接数太小
  2. 连接没有及时关闭

最大连接数太小

Mysql数据库可以设置最大连接数,当连接数超出该设置值时,才会出现Too many Connection报错。如果该数据库实际使用的连接就是很多,超过了设置的最大连接数,此时应该修改MySQL的配置,增大最大连接数。

  • 查看最大连接数设置
sql
show variables like '%max_connections%';
  • 命令修改最大连接数

此种方式算是临时性修改,当MySQL重启后,该配置将失效,需要运行命令重新设置。

sql
set GLOBAL max_connections = 200;
  • 配置修改最大连接数

此种方式需要修改MySQL配置文件后重启MySQL服务才能生效。

my.cnf配置文件中增加以下配置:

[mysqld] max_connections = 1000

连接没有及时关闭

连接没有及时关闭,一般是由于MySQL设置的超时时间过长导致,默认的超时时间是28800,即8小时。此时建议将超时时间设置的小一些。

  • 查看超时时间相关配置
sql
SHOW VARIABLES LIKE "%timeout%";
  • 修改超时时间
sql
set GLOBAL wait_timeout = 600;

与上面修改最大连接数同理,也可以通过配置文件设置:

[mysqld] wait_timeout = 600

PS:超时类型有很多,根据情况选择使用即可。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!