`
shixiaomu
  • 浏览: 375860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

很多时候!一不小心就锁表!这里讲解决锁表终极方法!

阅读更多


很多时候!一不小心就锁表!这里讲解决锁表终极方法!

案例一

mysql>show processlist;

参看sql语句

一般少的话

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的内容像这个样子
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

案例二

如果大批量的操作能够通过一系列的select语句产生,那么理论上就能对这些结果批量处理。
但是mysql并没用提供eval这样的对结果集进行分析操作的功能。所以只能现将select结果保存到临时文件中,然后再执行临时文件中的指令。
具体过程如下:
mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root';
+------------------------+
| concat('KILL ',id,';')
+------------------------+
| KILL 3101;           
| KILL 2946;           
+------------------------+
2 rows IN SET (0.00 sec)
mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';
Query OK, 2 rows affected (0.00 sec)
mysql> source /tmp/a.txt;
Query OK, 0 rows affected (0.00 sec)


案例三

MySQL + PHP的模式在大并发压力下经常会导致MySQL中存在大量僵死进程,导致服务挂死。为了自动干掉这些进程,弄了个脚本,放在服务器后台通过crontab自动执行。发现这样做了以后,的确很好的缓解了这个问题。把这个脚本发出来和大家Share.
根据自己的实际需要,做了一些修改:
SHELL脚本:mysqld_kill_sleep.sh
#!/bin/sh
mysql_pwd="root的密码"
mysqladmin_exec="/usr/local/bin/mysqladmin"
mysql_exec="/usr/local/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_timeout_log="$mysql_timeout_dir/mysql_timeout.log"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
mysql_kill_timeout_log="$mysql_timeout_dir/mysql_kill_timeout.log"
$mysqladmin_exec -uroot -p"$mysql_pwd" processlist | awk '{ print $12 , $2 ,$4}' | grep -v Time | grep -v '|' | sort -rn > $mysql_timeout_log
awk '{if($1>30 && $3!="root") print "'""$mysql_exec""' -e " "/"" "kill",$2 "/"" " -uroot " "-p""/"""'""$mysql_pwd""'""/"" ";" }' $mysql_timeout_log > $mysql_kill_timeout_sh
echo "check start ...." >> $mysql_kill_timeout_log
echo `date` >> $mysql_kill_timeout_log
cat $mysql_kill_timeout_sh
把这个写到mysqld_kill_sleep.sh。然后chmod 0 mysqld_kill_sleep.sh,chmod u+rx mysqld_kill_sleep.sh,然后用root账户到cron里面运行即可,时间自己调整。
执行之后显示:

www# ./mysqld_kill_sleep.sh
/usr/local/bin/mysql -e "kill 27549" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27750" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27840" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27867" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27899" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27901" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27758" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27875" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27697" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27888" -uroot -p"mysql root的密码";
/usr/local/bin/mysql -e "kill 27861" -uroot -p"mysql root的密码";
如果确认没有问题了,把最后的cat修改为sh即可。

本人改写了下上面的脚本:
#!/bin/bash
mysql_pwd="密码"
mysql_exec="/usr/local/mysql/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
mysql_kill_timeout_log="$mysql_timeout_dir/mysql_kill_timeout.log"
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" >> $mysql_kill_timeout_log
chmod 777 $mysql_kill_timeout_log
for line in `$mysql_kill_timeout_log  | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e /"kill $line/"" >> $mysql_kill_timeout_sh
done
chmod 777 $mysql_kill_timeout_sh
cat $mysql_kill_timeout_sh

是不是很方便呢!
分享到:
评论

