Как я могу убить все процессы в Mysql «show processlist»?

Вопрос:Потому что я вижу там много процессов, а столбец "время" показывает большие значения для всех них. Лучший ответ: Вам нужно убивать их один за другим, у MySQL нет массивной команды kill. Вы можете script его на любом языке, например, в PHP вы можете использовать что-то вроде: $result = mysql_query("SHOW FULL PROCESSLIST"); while ($row=mysql_fetch_array($result)) { $process_id=$row["Id"];

Вопрос:

Потому что я вижу там много процессов, а столбец “время” показывает большие значения для всех них.

Лучший ответ:

Вам нужно убивать их один за другим, у MySQL нет массивной команды kill. Вы можете script его на любом языке, например, в 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); } } Ответ №1

Массовое убийство экономит время. Сделайте это в самой 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;

Ссылка

———edit————

если вы не хотите хранить в файле, сохраните его в 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») Ответ №2

Я также искал, как анализировать через MySQL команду SHOW PROCESSLIST и заканчивается однострочным в оболочке:

mysqladmin processlist -u <USERNAME> -p<PASSWORD> | awk ‘$2 ~ /^[0-9]/ {print «KILL «$2″;»}’ | mysql -u <USERNAME> -p<PASSWORD>

  • mysqladmin processlist будет печатать таблицу с идентификаторами потоков;
  • awk будет анализировать из второго столбца только числа (идентификаторы потоков) и генерировать команды MySQL KILL;
  • и, наконец, последний вызов mysql выполнит переданные команды.

Вы можете запустить grep перед командой awk для фильтрации определенного имени базы данных.

Ответ №3

Войти в Mysql как admin:

mysql -uroot -ppassword;

И чем выполнить команду:

mysql> show processlist;

Вы получите что-то вроде ниже:

+—-+————-+———————+———-+———+——+——-+——————+ | Id | User | Host | db | Command | Time | State | Info | +—-+————-+———————+———-+———+——+——-+——————+ | 49 | application | 192.168.44.1:51718 | XXXXXXXX | Sleep | 183 | | NULL || | 55 | application | 192.168.44.1:51769 | XXXXXXXX | Sleep | 148 | | NULL | | 56 | application | 192.168.44.1:51770 | XXXXXXXX | Sleep | 148 | | NULL | | 57 | application | 192.168.44.1:51771 | XXXXXXXX | Sleep | 148 | | NULL | | 58 | application | 192.168.44.1:51968 | XXXXXXXX | Sleep | 11 | | NULL | | 59 | root | localhost | NULL | Query | 0 | NULL | show processlist | +—-+————-+———————+———-+———+——+——-+——————+

Вы увидите полную информацию о разных соединениях. Теперь вы можете убить спальное соединение, как показано ниже:

mysql> kill 52; Query OK, 0 rows affected (0.00 sec) Ответ №4

Или… в оболочке…

service mysql restart

Да, я знаю, я ленив, но это может быть удобно.

Ответ №5

Теперь это не упростится, просто выполните это в приглашении MariaDB.

kill USER username;

Он уничтожит весь процесс под предоставленным именем пользователя. потому что большинство людей используют одного пользователя для всех целей, он работает!

Ответ №6

Если у вас нет information_schema:

mysql -e «show full processlist» | cut -f1 | sed -e ‘s/^/kill /’ | sed -e ‘s/$/;/’ ; > /tmp/kill.txt
mysql> . /tmp/kill.txt

Ответ №7

УБИТЬ ВСЕ ВЫБОРНЫЕ ЗАПРОСЫ

select concat(‘KILL ‘,id,’;’) from information_schema.processlist where user=’root’ and INFO like ‘SELECT%’ into outfile ‘/tmp/a.txt’; source /tmp/a.txt; Ответ №8

Вот решение, которое вы можете выполнить, не полагаясь на операционную систему:

ШАГ 1. Создайте хранимую процедуру.

