`
shixiaomu
  • 浏览: 382404 次
  • 性别: 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

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

相关推荐

    c# repeater 锁表头

    这种方法可以解决锁表头的功能,但是这里的缺点就是要将两个表格的单元格宽度调为一致才能不出现表格的错位问题。 二、使用CSS、JS来实现 此处只事例了锁表头的方法。锁列的方法一样 只不过是要将需要锁的列引用相应...

    锁机软件生成器

    这个锁机软件生成器有逻辑锁功能,硬盘锁功能,远程控制功能,暴力登录QQ功能(不能暴力登录有设备锁的QQ)。很好用,大家快来下载吧!!!

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

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

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

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

    Android 手势锁的实现

    在Android开发中,手势锁是一种常见的用户验证方式,它提供了便捷且直观的用户交互体验。本文将深入探讨如何实现一个自定义的手势锁组件,基于给出的博客实例和相关文件`zhy_gestureLockView`。 首先,我们需要理解...

    amd安装mac终极方法,mac替换amd内核补丁方法

    "amd安装mos终极攻略.txt" 这个文件很可能包含了详细步骤和技巧,MOS(Mac on AMD Simplified)是一个针对AMD平台的Mac OS安装引导工具。它简化了安装流程,提供了对AMD处理器的支持。攻略中可能包括了如何下载正确...

    广联达深思最新2018写锁工具【586测试可用】【全国版】+授权

    当一个用户对某个资源加了写锁后,其他用户就不能同时进行写操作,只能读取,直到锁被释放。这种机制在数据库管理系统中尤为关键,保证了数据的一致性和完整性。 2018版的深思写锁工具,据描述所示,已经经过了586...

    电脑反应速度慢的原因及解决方法

    解决方法是,将不常用的桌面图标放到一个专门的文件夹中或者干脆删除。 三、杀毒软件的系统启动扫描功能 有些杀毒软件提供了系统启动扫描功能,这将会耗费非常多的时间。解决方法是,将这项功能禁止掉,使用杀毒...

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

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

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

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

    atmage16 c语言 16按键 单片机密码锁程序

    atmage16 c语言 16按键 单片机密码锁程序,有很好的稳定性,有很好的实用性!

    解决Android解析图片的OOM问题的方法!!!

    大家好,今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但是当图片很大的时候 就要用BitmapFactory.Options这个东东了,Options里...

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

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

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

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

    广联达深思S4锁294D写锁授权程序

    锁同时最多能写入两个省份,不能一次性勾选全国的省份进行写入,一次性写入全部省份,锁就会坏死,无法修复。 建议还是写入一个省份,安全。最多可写入两个省份!请勿测试写入多省。 如果以后需使用到其它省,很简单...

    php留言板中的表情添加 表情添加 源代码

    在PHP开发中,创建一个带有表情功能的留言板可以极大地提升用户体验,使得用户在留言时能够表达更多的情感。本文将深入探讨如何在PHP留言板系统中实现表情添加,以及提供一段非常有用的PHP代码作为参考。 首先,...

    向Oracle数据库插入Clob大段文本解决方法

    本文将详细介绍如何有效地向Oracle数据库插入Clob大段文本,以及在操作过程中可能遇到的问题与解决方案。 ### 一、理解CLOB类型 CLOB类型是Oracle数据库中用于存储大量文本数据的数据类型,它可以存储最大为4GB的...

    关于MacBook Pro 在Boot Camp下安装完Win7后键盘出现失灵的完美解决方法

    关于 MacBook Pro 在 Boot Camp 下安装完 Win7 后键盘出现失灵的完美解决方法 在这篇文章中,我们将讨论 MacBook Pro 在 Boot Camp 下安装完 Win7 后键盘出现失灵的问题,并提供完美的解决方法。 首先,让我们了解...

    MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 v1.0.5

    SolveFlashingAndRedraw框架是MFC解决窗口保存及重绘闪烁问题的一种比较好的方案(Win32解决方法类似)。 版本历史: v1.0.1 20091126 第一版本 v1.0.2 20091212 第二版本 1. 修改了部分变量的名字使其更符合其...

    C# 串口通信(彻底解决C#串口通信中的数据丢失问题)

    ### C#串口通信详解与数据丢失问题的解决方法 #### 概述 串口通信是一种常见的设备间数据传输方式,在工业控制、自动化测试等领域应用广泛。然而,在使用C#进行串口通信开发时,很多开发者都遇到过数据丢失的问题...

Global site tag (gtag.js) - Google Analytics