1、查看进程列表,
show processlist;
+--------+--------+--------------------+----------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+--------+--------------------+----------+---------+------+----------+------------------+
| 8 | remote | 10.16.30.96:36592 | activity | Sleep | 239 | | NULL |
| 396749 | remote | 172.17.1.122:53028 | activity | Sleep | 1966 | | NULL |
| 397104 | remote | 172.17.3.211:52666 | activity | Sleep | 7 | | NULL |
| 397177 | remote | 172.17.3.211:52819 | activity | Sleep | 7366 | | NULL |
| 397267 | remote | 172.17.1.122:55728 | activity | Sleep | 5741 | | NULL |
| 397268 | remote | 172.17.1.122:55730 | activity | Sleep | 7849 | | NULL |
| 397287 | remote | 172.17.3.150:57151 | activity | Sleep | 7128 | | NULL |
| 397294 | remote | 172.17.3.68:53158 | activity | Sleep | 2882 | | NULL |
| 397296 | remote | 172.17.3.68:53160 | NULL | Sleep | 6492 | | NULL |
2、 查询语句把表锁住了, 赶紧找出第一个Locked的thread_id, 在MySQL的shell里面执行.
kill id
#!/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的内容像这个样子
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