mysql 8.0+ 中 kill 权限已独立拆分,无需 super;必须配合 process 权限才能查看并终止他人线程,且实际生效依赖查询所处状态,推荐用 pt-kill 自动化管控。

MySQL 8.0+ 中 KILL 权限已拆分,无需 SUPER
MySQL 5.7 及更早版本里,想让普通用户 KILL 别人的查询,必须给 SUPER 权限——这等于把服务器控制权交出去。MySQL 8.0 起,KILL 已成为独立全局权限,和 PROCESS 并列,可单独授予,不附带任何高危能力(比如改 innodb_buffer_pool_size 或停复制)。这是最根本的改变,也是安全授权的前提。
只授 KILL 权限,必须搭配 PROCESS 才能定位目标
用户光有 KILL 权限不能“看到”别人在跑什么——KILL 12345 需要知道线程 ID。而默认情况下,SHOW PROCESSLIST 只返回自己的线程。所以实际操作中,这两项权限必须一起给:
-
GRANT PROCESS ON *.* TO 'devops'@'%';(否则连线程都看不见) -
GRANT KILL ON *.* TO 'devops'@'%';(否则看到也杀不了) - 执行
FLUSH PRIVILEGES;生效(ALTER USER 方式通常自动生效,但显式刷一次更稳妥)
注意:ON *.* 不能省略,这两个权限都是全局级,不支持库或表粒度。
避免误杀:KILL 不等于立即终止,状态决定是否响应
即使权限齐备、线程可见,KILL QUERY thread_id 也不是“按下就停”。MySQL 在查询执行的关键路径(如扫描行、排序、写 binlog 前)才会检查 thd->killed 标志并退出。以下状态常见但不响应 KILL:
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
-
Waiting for table metadata lock:锁等待中,KILL 会挂起直到锁释放才生效 -
Committing:事务提交阶段,KILL 可能延迟数秒甚至更久 -
Sleep:连接空闲,KILL CONNECTION 有效,但 KILL QUERY 无效(没在执行)
所以别指望 KILL 瞬间回收资源——它只是“发信号”,最终是否中断取决于引擎当前所处阶段。
生产环境建议:用 pt-kill 替代人工 KILL
人工查 + KILL 效率低、易漏、难标准化。推荐用 pt-kill 自动化,但必须配对关键参数:
- 加
--kill-query(只中断语句,保留连接)或--kill(断开整个连接) - 必须加
--ignore-user="monitor,backup,pt-heartbeat",否则可能干掉监控探针 - 加
--match-command="Query"和--match-state="executing|Sending data",避开Binlog Dump等后台线程 - MySQL 8.0+ 用户需有
CONNECTION_ADMIN(替代旧版SUPER),不是KILL权限
真正容易被忽略的是:KILL 权限本身不解决“该不该杀”的判断问题——它只是执行器。业务侧需要配合应用层 query timeout、max_rows 限制、以及慢日志阈值调优,才能形成闭环。