DROP PROCEDURE IF EXISTS kill_user_processes$$ CREATE PROCEDURE `kill_user_processes`( IN user_to_kill VARCHAR(255) ) READS SQL DATA BEGIN DECLARE name_val VARCHAR(255); DECLARE no_more_rows BOOLEAN; DECLARE loop_cntr INT DEFAULT 0; DECLARE num_rows INT DEFAULT 0; DECLARE friends_cur CURSOR FOR SELECT CONCAT(‘KILL ‘,id,’;’) FROM information_schema.processlist WHERE USER=user_to_kill; DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE; OPEN friends_cur; SELECT FOUND_ROWS() INTO num_rows; the_loop: LOOP FETCH friends_cur INTO name_val; IF no_more_rows THEN CLOSE friends_cur; LEAVE the_loop; END IF; SET @s = name_val; PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT name_val; SET loop_cntr = loop_cntr + 1; END LOOP the_loop; SELECT num_rows, loop_cntr; END $$ DELIMITER ;

ШАГ 2. Вызовите хранимую процедуру, указав ей имя пользователя базы данных, чьи процессы вы хотите убить. Вы можете переписать хранимую процедуру для фильтрации по другим критериям, если хотите.

CALL kill_user_processes(‘devdba’);

Ответ №9

Далее будет создана простая хранимая процедура, которая использует курсор для уничтожения всех процессов один за другим, за исключением используемого в настоящее время процесса:

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; — build email list IF proc_id <> CONNECTION_ID() THEN KILL proc_id; END IF; END LOOP proc_id_cursor_loop; CLOSE proc_id_cursor; END$$ DELIMITER ;

Его можно запустить с помощью SELECT, чтобы показать процессы до и после следующим образом:

SELECT * FROM information_schema.processlist; CALL kill_other_processes(); SELECT * FROM information_schema.processlist; Ответ №10mysqladmin pr -u ‘USERNAME’ -p’PASSWORD’ | awk ‘$2~/^[0-9]+/{print $2}’ | xargs -i mysqladmin -u ‘USERNAME’ -p’PASSWORD’ kill {} Ответ №11

Мне недавно нужно было это сделать, и я придумал этот

— 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;

Таким образом, вам не нужно хранить файлы и запускать все запросы с помощью одной команды.

Ответ №12

Это отрезало меня (MySQL server 5.5), чтобы убить все процессы MySQL:

mysql -e «show full processlist;» -ss | awk ‘{print «KILL «$1″;»}’| mysql Ответ №13

Простым способом будет перезапуск сервера mysql.
Откройте “services.msc” в Windows Run, выберите Mysql из списка. Щелкните правой кнопкой мыши и остановите службу. Затем Запустите снова, и все процессы будут убиты, кроме одного (зарезервированное соединение по умолчанию)

Ответ №14#! /bin/bash if [ $# != «1» ];then echo «Not enough arguments.»; echo «Usage: killQueryByDB.sh <db_name>»; exit; fi; DB=${1}; for i in `mysql -u <user> -h localhost ${DB} -p<password> -e «show processlist» | sed ‘s/(^[0-9]*).*/1/’`; do echo «Killing query ${i}»; mysql -u <user> -h localhost ${DB} -p<password> -e «kill query ${i}»; done; Ответ №15

Иногда у меня есть некоторые zombies mysql-процессы, которые нельзя убить (используя MAMP Pro).

Сначала получите список всех процессов mysql:

ps -ax | grep mysql

Затем убейте каждого из них (замените processId первым столбцом в предыдущем результате команды):

kill -9 processId Ответ №16

Следующие отлично работали для меня:

echo «show processlist» | mysql | grep -v ^Id | awk ‘{print $1}’ | xargs -i echo «KILL {}; | mysql» Ответ №17

Я использовал команду flush tables, чтобы убить все неактивные соединения, которые на самом деле представляют собой массовую проблему.

Ответ №18

Запрос 1
выберите concat (‘KILL’, id, ‘;’) из information_schema.processlist, где user = ‘username’ в outfile ‘/tmp/a.txt’;

Запрос 2
source a.txt

Это позволит вам убить все запросы в списке процессов для конкретного пользователя.

Оцените статью
Добавить комментарий