使用kill命令可以杀掉等待msyql线程。

终止一个线程

每个与 mysqld 的连接都在一个独立的线程里运行,您可以使用 SHOW PROCESSLIST 语句查看哪些线程正在运行,并使用 KILL thread_id 语句终止一个线程。

当进行一个 KILL 时,对线程设置一个特有的终止标记。在多数情况下,线程终止可能要花一些时间,这是因为终止标记只会在在特定的间隔被检查:

· 在 SELECT, ORDER BY 和 GROUP BY 循环中,在读取一组行后检查标记。如果设置了终止标记,则该语句被放弃。

· 在 ALTER TABLE 过程中,在每组行从原来的表中被读取前,检查终止标记。如果设置了终止标记,则语句被放弃,临时表被删除。

· 在 UPDATE 或 DELETE 运行期间,在每个组读取之后以及每个已更行或已删除的行之后,检查终止标记。如果终止标记被设置,则该语句被放弃。注意,如果您正在使用事务,则变更不会被 回滚。

· GET_LOCK() 会放弃和返回 NULL。

· INSERT DELAYED 线程会快速地刷新(插入)它在存储器中的所有的行,然后终止。

· 如果线程在表锁定管理程序中(状态:锁定),则表锁定被快速地放弃。

· 如果在写入调用中,线程正在等待空闲的磁盘空间,则写入被放弃,并伴随 “disk full” 错误消息。

· 警告:对 MyISAM 表终止一个 REPAIR TABLE 或 OPTIMIZE TABLE 操作会导致出现一个被损坏的没有用的表。对这样的表的任何读取或写入都会失败,直到您再次优化或修复它(不中断)。

使用命令:

1
mysql> show full PROCESSLIST;

可以查看到mysql当前正在运行的中的进程。

使用命令:

1
mysql> kill pid;//如:kill 211598;

可以杀死指定的进程。

如果进程非常多,这就非常低效,可以先生生成命令字符,再复制执行,即可:

1
2
3
4
5
6
7
8
mysql> select group_concat(concat('kill ',id) separator '; ') as cmd 
from information_schema.processlist where user='yb' and Host like '171.43.215.39%';

+----------------------------------+
| cmd                              |
+----------------------------------+
| kill 211598;kill 4;kill 211599 |
+----------------------------------+

然后执行:

1
> kill 211598;kill 4;kill 211599;

查看数据库状态

1
show status;

该命令会将 DB 所有的状态打印出来,如需其中特定的项可以加上 like ‘% 变量名称 %’,如:

1
show status like '%Connections%';

常用变量有:

Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。

Aborted_connects 尝试已经失败的 MySQL 服务器的连接的次数。

Connections 试图连接 MySQL 服务器的次数。

Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。

Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。

Delayed_writes 用 INSERT DELAYED 写入的行数。

Delayed_errors 用 INSERT DELAYED 写入的发生某些错误 (可能重复键值) 的行数。

Flush_commands 执行 FLUSH 命令的次数。

Handler_delete 请求从一张表中删除行的次数。

Handler_read_first 请求读入表中第一行的次数。

Handler_read_key 请求数字基于键读行。

Handler_read_next 请求读入基于一个键的一行的次数。

Handler_read_rnd 请求读入基于一个固定位置的一行的次数。

Handler_update 请求更新表中一行的次数。

Handler_write 请求向表中插入一行的次数。

Key_blocks_used 用于关键字缓存的块的数量。

Key_read_requests 请求从缓存读入一个键值的次数。

Key_reads 从磁盘物理读入一个键值的次数。

Key_write_requests 请求将一个关键字块写入缓存次数。

Key_writes 将一个键值块物理写入磁盘的次数。

Max_used_connections 同时使用的连接的最大数目。

Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。

Not_flushed_delayed_rows 在 INSERT DELAY 队列中等待写入的行的数量。

Open_tables 打开表的数量。

Open_files 打开文件的数量。

Open_streams 打开流的数量 (主要用于日志记载)

Opened_tables 已经打开的表的数量。

Questions 发往服务器的查询的数量。

Slow_queries 要花超过 long_query_time 时间的查询数量。

Threads_connected 当前打开的连接的数量。

Threads_running 不在睡眠的线程数量。

Uptime 服务器工作了多少秒。