`
shixiaomu
  • 浏览: 383727 次
  • 性别: 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来实现 此处只事例了锁表头的方法。锁列的方法一样 只不过是要将需要锁的列引用相应...

    ios pthead 线程mutex锁 cond条件锁 一个例子就解决

    线程锁,条件锁一次性讲清楚 题目很简单,就是一个工厂的生产者在生产苹果 一个消费者在一直消费苹果,就用代码来实现这个过程 https://blog.csdn.net/github_35041937/article/details/83745211

    Laravel 的 Redis 分布式锁.zip

    Laravel 的 Redis 分布式锁Laravel RedLock提供使用 Redis 的通用锁定机制。实现 Redis 提出的锁定标准。致谢该库最初由 LibiChai 基于 antirez 开发的 Redlock 算法构建。该库由 That's Us, Inc. 的团队重新制作。...

    最新驱动,广联达深思写锁+授权工具 s4V4.8(适用536,552,580版),完美运行!

    该文件很可能是作为用户指南,提供给用户一系列详细的安装、配置以及使用方法。用户按照这份指南进行操作,可以更加轻松地完成“深思写锁”和“授权工具”的安装,以及后续的激活和配置。这对于确保软件能正常运行,...

    非传统屏幕锁(人性化设计)+源码

    本程序并非传统屏幕锁!锁屏 看不出来 但无法使用键盘(处数字键可用)屏蔽一切组合键 和 鼠标 !程序设计很人性化!向你推荐!!!!!!并附上源代码! //*如果参数为空,程序将使用默认数据|默认密码为753(密码必须为...

    Redis实现分布式锁(附源码+讲义)

    在学习Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看成是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,即所有线程都在同一个JVM进程里的时候,使用Java语言提供的锁...

    Android 手势锁的实现

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

    解方程工具 可以解很多方程!

    可以解方程的工具, 可以解一次方程 二次方程, 不完全三元方程等

    毁灭压力测试完美终极版

    在IT行业中,压力测试是一种重要的系统验证方法,用于评估应用程序、网站或服务器在高负载条件下的性能、稳定性和可扩展性。"毁灭压力测试完美终极版"是一个专门针对这一需求设计的工具,它能模拟多用户并发访问,...

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

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

    THC-NOKIA-UNLOCK解锁文件

    将锁机的多媒体卡取出,建立目录 \System\Recogs拷贝 thc-nokia-unlock.mdl 文件到这个目录去 2、插入内存卡到锁机的电话中开机, 程序THC-NOKIA-UNLOCK将在1-2分钟内自动运行 3、程序运行完毕后取下电池和内存卡,...

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

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

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

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

    水晶易表真实案例!!

    总的来说,“电信公司销售数据概览.xlf”案例是一个很好的学习资源,它展示了如何利用水晶易表处理和展示复杂的数据,帮助我们理解如何在实际工作中运用这个工具进行数据分析和决策支持。通过对这个案例的深入研究,...

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

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

    ADB-FASTBOOT工具箱

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

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

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

    【原创】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)

    当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件...

    自动锁键盘绿色免安装版

    自动锁键盘 绿色免安装版本 界面简洁大方,很好用的!

Global site tag (gtag.js) - Google Analytics