mysql中kill掉全部鎖表的進程

不少時候因爲異常或程序錯誤會致使個別進程佔用大量系統資源,須要結束這些進程,一般能夠使用如下命令Kill進程:
mysql

mysql中kill掉全部鎖表的進程
2009-05-12 14:03

轉載請保留以下做者信息
sql

做者 : jesse shell

博客 : http://hi.baidu.com/leechl 數據庫

3點鐘剛睡下, 4點多, 同事打電話告訴我用戶數據庫掛掉了. 我起牀看一下進程列表. bash

mysql > show   processlist ;

出來嘩啦啦好幾屏幕的, 沒有一千也有幾百條, 查詢語句把表鎖住了, 趕忙找出第一個Locked的thread_id, 在mysql的shell裏面執行. spa

mysql > kill   thread_id ;

kill掉第一個鎖表的進程, 依然沒有改善. 既然不改善, 我們就想辦法將全部鎖表的進程kill掉吧, 簡單的腳本以下. 進程

#!/bin/bash
mysql  - u   root  - e   " show processlist "  |  grep  - i   " Locked "  >>  locked_log . txt

for   line   in   ` cat locked_log.txt | awk '{print  $1 }' `
do  
   
echo   " kill  $line ; "  >>  kill_thread_id . sql
done

如今kill_thread_id.sql的內容像這個樣子 ssl

kill   66402982 ;
kill   66402983 ;
kill   66402986 ;
kill   66402991 ;
.....

好了, 咱們在mysql的shell中執行, 就能夠把全部鎖表的進程殺死了. 資源

mysql > source   kill_thread_id . sql

固然了, 也能夠一行搞定
for id in `mysqladmin processlist | grep -i locked | awk '{print $1}'`
do
   
mysqladmin kill ${id}
done
相關文章
相關標籤/搜索