码迷,mamicode.com
首页 > 数据库 > 详细

mysql中kill掉所有locked

时间:2015-03-13 19:01:34      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:下一步   服务器   运营商   mysql   数据库   

当一个MySQL连接会话等待另外一个会话持有的互斥锁时,会发生Innodb锁等待情况。

通常情况下,持有该互斥锁的会话(连接)会迅速的执行完相关操作并释放掉持有的互斥锁,进而等待的会话在锁等待超时时间到来前获得该互斥锁,进行下一步操作。

但在某些情况下,比如一个实例未感知到的中断会话,持有该互斥锁的会话长时间不释放该互斥锁,可能会导致大量的锁等待与锁等待超时。


过年前某个客户的数据库服务器经常发生锁表(国内某棋牌运营商) 老有刷数据的 封了N 多IP 而且一刷就锁表,最主要的是zabbix监控到,负载300多,根本停不下来啊!!!!!!!!!!
mysql
>show processlist;

出来哗啦啦好几屏幕的, 没有一千也有几百条, 查询语句把表锁住了, 赶紧找出第一个Locked的thread_id, 在mysql的shell里面执行.


#!/bin/bash
mysql -u root -proot -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的shell中执行, 就可以把所有锁表的进程杀死了.

mysql>source kill_thread_id.sql


当然,这不是根本的解决办法,还是赶紧把具体的sql提交给开发人员,让他们呢改代码去吧!

mysql中kill掉所有locked

标签:下一步   服务器   运营商   mysql   数据库   

原文地址:http://jinyan2049.blog.51cto.com/881440/1620145

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!