新春签到免费送会员,每天签到一次,送一天会员,活动截止时间不定,随时终止!机会不要错过哦!
首页  >   经验  >   mysql指定条件批量杀死线程的方法

mysql指定条件批量杀死线程的方法

codexia 2019-01-11 11:11:34 146
mysql   批量   杀死   线程  
简介在处理数据库异常的时候,有时候需要将数据库中相关的进程线程杀掉,以免死锁或者睡眠导致大量的数据库操作卡死

    在处理数据库异常的时候,有时候需要将数据库中相关的进程线程杀掉,以免死锁或者睡眠导致大量的数据库操作卡死。一般情况下,我们使用:

show processlist
    来查询正在运行的进程列表。不过这种查法却无法进行过滤,非常不好用。
    如果想指定条件来过滤相关的进程列表并且批量杀死进程线程,怎么办呢?
    对于这个需求,我们分两步来做:
1.指定条件过滤进程列表
    使用上面的查询是无法过滤的。不过processlist的数据都是存储在系统数据库information_schema的PROCESSLIST表里的。自然而然,我们就可以直接查表来过滤数据了。查表的方法和普通的数据库的表是一样的。这里就不多说了。
    下面给一个示例:
select * from information_schema.processlist where Command='Sleep'
    此语句可以查询所有进入睡眠状态的进程线程。语句的写法和普通的表是一样的。这个表有ID、USER、HOST、DB、COMMAND、TIME、STATE、INFO一共8个字段。我们可以自由的过滤。
2.批量杀死进程线程
    上一步我们能够根据指定条件过滤出所有的符合要求的进程,那么这一步就需要将这些线程杀死。如果只是杀死某个线程,我们使用如下语句:
kill 进程ID;
    进程ID就是上一步说的8个字段里的ID。如果要杀死多个线程,我们多写几个这样的kill就行了。但是如果太多了,手打也是很费时间的事情。所以我们要想个办法来自动形成需要的格式。
    自然而然,我们就可以想到字符串格式化。我们将查出来的ID和指定的字符串拼接起来,得到指定的一列数据,然后复制出来这一列数据就是我们需要的一组要杀掉的线程的语句,一次性执行就可以了。
    mysql拼接字符串的函数是concat,按照顺序依次传入多个字符串或字段名,就可以将字符串和字段值进行拼接。
    下面是示例语句:
select concat('kill ',id,';') from information_schema.processlist where Command='Sleep'
    执行完此语句后,就得到一列数据。结果如下:
kill 5872184;
kill 5872183;
kill 5872172;
kill 5872171;
kill 5872170;
kill 5872169;
kill 5872168;
kill 5872167;
... ...
    我们直接将这一个字段整体复制,然后拿去执行一下就可以了。因为有分号分隔,所以可以挨个去执行,这样执行完后就将所有的线程杀死了。

文章标题:mysql指定条件批量杀死线程的方法
文章地址:http://www.cjjjs.com/article/20190111111132026
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:mysql指定条件批量杀死线程的方法
收藏 0 点赞 0

相关阅读

  1. mysql指定条件批量杀死线程的方法
  2. mysql多个存储引擎的分析比较
  3. mysql的max_connections过多问题解决办法
  4. mysql将一个字段拼接并加入随机数字的实现
  5. mysql数据表添加数据重复问题解决办法
  6. navicat for mysql远程连接ubuntu服务器的mysql数据库
  7. 项目开发中使用并发模型常见问题的整理与思考
  8. 在2.21中遇到的线程问题
  9. mysql执行update更新未更改的数据的问题探讨
  10. mysql锁表解锁数据表问题分析和解决方法总结
分享到:
分享文章[mysql指定条件批量杀死线程的方法]到QQ空间

相关阅读

  • mysql指定条件批量杀死线程的方法

    在处理数据库异常的时候,有时候需要将数据库中相关的进程线程杀掉,以免死锁或者睡眠导致大量的数据库操作卡死

  • mysql多个存储引擎的分析比较

    mysql目前支持好多个存储引擎,到底哪个更适合,还是混合着用呢?我们需要完整的了解各个存储引擎的特性,才能在实际项目中发挥最好的作用。

  • mysql的max_connections过多问题解决办法

    最近发现mysql一个奇怪的问题,好好的代码,运行一段时间后,数据库操作就失败了。一开始以为是操作了多个数据库,可能是数据库串了,经过检查,确实没有错。后来在Navicat工具刷新数据的时候,提示了mysql的连接数过多的问题(connections too many)。因为此前也出现过这样的问题,没想到现在又出来了。

  • mysql将一个字段拼接并加入随机数字的实现

    在数据库的数据处理的过程中,我们可能会遇到这种情况,我们需要将一个字段批量处理一下,需要按照一个格式来处理,但是因为数据量大,手动处理可能不太现实,那么就需要直接使用sql语句来实现了。因为这是比较复杂点的功能,用的少,所以很多人都不太熟悉,就此我将我的方法介绍给大家。

  • mysql数据表添加数据重复问题解决办法

    mysql数据表添加数据重复问题,在做了重复性检测后依然会发生,是因为并发操作引起的。然而主键却不能很好的利用,那么我们只有寻求其他办法了。本文给你一个可行的办法,很好的解决了这个问题。

  • navicat for mysql远程连接ubuntu服务器的mysql数据库

    navicat for mysql远程连接ubuntu服务器的mysql数据库

  • 项目开发中使用并发模型常见问题的整理与思考

    需求: 数量不定,会定期更新数据,且数据量大的一堆数据,需要在短时间内调用某个接口获取到所有的数据,随后根据返回的json键值进行分类处理。

  • 在2.21中遇到的线程问题

    C++技术网已经用心解答了用户提出的问题【在2.21中遇到的线程问题】,如还有问题,请继续在文章底部留言交流,直到完全懂了为止。

  • mysql执行update更新未更改的数据的问题探讨

    在一次数据表操作的时候,发现更新与数据表中一样的数据的时候,mysql竟然返回影响的行数为0行。然而程序的逻辑是依据影响的行数来判断是否执行成功的,然后就成功入坑了。而SQL SERVER会正常返回1行。

  • mysql锁表解锁数据表问题分析和解决方法总结

    昨天在操作一个mysql数据表时,发现执行了数据表操作的代码一直都不返回,等了很久才返回超时错误。然后我就用数据库工具Navicat执行语句,发现查询语句没有问题,然而更新语句却卡死了。然后重启了数据库服务,再重试更新语句,依然卡死。