轉載請保留如下作者信息
作者 : jesse
博客 : http://hi.baidu.com/leechl
3點鍾剛睡下, 4點多, 同事打電話告訴我用戶數據庫掛掉了. 我起床看一下進程列表.
mysql>show processlist;
出來嘩啦啦好幾屏幕的, 沒有一千也有幾百條, 查詢語句把表鎖住了, 趕緊找出第一個Locked的thread_id, 在MySQL的shell里面執行.
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
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的內容像這個樣子
kill 66402982;
kill 66402983;
kill 66402986;
kill 66402991;
.....
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
do
mysqladmin kill ${id}
done