`SHOW PROCESSLIST;` 返回列详解(含义 + 单位)
列名 | 含义 | 单位/格式 | 示例值 |
---|---|---|---|
Id | 连接的唯一标识符(线程ID) | 整数(无单位) | 12345 |
User | 执行该连接操作的 MySQL 用户名 | 字符串(无单位) | 'app_user' 、'root' |
Host | 客户端来源地址(格式:[IP或主机名]:[客户端端口] ) | 字符串: - TCP/IP 连接: IP:端口 (如 192.168.1.10:5532 )- Unix Socket 连接: localhost (无端口) | '192.168.1.100:51234' |
db | 当前连接默认使用的数据库 | 字符串(NULL 表示未选择数据库) | 'orders_db' 、NULL |
Command | 当前连接正在执行的命令类型 | 字符串(常见值): - Query :执行SQL- Sleep :空闲连接- Binlog Dump :主从复制- Connect :连接中 | 'Query' 、'Sleep' |
Time | 已执行/空闲时间: - 非 Sleep :当前命令运行时间- Sleep :空闲时间 | 秒(seconds) | 15 (执行中)、350 (空闲中) |
State | 连接当前状态(操作描述) | 字符串(常见值): - Sending data :处理/发送数据- Locked :等待锁- Writing to net :写入网络- NULL :空闲 | 'Sending data' 、NULL |
Info | 正在执行的 SQL 语句(前100字符左右) | 字符串(NULL 表示未执行语句) | 'SELECT * FROM orders...' |
KILL
命令详解
用于终止 MySQL 连接或查询。
语法:
KILL [CONNECTION | QUERY] processlist_id;
参数说明:
参数 | 作用 | 示例 |
---|---|---|
无参数 或 CONNECTION | 终止整个连接(断开客户端,回滚未提交事务) | KILL 123; |
QUERY | 仅终止当前查询(连接保持,可继续执行新命令) | KILL QUERY 456; |
processlist_id | 要终止的线程ID(来自 SHOW PROCESSLIST 的 Id 列) | 123 、456 |
使用场景:
- 终止异常查询:
KILL QUERY 789; -- 停止耗时查询,连接不中断
- 踢出危险连接:
KILL 101; -- 强制断开用户连接(权限变更后立即生效)
- 清理空闲连接:
KILL 202; -- 断开长时间空闲的连接(配合 `Time` 列判断)
权限要求:
SUPER
权限(MySQL 5.7)或CONNECTION_ADMIN
权限(MySQL 8.0+)才能终止其他用户的连接。
注意事项:
- 终止大事务可能导致回滚耗时较长(检查
State
是否为Rolling back
)。 - 系统关键线程(如复制线程
Binlog Dump
)被终止可能导致服务异常。 - 无法终止自己的当前连接(需另开会话操作)。
操作流程示例
- 查看活动连接:
SHOW FULL PROCESSLIST; -- 显示完整SQL(Info列)
- 定位问题连接:
- 高
Time
值 +Query
命令 → 长时间运行查询 - 高
Time
值 +Sleep
命令 → 空闲连接 - 危险SQL(如
DROP TABLE
) → 立即终止
- 高
- 执行终止操作:
KILL 303; -- 终止整个连接 KILL QUERY 404; -- 仅终止查询
📌 提示:生产环境操作前务必确认连接用途,避免误杀重要任务!