標籤:out images 修改 執行 許可權 已耗用時間 roo root one
以下內容來自mysql手冊:
13.5.5.3. KILL文法
KILL [CONNECTION | QUERY] thread_id
每個與mysqld的串連都在一個獨立的線程裡運行,您可以使用SHOW PROCESSLIST語句查看哪些線程正在運行,並使用KILL thread_id語句終止一個線程。
KILL允許自選的CONNECTION或QUERY修改符:
· KILL CONNECTION與不含修改符的KILL一樣:它會終止與給定的thread_id有關的串連。
· KILL QUERY會終止串連當前正在執行的語句,但是會保持串連的原狀。
如果您擁有PROCESS許可權,則您可以查看所有線程。如果您擁有SUPER許可權,您可以終止所有線程和語句。否則,您只能查看和終止您自己的線程和語句。
您也可以使用mysqladmin processlist和mysqladmin kill命令來檢查和終止線程。
注釋:您不能同時使用KILL和Embedded MySQL Server庫,因為內植的伺服器只運行主應用程式的線程。它不能建立任何自身的連接線程。
當您進行一個KILL時,對線程設定一個特有的終止標記。在多數情況下,線程終止可能要花一些時間,這是因為終止標記只會在在特定的間隔被檢查:
· 在SELECT, ORDER BY和GROUP BY迴圈中,在讀取一組行後檢查標記。如果設定了終止標記,則該語句被放棄。
· 在ALTER TABLE過程中,在每組行從原來的表中被讀取前,檢查終止標記。如果設定了終止標記,則語句被放棄,暫存資料表被刪除。
· 在UPDATE或DELETE運行期間,在每個組讀取之後以及每個已更行或已刪除的行之後,檢查終止標記。如果終止標記被設定,則該語句被放棄。注意,如果您正在使用事務,則變更不會被 復原。
· GET_LOCK()會放棄和返回NULL。
· INSERT DELAYED線程會快速地重新整理(插入)它在儲存空間中的所有的行,然後終止。
· 如果線程在表鎖定管理程式中(狀態:鎖定),則表鎖定被快速地放棄。
· 如果在寫入調用中,線程正在等待閒置磁碟空間,則寫入被放棄,並伴隨"disk full"錯誤訊息。
· 警告:對MyISAM表終止一個REPAIR TABLE或OPTIMIZE TABLE操作會導致出現一個被損壞的沒有用的表。對這樣的表的任何讀取或寫入都會失敗,直到您再次最佳化或修複它(不中斷)。
1、通過information_schema.processlist表中的串連資訊產生需要處理掉的MySQL串連的語句臨時檔案,然後執行臨時檔案中產生的指令
mysql> select concat(‘KILL ‘,id,‘;‘) from information_schema.processlist where user=‘root‘;+------------------------+| concat(‘KILL ‘,id,‘;‘) +------------------------+| KILL 3101; | KILL 2946; +------------------------+2 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、
殺掉當前所有的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指令碼實現
#殺掉鎖定的MySQL串連for id in `mysqladmin processlist|grep -i locked|awk ‘{print $1}‘`do mysqladmin kill ${id}done
4、通過Maatkit工具集中提供的mk-kill命令進行
#殺掉超過60秒的sqlmk-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/
轉:http://www.cnblogs.com/siqi/p/3984499.html#commentform
批量 kill mysql 中已耗用時間長的sql