这篇文章主要介绍”解决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