解决mysql锁表的方法

  介绍

这篇文章主要介绍”解决mysql锁表的方法”,在日常操作中,相信很多人在解决mysql锁表的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“解决mysql锁表的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

案例一

mysql   ,比;   ,显示   ,,   ,processlist   ,;,   ,

参看sql语句   ,

一般少的话

mysql   ,比;   ,杀了   ,,   ,thread_id   ,;   ,

就可以解决了   ,

杀死掉第一个锁表的进程,依然没有改善。既然不改善,咱们就想办法将所有锁表的进程杀死掉吧,简单的脚本如下。

# !/bin/bash   ,,
  ,,mysql   ,,,- - - - - -   ,,u   ,,,   ,,根   ,,,- - - - - -   ,,e   ,,,   ,,“;   ,,显示processlist   ,,“;   ,,|大敌;   ,,grep   ,,,- - - - - -   ,,我   ,,,   ,,“;   ,,锁着的   ,,“;   ,,,在在,   ,,locked_log   ,,.   ,,三种   ,,

  ,,为   ,,,   ,,行   ,,,   ,,在   ,,,   ,,”   ,,猫locked_log。txt | awk & # 39;{打印,   ,,1美元   ,,}& # 39;   ,,”   ,,
  ,,做   ,,,
,,   ,,回声   ,,,   ,,“;   ,,杀了,   ,,行美元   ,,;   ,,“;   ,,,在在,   ,,kill_thread_id   ,,.   ,,sql   ,,
  ,,完成了

现在kill_thread_id.sql的内容像这个样子

杀死   ,,,   ,,66402982   ,,,
  ,,杀了   ,,,   ,,66402983   ,,,
  ,,杀了   ,,,   ,,66402986   ,,,
  ,,杀了   ,,,   ,,66402991   ,,,
.....

好了,我们在mysql的shell中执行,就可以把所有锁表的进程杀死了。

mysql   ,,比;   ,,源   ,,,   ,,kill_thread_id   ,,.   ,,sql

当然了,也可以一行搞定
  ,,

id的‘mysqladmin processlist | grep - i锁定| awk & # 39;{打印1美元}& # 39;“

做,,mysqladmin杀死$ {id}
  ,,,

案例二   ,,,

如果大批量的操作能够通过一系列的选择语句产生,那么理论上就能对这些结果批量处理。
但是mysql并没用提供eval这样的对结果集进行分析操作的功能,所以只能现将选择结果保存到临时文件中,然后再执行临时文件中的指令。
具体过程如下:   ,,,

mysql>选择concat(& # 39;杀死& # 39;id, & # 39;; & # 39;)从information_schema。processlist用户=& # 39;根# 39;;
+ - - - - - - - - - - - - - - - - - - - - - - - - +
| concat(& # 39;杀死& # 39;id, & # 39;; & # 39;)
+ - - - - - - - - - - - - - - - - - - - - - - - - +
|杀了3101,,,,,,,,,,,,,
|杀死2946,,,,,,,,,,,,,
+ - - - - - - - - - - - - - - - - - - - - - - - - +
2行组(0.00秒)   ,,,

mysql>选择concat(& # 39;杀死& # 39;id, & # 39;; & # 39;)从information_schema。processlist用户=& # 39;根# 39;到输出文件& # 39;/tmp/a.txt& # 39;;
查询好,2行影响(0.00秒)   ,,,

mysql>源/tmp/a.txt;
查询好,0行影响(0.00秒)   ,,,

案例三   ,,,

PHP + MySQL的模式在大并发压力下经常会导致MySQL中存在大量僵死进程,导致服务挂死。为了自动干掉这些进程,弄了个脚本,放在服务器后台通过crontab自动执行。发现这样做了以后,的确很好的缓解了这个问题。把这个脚本发出来和大家份额。,   ,,,

根据自己的实际需要,做了一些修改:   ,,,

壳脚本:mysqld_kill_sleep.sh   ,,,

# !/bin/sh
mysql_pwd=案拿苈搿?br/> mysqladmin_exec=?usr/地方/bin/mysqladmin"
mysql_exec=?usr/地方/bin/mysql"
mysql_timeout_dir=?tmp"
mysql_timeout_log=癿ysql_timeout_dir美元/mysql_timeout.log"
mysql_kill_timeout_sh=癿ysql_timeout_dir美元/mysql_kill_timeout.sh"
mysql_kill_timeout_log=癿ysql_timeout_dir美元/mysql_kill_timeout.log"
美元mysqladmin_exec -uroot -p" mysql_pwd"美元;processlist | awk & # 39;{打印12美元,2美元,4美元}& # 39;| grep - v时间| grep - v & # 39; | & # 39;| rn比;美元mysql_timeout_log
awk & # 39;{如果(1美元在30,,3美元!=皉oot")打印“& # 39;““mysql_exec"美元;“& # 39;- e“;“\”;““kill", 2美元“\“““;-uroot“;“-p"“\“““& # 39;““mysql_pwd"美元;“& # 39;““\”;“”;“}& # 39;mysql_timeout_log比美元;美元mysql_kill_timeout_sh
回声“检查开始....“;在比;美元mysql_kill_timeout_log
回声“日期”在祝辞美元mysql_kill_timeout_log

解决mysql锁表的方法