0
点赞
收藏
分享

微信扫一扫

mysql kill process解决死锁


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

举报

相关推荐

0 条评论