需授予PROCESS和SUPER(MySQL 5.7及以前)或CONNECTION_ADMIN(MySQL 8.0+)权限才能KILL其他连接;普通用户仅可终止自身会话,且SHOW PROCESSLIST需PROCESS权限才可见全部线程。

GRANT PROCESS, SUPER 权限才能 KILL 其他连接
普通用户执行 KILL 命令时,只能终止自己的会话;要杀掉别人(包括其他普通用户甚至部分系统线程),必须显式授予 PROCESS 和 SUPER 权限(MySQL 5.7 及以前)或 CONNECTION_ADMIN(MySQL 8.0+)。仅给 SELECT 或 ALL PRIVILEGES ON *.* 不够——ALL PRIVILEGES 默认不含管理类权限。
常见错误现象:ERROR 1095 (HY000): You are not owner of thread XXX 或 ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or CONNECTION_ADMIN privilege(s) for this operation
- MySQL 5.7 及更早:执行
GRANT PROCESS, SUPER ON *.* TO 'admin'@'192.168.4.%'; - MySQL 8.0+:用
GRANT CONNECTION_ADMIN ON *.* TO 'admin'@'192.168.4.%';(SUPER已废弃) - 必须搭配
FLUSH PRIVILEGES;才生效(除非使用CREATE USER ... WITH GRANT OPTION后立即GRANT)
SHOW PROCESSLIST 返回哪些连接可被 KILL
SHOW PROCESSLIST 列出当前所有连接,但普通用户默认只能看到自己的线程。只有拥有 PROCESS 权限的用户才能看到全部;而 SELECT 权限对 information_schema.PROCESSLIST 视图无效(该视图受权限硬限制)。
所以别指望用 SELECT * FROM information_schema.PROCESSLIST 绕过——它和 SHOW PROCESSLIST 行为一致,且在 MySQL 8.0 中已标记为只读兼容层。
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- 执行
SHOW PROCESSLIST;前确认已有PROCESS权限,否则结果为空或仅含自身 - 重点关注
ID(线程 ID)、User、Host、Command(如Sleep、Query)、Time(秒数)和State - 不要 KILL 系统线程(
User为event_scheduler、system user或空值)
KILL 的两种模式:QUERY vs CONNECTION
KILL 支持两个子命令:KILL QUERY <code>ID 中断当前 SQL 执行但保留连接;KILL <code>ID(等价于 KILL CONNECTION <code>ID)直接断开 TCP 连接并清理会话资源。
容易踩的坑是误用 KILL QUERY 处理卡死连接——如果线程卡在锁等待或网络 I/O,QUERY 模式可能无法退出,仍需 KILL CONNECTION。
- 先试
KILL QUERY <code>ID,观察几秒是否释放资源 - 若状态仍是
Locked或Sending data且无变化,立刻改用KILL CONNECTION <code>ID - MySQL 8.0+ 中,
KILL默认即KILL CONNECTION,但显式写全更清晰
用 SELECT + KILL 构造批量终止语句要小心
有人会写类似 SELECT CONCAT('KILL ', id, ';') FROM information_schema.PROCESSLIST WHERE TIME > 600 AND USER != 'root'; 生成批量 KILL 命令。这看似高效,但有三个硬伤:
- 生成的语句只是字符串,不会自动执行,必须复制粘贴后手动运行(或配合存储过程,但风险更高)
- 未排除系统线程或复制线程(
Command = 'Binlog Dump'或User = 'repl'),误杀会导致主从断裂 - 条件中
TIME > 600是“空闲秒数”,不是“执行耗时”——长时间Sleep的连接未必有害,而慢查询可能Time很小但实际卡住
真正安全的做法是结合业务上下文判断:比如只杀来自特定 IP 段、且 Command = 'Sleep' 超过 10 分钟的连接,同时排除 User IN ('repl', 'backup')。

















