MYSQL “Too Many Connections“ 错误解决
1.查询当前连接数
show status like "Threads_connected";
2.查询数据库最大连接数
show variables like "max_connections"
3.查询所有活动连接
show processlist;
4.根据查询结果观察是否有长时间未被释放的连接
参数解释 :
字段 | 说明 |
id | 连接的唯一标识符(线程ID) |
User | 建立连接的用户名 |
host | 建立连接的主机名及端口 |
db | 当前连接使用的数据库名 |
Command | 线程正在执行的命令类型 |
Time | 线程处在当前状态的时间(秒) |
State | 线程的状态信息 |
info | 线程正在执行的SQL语句(可能为NULL) |
如出现大量超过一个小时的休眠状态的线程,请检查连接数据库代码是否有做连接超时处理及关闭数据库连接,允许的情况下可以配置检测连接是否有效。
5.查询出超过1小时的连接并停止
select concat('kill',id,';') from information_schema.proccesslist
where command='Sleep' and TIME > 3600;
复制查询出的命令执行。
6.增加最大连接数(大量连接在用)
临时方案(mysql重启后会恢复成以前连接数据)
SET GLOBAL max_connections = 500;
永久方案 修改 MySQL 配置文件(通常是 my.cnf
或 my.ini)
[mysqld]
max_connections = 500
重启mysql (具体看安装方式docker请用docker命令重启)
sudo systemctl restart mysql
7.调整超时时间
临时方案(mysql重启后会恢复成以前超时时间)
-- 将空闲超时时间设为300秒(5分钟)
SET GLOBAL wait_timeout=300SET GLOBAL interactive_timeout=300
永久方案 修改 MySQL 配置文件(通常是 my.cnf
或 my.ini)
[mysqld]
wait_timeout = 300
interactive_timeout = 300
max_connections = 500 # 根据实际情况调整
重启mysql (具体看安装方式docker请用docker命令重启)
sudo systemctl restart mysql