MySQL 當(dāng)前運行的線程和正在執(zhí)行的命令

查看MySQL最近一個sql 語句產(chǎn)生錯誤警告

mysql> show warnings;

顯示MySQL系統(tǒng)正在運行的所有的線程,可以看到客戶端正在執(zhí)行的命令

mysql> show processlist;

終止MySQL正在運行的線程

[root@iZ28shwghi0Z ~]# mysqladmin -uroot -p kill 1271073

批量 kill mysql 中運行時間長的sql

13.5.5.3. KILL語法

KILL [CONNECTION | QUERY] thread_id

每個與mysqld的連接都在一個獨立的線程里運行,您可以使用SHOW PROCESSLIST語句查看哪些線程正在運行,并使用KILL thread_id語句終止一個線程。

KILL允許自選的CONNECTION或QUERY修改符:

· KILL CONNECTION與不含修改符的KILL一樣:它會終止與給定的thread_id有關(guān)的連接。

· KILL QUERY會終止連接當(dāng)前正在執(zhí)行的語句,但是會保持連接的原狀。

如果您擁有PROCESS權(quán)限,則您可以查看所有線程。如果您擁有SUPER權(quán)限,您可以終止所有線程和語句。否則,您只能查看和終止您自己的線程和語句。

您也可以使用mysqladmin processlist和mysqladmin kill命令來檢查和終止線程。

注釋:您不能同時使用KILL和Embedded MySQL Server庫,因為內(nèi)植的服務(wù)器只運行主機應(yīng)用程序的線程。它不能創(chuàng)建任何自身的連接線程。

當(dāng)您進行一個KILL時,對線程設(shè)置一個特有的終止標(biāo)記。在多數(shù)情況下,線程終止可能要花一些時間,這是因為終止標(biāo)記只會在在特定的間隔被檢查:

· 在SELECT, ORDER BY和GROUP BY循環(huán)中,在讀取一組行后檢查標(biāo)記。如果設(shè)置了終止標(biāo)記,則該語句被放棄。

· 在ALTER TABLE過程中,在每組行從原來的表中被讀取前,檢查終止標(biāo)記。如果設(shè)置了終止標(biāo)記,則語句被放棄,臨時表被刪除。

· 在UPDATE或DELETE運行期間,在每個組讀取之后以及每個已更行或已刪除的行之后,檢查終止標(biāo)記。如果終止標(biāo)記被設(shè)置,則該語句被放棄。注意,如果您正在使用事務(wù),則變更不會被 回滾。

· GET_LOCK()會放棄和返回NULL。

· INSERT DELAYED線程會快速地刷新(插入)它在存儲器中的所有的行,然后終止。

· 如果線程在表鎖定管理程序中(狀態(tài):鎖定),則表鎖定被快速地放棄。

· 如果在寫入調(diào)用中,線程正在等待空閑的磁盤空間,則寫入被放棄,并伴隨"disk full"錯誤消息。

· 警告:對MyISAM表終止一個REPAIR TABLE或OPTIMIZE TABLE操作會導(dǎo)致出現(xiàn)一個被損壞的沒有用的表。對這樣的表的任何讀取或?qū)懭攵紩?,直到您再次?yōu)化或修復(fù)它(不中斷)。

1、通過information_schema.processlist表中的連接信息生成需要處理掉的MySQL連接的語句臨時文件,然后執(zhí)行臨時文件中生成的指令

mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root';

+------------------------+

| concat('KILL ',id,';')

+------------------------+

| KILL 3101;

| KILL 2946;

+------------------------+

rows in set (0.00 sec)

mysql>select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt';

Query OK, 2 rows affected (0.00 sec)

mysql>source /tmp/a.txt;

Query OK, 0 rows affected (0.00 sec)


2、殺掉當(dāng)前所有的MySQL連接

mysqladmin -uroot -p processlist|awk -F "|" '{print $2}'|xargs -n 1 mysqladmin -uroot -p kill

殺掉指定用戶運行的連接,這里為Mike

mysqladmin -uroot -p processlist|awk -F "|" '{if($3 == "Mike")print $2}'|xargs -n 1 mysqladmin -uroot -p kill

3、通過SHEL腳本實現(xiàn)

#殺掉鎖定的MySQL連接

for id in `mysqladmin processlist|grep -i locked|awk '{print $1}'`

do

mysqladmin kill ${id}

done

4、通過Maatkit工具集中提供的mk-kill命令進行

#殺掉超過60秒的sql

mk-kill -busy-time 60 -kill

#如果你想先不殺,先看看有哪些sql運行超過60秒

mk-kill -busy-time 60 -print

#如果你想殺掉,同時輸出殺掉了哪些進程

mk-kill -busy-time 60 -print –kill

mk-kill更多用法可參考:

http://www.maatkit.org/doc/mk-kill.html

http://www.sbear.cn/archives/426

Maatkit工具集的其它用法可參考:

http://code.google.com/p/maatkit/wiki/TableOfContents?tm=6

參考文檔:

http://www.google.com

http://www.orczhou.com/index.php/2010/10/kill-mysql-connectio-in-batch/

http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容