首先登录数据库

查看连接数

show processlist;

可以发现有很多连接处于 Sleep 状态 , 这些连接其实暂时是没有用的 , 可以 kill 掉

查看最大连接数

show variables like "max_connections";

安装 MySQL 8.0 默认值是 151 个, 可以适当进行调整

设置最大连接数

set GLOBAL max_connections=1000;

修改最大连接数 , 但是这不是一劳永逸的方法 , 应该要让 MySQL 自动杀死 Sleep 的连接

查看非交互连接超时

show global variables like 'wait_timeout';

这个数值指的是 MySQL 在关闭一个非交互的连接之前要等待的描述 , 默认是 28800 s .

修改非交互连接超时

set global wait_timeout=300;

笔者尝试将其改为 300 s ,在生产上就会遇到服务突然连接不到数据库的情况 , 报错 Communications link failure... 因此又改回了默认值 .

修改交互连接超时

set global interactive_timeout=500;

修改这个数值 , 表示 MySQL 在关闭一个链接之前要等待的秒数 , 至此可以让 MySQL 自动关闭哪些没用的连接 , 但是要注意的是 , 正在使用的连接到了时间也会被关闭 , 因此数值要合适 .

批量Kill连接

首先查出来所用 Sleep 连接 id

select concat('KILL ',id,';') from information_schema.processlist where user='root';

copy 出来后替换后复制回终端运行 .再进行查看

参考链接

简书