AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 11357
Accepted
deadprogrammer
deadprogrammer
Asked: 2009-05-23 08:56:55 +0800 CST2009-05-23 08:56:55 +0800 CST 2009-05-23 08:56:55 +0800 CST

批量或大规模杀死行为不端的 MySQL 查询

  • 772

你如何杀死大量的 MySQL 查询?这是一个很好的方法:

mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';
mysql> source /tmp/a.txt;

除了在 MySQL 管理员 GUI 中将它们单击致死之外,还有其他的吗?

mysql bulk-action
  • 4 4 个回答
  • 8336 Views

4 个回答

  • Voted
  1. Best Answer
    Andy
    2009-06-07T10:49:34+08:002009-06-07T10:49:34+08:00

    要记录Percona 对此的最佳评论:

    评论 4:罗伯特·沃尔奇

    我更喜欢以下内容,因为它会以多线程方式杀死它们……(有时杀死单个查询可能需要一段时间)

    for i in $(mysql -uroot -pPASS -e 'show processlist' | grep 'search_term' | awk '{print $1}'); 做

    mysql -uroot -pPASS -e “杀死$i” &

    完毕

    评论 8:Shlomi Noach

    一个INFORMATION_SCHEMA.PROCESSLIST 存储过程,复制起来有点冗长。

    评论 16:布莱恩

    如果您的 MySQL 版本中不存在 information_schema.processlist,则可以在 linux 脚本中使用:

    #!/bin/bash
    
    对于 `mysqladmin -u root -prootpwd 进程列表中的每个 | awk
    '{打印 $2, $4, $8}' | grep $dbname | grep $dbuser | awk '{打印 $1}'`;
    
    执行 mysqladmin -u root -prootpwd 杀死 $each;
    
    完毕

    评论 21:安德鲁·沃森

    我这样做:

    mysqladmin 进程 | grep 睡眠 | 排序-r -n -k6 | awk {'打印 $1; '} | xargs mysqladmin 杀死

    或类似的东西……


    正如Dan C 在他对这个问题的回答中提到的那样,修剪 SELECTS 比在流程中终止写入命令要安全得多,因为您可能会丢失数据完整性和/或外键。

    • 6
  2. Dan Carley
    2009-06-07T11:47:08+08:002009-06-07T11:47:08+08:00

    另一种解决方案是使用Digg describe的方法,即自动修剪任何花费超过分配时间段才能完成的 SELECT 查询。一般来说,您只想修剪 SELECT 查询,因为它们是只读的,不应影响应用程序的数据完整性。

    您可以使用两个这样的实用程序来自动执行此操作,即dbmon.pl和 mkill,它们是名为mtop的包的一部分。

    • 2
  3. Fedir RYKHTIK
    2016-06-02T09:25:14+08:002016-06-02T09:25:14+08:00

    我用它来杀死 MySQL 5.5 数据库服务器上的所有休眠查询:

    mysql -e "show full processlist;" -ss | grep Sleep | awk '{print "KILL "$1";"}' | mysql
    
    • 0
  4. kenorb
    2016-08-03T03:11:03+08:002016-08-03T03:11:03+08:00

    最简单的方法是从外壳中杀死它们,例如

    mysqladmin proc | grep Sleep | awk '{print $2}' | xargs -L1 mysqladmin kill 
    

    如果仍然存在问题,请通过以下查询检查详细信息:

    mysql -e "SHOW engine innodb status\G"
    

    在 MySQL 中,根据@Shlomi的帖子尝试以下代码,您可以使用服务器游标创建存储过程,例如:

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS test.kill_user_queries$$
    CREATE PROCEDURE test.kill_user_queries (kill_user_name VARCHAR(16) CHARSET utf8)
    SQL SECURITY INVOKER
    BEGIN
    DECLARE query_id INT;
    DECLARE iteration_complete INT DEFAULT 0;
    DECLARE select_cursor CURSOR FOR SELECT id FROM INFORMATION_SCHEMA.PROCESSLIST WHERE user=kill_user_name;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET iteration_complete=1;
    
    OPEN select_cursor;
    cursor_loop: LOOP
    FETCH select_cursor INTO query_id;
    IF iteration_complete THEN
    LEAVE cursor_loop;
    END IF;
    KILL QUERY query_id;
    END LOOP;
    CLOSE select_cursor;
    
    END$$
    
    DELIMITER ;
    

    还有一个mypgrep.py由谷歌调用的旧脚本。

    • 0

相关问题

  • 跨地理位置不同的服务器的 MySQL 复制

  • 从 MySQL 迁移到 SQL Server 的最佳方法或工具

  • 您如何跟踪和调试 mySQL 性能问题?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 如何选择 MySQL 数据库引擎

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve