mysql数据库的连接数限制是保障服务稳定运行的重要配置,当并发连接数超过设定的阈值时,就会出现连接失败、请求阻塞等问题,需要及时排查并解决。

问题现象
当mysql连接数超出限制时,应用侧通常会收到类似Too many connections的错误提示,数据库无法正常响应新的查询请求,部分已建立的连接也可能出现响应变慢的情况。
排查步骤
1. 查看当前连接数配置与使用量
首先可以登录mysql客户端,执行以下命令查看当前的最大连接数配置和实际连接数:
-- 查看mysql设置的最大连接数 SHOW VARIABLES LIKE 'max_connections'; -- 查看当前已经建立的连接数 SHOW STATUS LIKE 'Threads_connected'; -- 查看所有连接的详细信息,包括来源主机、用户、执行状态等 SHOW PROCESSLIST;
通过SHOW VARIABLES LIKE 'max_connections'可以得到当前允许的最大连接数,默认通常是151。通过SHOW STATUS LIKE 'Threads_connected'可以知道当前已经使用的连接数,如果两者数值接近甚至超过,就说明连接数已经达到上限。
2. 定位异常连接来源
通过SHOW PROCESSLIST的结果,可以分析连接的来源和状态:
- 查看
Host字段,确认连接来自哪些应用服务器,是否存在某个服务器建立了大量连接 - 查看
Time字段,确认连接的空闲时间,长时间空闲的连接可能是未正常释放的连接 - 查看
State字段,确认连接是否处于执行状态,是否存在长时间未结束的慢查询占用连接
3. 检查应用侧连接配置
如果连接数超出限制是应用侧导致的,需要检查应用的数据库连接配置:
- 连接池的最大连接数配置是否过高,超过了mysql的最大连接数限制
- 是否存在连接使用后未正确关闭的情况,导致连接泄漏
- 应用的并发请求量是否突然升高,导致瞬时连接数超过阈值
解决方法
1. 临时调整最大连接数
如果是紧急场景,可以先临时调大mysql的最大连接数,执行以下命令:
-- 临时设置最大连接数为500,重启mysql后会恢复为配置文件的值 SET GLOBAL max_connections = 500;
如果需要永久生效,需要修改mysql的配置文件my.cnf(Linux系统)或my.ini(Windows系统),在[mysqld]段添加或修改以下配置:
[mysqld] max_connections = 500
修改完成后重启mysql服务即可生效。
2. 优化应用连接使用
调整连接数只是临时方案,更根本的是优化应用的连接使用方式:
- 合理配置连接池参数,根据业务的并发量设置合适的最大连接数,避免设置过高
- 确保数据库连接在使用完成后及时关闭,或者使用连接池的自动回收机制,避免连接泄漏
- 优化慢查询,减少单个连接的占用时间,让连接能够更快被释放复用
以下是Java应用使用Druid连接池的合理配置示例:
// Druid连接池配置示例 DruidDataSource dataSource = new DruidDataSource(); // 设置初始连接数 dataSource.setInitialSize(5); // 设置最小空闲连接数 dataSource.setMinIdle(5); // 设置最大活跃连接数,不超过mysql的max_connections配置 dataSource.setMaxActive(50); // 设置连接超时时间,单位毫秒 dataSource.setMaxWait(60000); // 设置连接空闲回收时间,单位毫秒 dataSource.setTimeBetweenEvictionRunsMillis(60000); // 设置最小空闲时间,超过该时间的空闲连接会被回收 dataSource.setMinEvictableIdleTimeMillis(300000);
3. 清理异常连接
如果存在大量长时间空闲或者异常的连接,可以手动清理这些连接释放资源,执行以下命令杀死指定连接:
-- 杀死指定连接,id为SHOW PROCESSLIST结果中的Id字段值 KILL 连接id;
注意杀死连接前需要确认该连接对应的业务已经结束,避免影响正常业务运行。
预防措施
为了避免后续再次出现连接数超出限制的问题,可以采取以下预防措施:
- 定期监控mysql的连接数使用情况,设置告警阈值,当连接数接近上限时及时预警
- 定期排查应用的连接使用情况,检查是否存在连接泄漏的问题
- 根据业务的增长情况,提前评估连接数需求,合理调整mysql和应用侧的连接配置
调整mysql的最大连接数时,需要同时考虑服务器的硬件资源,连接数过高会占用更多的内存和CPU资源,需要根据服务器的实际配置合理设置,避免影响数据库的整体性能。
mysql数据库连接数max_connections连接池连接泄漏修改时间:2026-06-27 20:09:28