mysql连接数监控是数据库运维中的基础工作,当连接数接近或超过最大限制时,新的客户端请求会被拒绝,影响业务正常访问。及时掌握连接数占用情况可以快速排查连接泄漏、高并发访问等问题。

查看mysql当前实时连接数
最直接的方式是使用SHOW STATUS指令查询连接相关的状态变量,以下是常用的查询语句:
-- 查看当前已经建立的连接数 SHOW STATUS LIKE 'Threads_connected'; -- 查看从mysql启动以来累计的连接数 SHOW STATUS LIKE 'Connections'; -- 查看当前正在运行的连接数(处于活跃状态的连接) SHOW STATUS LIKE 'Threads_running';
其中Threads_connected就是当前实时的总连接数,这个值会随客户端的连接和断开动态变化。
查看每个连接的详细信息
如果需要查看每个连接的具体信息,比如连接的用户、来源IP、执行的SQL、连接时长等,可以使用SHOW PROCESSLIST指令:
-- 查看所有连接的详细信息,root用户可以看到所有连接,普通用户只能看到自己的连接 SHOW PROCESSLIST; -- 查看完整的信息,避免SQL语句被截断 SHOW FULL PROCESSLIST;
返回的结果包含以下关键字段:
- Id:连接的唯一标识,可用于后续杀死异常连接
- User:建立连接的用户名
- Host:客户端的IP和端口
- db:当前连接使用的数据库
- Command:连接当前执行的命令类型,比如Sleep表示空闲连接,Query表示正在执行查询
- Time:连接处于当前状态的时间,单位是秒
- State:连接的当前状态
- Info:连接正在执行的SQL语句,Full选项下会显示完整语句
通过information_schema库查询连接信息
除了上述指令,还可以直接查询information_schema库的PROCESSLIST表,这种方式可以更灵活地筛选连接信息:
-- 查询所有连接的基本信息 SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM information_schema.PROCESSLIST; -- 查询空闲时间超过60秒的连接 SELECT ID, USER, HOST, TIME FROM information_schema.PROCESSLIST WHERE COMMAND = 'Sleep' AND TIME > 60; -- 统计每个用户的连接数 SELECT USER, COUNT(*) AS conn_count FROM information_schema.PROCESSLIST GROUP BY USER;
查看mysql最大连接数配置
要判断当前连接数是否过高,还需要知道mysql配置的最大连接数,查询方式如下:
-- 查看当前配置的最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 查看当前连接数占最大连接数的比例,计算方式:当前连接数/最大连接数*100%
SELECT
(SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Threads_connected') AS current_conn,
(SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'max_connections') AS max_conn,
CONCAT(ROUND((SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Threads_connected') / (SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'max_connections') * 100, 2), '%') AS conn_rate;
如果当前连接数占最大连接数的比例超过80%,就需要考虑优化连接使用或者调大最大连接数配置了。
调整最大连接数的方法
如果业务需要更多的连接数,可以临时或者永久调整max_connections参数:
-- 临时调整,重启mysql后失效,设置最大连接数为500 SET GLOBAL max_connections = 500; -- 永久调整需要修改mysql配置文件my.cnf,在[mysqld]段添加以下内容,然后重启mysql -- max_connections = 500
处理异常连接的方法
如果发现有异常的连接,比如长时间空闲的连接、执行异常SQL的连接,可以使用KILL指令终止对应的连接:
-- 终止ID为123的连接,ID来自SHOW PROCESSLIST或者information_schema.PROCESSLIST的查询结果 KILL 123; -- 如果连接正在执行查询,可以使用KILL QUERY终止正在执行的语句,保留连接 KILL QUERY 123;
注意:终止连接操作需要谨慎执行,避免误杀正在执行重要业务的连接,导致业务数据异常。
mysql连接数监控show_processlistinformation_schemamax_connections修改时间:2026-07-20 20:42:27