KILL [CONNECTION | QUERY] processlist_id
每个与mysqld的连接都在一个单独的线程中运行。您可以使用该语句
终止线程。KILL
processlist_id
线程进程列表标识符可以从
表的
ID
列
、输出的
列和性能模式表的列中确定。当前线程的值由
函数返回。
INFORMATION_SCHEMA
PROCESSLIST
Id
SHOW
PROCESSLIST
PROCESSLIST_ID
threads
CONNECTION_ID()
KILL
允许可选
CONNECTION
或QUERY
修饰符:
KILL CONNECTION
与没有修饰符相同KILL
:它终止与给定关联的连接processlist_id
,在终止连接正在执行的任何语句之后。KILL QUERY
终止连接当前正在执行的语句,但保持连接本身不变。
查看哪些线程可以被杀死的能力取决于PROCESS
特权:
杀死线程和语句的能力取决于
CONNECTION_ADMIN
特权和弃用的SUPER
特权:
如果没有
CONNECTION_ADMIN
orSUPER
,您只能终止自己的线程和语句。使用
CONNECTION_ADMIN
orSUPER
,您可以终止所有线程和语句,但要影响以SYSTEM_USER
特权执行的线程或语句,您自己的会话必须另外具有SYSTEM_USER
特权。
您还可以使用mysqladmin processlist 和mysqladmin kill命令来检查和终止线程。
当您使用 时KILL
,会为线程设置特定于线程的终止标志。在大多数情况下,线程可能需要一些时间才能结束,因为 kill 标志仅在特定时间间隔检查:
在
SELECT
forORDER BY
和GROUP BY
循环操作期间,在读取一个行块后检查标志。如果设置了 kill 标志,语句将中止。ALTER TABLE
制作表副本的操作会定期检查从原始表中读取的每几行复制的 kill 标志。如果设置了 kill 标志,语句将中止并删除临时表。该
KILL
语句不等待确认就返回,但 kill 标志检查会在相当短的时间内中止操作。中止操作以执行任何必要的清理也需要一些时间。在
UPDATE
orDELETE
操作期间,kill 标志在每个块读取之后以及每个更新或删除的行之后被检查。如果设置了 kill 标志,语句将中止。如果您不使用事务,则不会回滚更改。GET_LOCK()
中止并返回NULL
。如果线程在表锁处理程序中(状态:)
Locked
,表锁将很快中止。如果线程正在等待写入调用中的可用磁盘空间,写入将中止并显示“磁盘已满” 错误消息。
EXPLAIN ANALYZE
中止并打印输出的第一行。这适用于 MySQL 8.0.20 及更高版本。
终止表上的REPAIR TABLE
or
OPTIMIZE TABLE
操作
MyISAM
会导致表损坏且无法使用。在您再次优化或修复它(不中断)之前,对此类表的任何读取或写入都会失败。