Ang*_*dar 204
大规模杀戮操作可以节省 在MySql本身中执行:
运行这些命令
mysql> select concat('KILL ',id,';') from information_schema.processlist
where user='root' and time > 200 into outfile '/tmp/a.txt';
mysql> source /tmp/a.txt;
Run Code Online (Sandbox Code Playgroud)
---------edit------------
Run Code Online (Sandbox Code Playgroud)
如果你不想存储在文件中,请存储在 variable
只需在命令提示符下运行即可
> out1=$(mysql -B test -uroot -proot --disable-column-names -e "select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200;")
> out2= $(mysql -B test -uroot -proot --disable-column-names -e "$out1")
Run Code Online (Sandbox Code Playgroud)
Mic*_*hař 103
你需要逐个杀死它们,MySQL没有任何大规模杀戮命令.您可以使用任何语言编写脚本,例如在PHP中,您可以使用以下内容:
$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
$process_id=$row["Id"];
if ($row["Time"] > 200 ) {
$sql="KILL $process_id";
mysql_query($sql);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 16
我还搜索了如何通过MySQL解析命令SHOW PROCESSLIST并以Shell中的单行结束:
mysqladmin processlist -u <USERNAME> -p<PASSWORD> | \
awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | \
mysql -u <USERNAME> -p<PASSWORD>
Run Code Online (Sandbox Code Playgroud)
您可以在awk命令之前运行grep来过滤特定的数据库名称.
Ecc*_*Oli 13
或者......在shell中......
service mysql restart
Run Code Online (Sandbox Code Playgroud)
是的,我知道,我很懒,但它也很方便.
Mau*_*ani 11
它不会变得简单,只需在mysql提示符中执行它.
kill USER username;
Run Code Online (Sandbox Code Playgroud)
它会在提供的用户名下杀死所有进程.因为大多数人为了各种目的使用相同的用户,它的工作原理!
我在MariaDB上测试了这个,不确定mysql.
小智 5
杀死所有选择查询
select concat('KILL ',id,';')
from information_schema.processlist
where user='root'
and INFO like 'SELECT%' into outfile '/tmp/a.txt';
source /tmp/a.txt;
Run Code Online (Sandbox Code Playgroud)
我最近需要这样做,并且我想到了这个
-- GROUP_CONCAT turns all the rows into 1
-- @q:= stores all the kill commands to a variable
select @q:=GROUP_CONCAT(CONCAT('KILL ',ID) SEPARATOR ';')
FROM information_schema.processlist
-- If you don't need it, you can remove the WHERE command altogether
WHERE user = 'user';
-- Creates statement and execute it
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)
这样,您无需使用单个命令即可存储到文件并运行所有查询。
下面将创建一个简单的存储过程,该过程使用游标一个一个地杀死所有进程,当前正在使用的进程除外:
DROP PROCEDURE IF EXISTS kill_other_processes;
DELIMITER $$
CREATE PROCEDURE kill_other_processes()
BEGIN
DECLARE finished INT DEFAULT 0;
DECLARE proc_id INT;
DECLARE proc_id_cursor CURSOR FOR SELECT id FROM information_schema.processlist;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
OPEN proc_id_cursor;
proc_id_cursor_loop: LOOP
FETCH proc_id_cursor INTO proc_id;
IF finished = 1 THEN
LEAVE proc_id_cursor_loop;
END IF;
IF proc_id <> CONNECTION_ID() THEN
KILL proc_id;
END IF;
END LOOP proc_id_cursor_loop;
CLOSE proc_id_cursor;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
可以与SELECTs一起运行以显示之前和之后的过程,如下所示:
SELECT * FROM information_schema.processlist;
CALL kill_other_processes();
SELECT * FROM information_schema.processlist;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
352644 次 |
| 最近记录: |