相关推荐

    MYSQL锁表问题的解决方法

    一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sql语句 一般少的话 mysql>kill thread_id; 就可以解决了 kill掉第一个锁表的进程, 依然没有改善. 既然不改善, 咱们就想办法...

    终极CRM项目,小心使用哦。不可泄露!

    终极CRM项目,小心使用哦。不可泄露! 很完善,BUG少,值得一练! 将要出师的菜菜们,值得一练

    bluestacks微信摇一摇和陌陌的登陆及定位问题的终极解决方案

    花了4个小时的时间,总算把相关工具...因为5分钟前才制作好,所以文档教程还在提交中,也许要到明天才能通过审核,大家到时在百度文库里搜索标题为“微信摇一摇和陌陌的登陆及定位问题的终极解决方案”吧,应该能找到的

    process.StandardOutput.ReadToEnd 卡死解決方法! 新方法!

    最近做一个编程,用C#调用类似ssh,ftp,...网上还有很多多线程,不用Error重定向之类的,都不好用.几十行代码,只为获取几行输出?太坑爹了. 我突然发现一个非常简捷的方法.想想网上翻了好久,都找不到,有点生气.那就搞个5分.

    【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!

    在我们编写的应用程序或者高并发程序中,不知道大家有没有想过一个问题,就是我们为什么需要引入锁?锁为我们解决了什么问题呢?在很多业务场景下,我们编写的应用程序中会存在很多的资源竞争的问题。而我们在高并发...

    读写锁源代码(C#编写)

    读写锁的使用,程序简单明了!! 让你一看就懂,呵呵,很不错哦!!!

    水晶易表真实案例!!

    对水晶仪表有兴趣的朋友可以借鉴!!!非常简单,上手很容易!!!

    SQLServer200自动杀锁

    SQLServer200数据库自动杀锁。 很不错哦,你懂得!初学者必备。祝您成功!

    基于FPGA的密码锁

    很不错的技术资料!这是基于FPGA的密码锁资料!需要就下吧!

    安卓锁机源码软件源码非易语言源码

    安卓锁机源码软件源码非易语言源码 此源码是点睛网赚会员投稿来的最新源码 解压密码dianjingwz_com 据说这个源码很牛B转化挺高的 大家拿可以自己用也可以卖钱来的!!

    MySQL小面试题!!!!!

    ## 数据库查询效率很低怎么办 读提交怎么解决幻读问题 WHERE a > 1 and b=1 ORDER BY c 建立索引 如何建立联合索引 ...第一次索引查询是顺序IO,回表是随机IO,消耗性能,回表次数越多,优化器越倾向于全表扫描。

    LCD显示,有AT24C02和语音功能的密码锁

    LCD显示,有AT24C02和语音功能的密码锁,做课程设计时,我发了一个星期收集的,绝对不骗人 资料很完善!!!!!!

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第12版)

    我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不...

    jquery 锁定表头和固定列(Fixed table head and columns)

    前段时间需要这个功能,但是找了很多都不能完美的实现,不是只能锁定表头,就是浏览器兼容问题什么的,在此就自己做了一个锁定表头和列的js方法,依赖于JQuery。 因为方法很简单,就未封装成插件的形式,仅仅以代码...

    计算机锁定程序美女挂机锁

    一款美女挂机锁,暂时离开的时候锁定电脑哦!呵呵!很好用的

    广联达自带程序测试真假深思锁

    点检测(点检测的时候要保持电脑上只插广联达的加密锁),会显示锁的检测结果,如果显示(测试成功完成)就说明是深思锁或智能锁(智能锁是可以通过检测的,所以是最很安全,正版的官方驱动是检测不出他是盗版锁来的...

    Android 关于fragment切换重新加载的解决方法

    但是,这样会有一个问题 ,应该很多朋友都遇到过: 每次切换的时候,Fragment都会重新实例化,也就是运行OnCreatVIew()方法 那么如何让多个Fragment彼此切换时不重新实例化? 正确的切换方式是add(),切换时hide(),...

    C# 解决双击TreeView表里checkbox本身Bug问题

    在这里checkbox状态已经和显示状态不一致了 以后每次双击,checkbox显示的状态会出现一次切换,AfterCheck也会触发一次,并且checkbox显示的状态和值的状态仍然保持相反。 除上面这个问题外,还有一点,当双击...

    最新最全的三星解锁工具

    最新最全的三星解锁工具 很不容易才找到的啊

    ADB-FASTBOOT工具箱

    那么很多同学卡在第一屏,白屏。或者recovery无法进入(有时候涉及到系统文件不完整,一般都是未刷入第三方recovery) 都是因为boot系统内核(引导分区)加上system不匹配,造成不能正确引导所致。 既然知道了问题...

Global site tag (gtag.js) - Google Analytics