Jak zabić wszystkie procesy w Mysql "Pokaż listę procesów"?

Ponieważ widzę tam wiele procesów, a Kolumna "time" pokazuje duże wartości dla wszystkich z nich.

Author: Ricardo Reyes, 2009-12-14

23 answers

Musisz je zabić jeden po drugim, MySQL nie ma żadnego potężnego polecenia kill. Możesz go skryptować w dowolnym języku, na przykład w PHP możesz użyć czegoś takiego jak:

$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);
  }
}
 111
Author: Michal Čihař,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-14 22:15:26

Masowe zabijanie operacja oszczędza czas. Zrób to w samym MySql:

Uruchom te polecenia

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;

Odniesienie

---------edit------------

Jeśli nie chcesz przechowywać w pliku, przechowuj w variable

Po prostu uruchom w wierszu polecenia

> 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")
 217
Author: Angelin Nadar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 13:37:31

Przeszukałem również jak parsować przez MySQL polecenie SHOW PROCESSLIST i skończyło się na jednej linijce w powłoce:

mysqladmin processlist -u <USERNAME> -p<PASSWORD> | \
awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | \
mysql -u <USERNAME> -p<PASSWORD>
  • mysqladmin processlist wyświetli tabelę z identyfikatorami wątków;
  • awk przetworzy z drugiej kolumny tylko liczby (ID wątków) i wygeneruje polecenia MySQL KILL;
  • i wreszcie ostatnie wywołanie mysql wykona przekazane polecenia.

Możesz uruchomić grep przed awk polecenie filtrowania konkretnej nazwy bazy danych.

 16
Author: m8t,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 21:02:19

Lub... w skorupie...

service mysql restart
Tak, wiem, jestem leniwy, ale to też może być przydatne.
 11
Author: EcchiOli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-10 22:20:38

Tylko dla mariaDB

To nie staje się prostsze niż to, po prostu wykonaj to w MySQL prompt.

kill USER username;

Zabije wszystkie procesy pod podaną nazwą użytkownika. ponieważ większość ludzi używa tego samego Użytkownika do wszystkich celów, to działa!

Testowałem to na MariaDB nie jestem pewien co do mysql.

 9
Author: Maulik Gangani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-11 12:50:09

Ostatnio musiałem to zrobić i wymyśliłem to

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

W ten sposób nie musisz przechowywać plików i uruchamiać wszystkich zapytań za pomocą jednego polecenia.

 7
Author: Iberê,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 19:26:30

Poniższa procedura utworzy prostą procedurę składowaną, która używa kursora do zabicia wszystkich procesów jeden po drugim, z wyjątkiem obecnie używanego procesu:

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 ;

Może być uruchomiony z SELECT s, aby pokazać procesy przed i po w następujący sposób:

SELECT * FROM information_schema.processlist;
CALL kill_other_processes();
SELECT * FROM information_schema.processlist;
 7
Author: Steve Chambers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-03 15:22:56

KILL ALL SELECT QUERIES

select concat('KILL ',id,';') 
from information_schema.processlist 
where user='root' 
  and INFO like 'SELECT%' into outfile '/tmp/a.txt'; 
source /tmp/a.txt;
 5
Author: user3269995,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-04 11:48:46

Jeśli nie masz information_schema:

mysql -e "show full processlist" | cut -f1 | sed -e 's/^/kill /' | sed -e 's/$/;/' ;  > /tmp/kill.txt
mysql> . /tmp/kill.txt
 5
Author: mikesl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-04 11:39:34

Ten sniped pracował dla mnie (MySQL server 5.5), aby zabić wszystkie procesy MySQL:

mysql -e "show full processlist;" -ss | awk '{print "KILL "$1";"}'| mysql
 3
Author: Fedir RYKHTIK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-01 17:21:25

Połączyłbym Basha i mysql:

for i in $(mysql -Ne "select id from information_schema.processlist where user like 'foo%user' and time > 300;"); do
  mysql -e "kill ${i}"
done
 3
Author: wiebel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-21 14:59:52

Zaloguj się do Mysql jako admin:

 mysql -uroot -ppassword;

I polecenie Uruchom:

mysql> show processlist;

Dostaniesz coś takiego jak poniżej:

+----+-------------+--------------------+----------+---------+------+-------+------------------+
| 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 |
+----+-------------+--------------------+----------+---------+------+-------+------------------+

Zobaczysz pełne szczegóły różnych połączeń. Teraz możesz zabić połączenie spania jak poniżej:

mysql> kill 52;
Query OK, 0 rows affected (0.00 sec)
 2
Author: Suresh Kamrushi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-08 07:44:48

Oto rozwiązanie, które można wykonać bez polegania na systemie operacyjnym:

Krok 1: Utwórz procedurę składowaną.

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 ;

Krok 2: wywołaj procedurę składowaną nadając jej nazwę użytkownika bazy danych, którego procesy chcesz zabić. Możesz przepisać procedurę składowaną, aby filtrować według innych kryteriów, jeśli chcesz.

CALL kill_user_processes('devdba');

 2
Author: Dan Spiegel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-03 10:29:57
mysqladmin pr -u 'USERNAME' -p'PASSWORD' | awk '$2~/^[0-9]+/{print $2}' | xargs -i mysqladmin -u 'USERNAME' -p'PASSWORD' kill {}
 2
Author: user3721740,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 11:17:10

Możemy to zrobić przez MySQL Workbench. Po prostu wykonaj to:

kill id;

Przykład:

kill 13412

To go usunie.

 2
Author: Aroon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-19 14:21:21

W języku python możesz zrobić tak

import pymysql

connection = pymysql.connect(host='localhost',
                             user='root',
                             db='mysql',
                             cursorclass=pymysql.cursors.DictCursor)

with connection.cursor() as cursor:
    cursor.execute('SHOW PROCESSLIST')
    for item in cursor.fetchall():
        if item.get('Time') > 200:
            _id = item.get('Id')
            print('kill %s' % item)
            cursor.execute('kill %s', _id)
    connection.close()
 1
Author: BohanZhang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 02:54:09

Łatwym sposobem byłoby ponowne uruchomienie serwera mysql.. Otwórz " usługi.msc " w Windows Run wybierz z listy Mysql. Kliknij prawym przyciskiem myszy i zatrzymaj usługę. Następnie uruchom ponownie i wszystkie procesy zostałyby zabite z wyjątkiem jednego (domyślne zarezerwowane Połączenie)

 0
Author: shashi009,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-13 10:56:42
#! /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;
 0
Author: Diego Andrés Díaz Espinoza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 15:29:30

Czasami mam kilka zombie procesów mysql, których nie da się zabić (używając MAMP Pro).

Najpierw pobierz listę wszystkich procesów mysql:

ps -ax | grep mysql

Następnie Zabij każdy z nich za pomocą (zamień processId na pierwszą kolumnę w poprzednim wyniku polecenia):

kill -9 processId
 0
Author: Nico Prat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 10:01:53

Następujące zadziałały dla mnie świetnie:

echo "show processlist" | mysql | grep -v ^Id | awk '{print $1}' | xargs -i echo "KILL {}; | mysql"
 0
Author: Timon de Groot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 08:12:30

Użyłem polecenia flush tables aby zabić wszystkie nieaktywne połączenia, które w rzeczywistości problem masy.

 0
Author: Meltzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-05 13:48:18

Jeśli używasz laravel to jest to dla Ciebie:

$query = "SHOW FULL PROCESSLIST";
    $results = DB::select(DB::raw($query));

    foreach($results as $result){
        if($result->Command == "Sleep"){
            $sql="KILL ". $result->Id;
            DB::select(DB::raw($sql));
        }
    }

Oczywiście, powinieneś użyć tego use Illuminate\Support\Facades\DB; po swojej przestrzeni nazw.

 -1
Author: Ziaur Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-06 10:38:06

ZAPYTANIE 1 wybierz concat('KILL ',id,';') z information_schema.processlist where user = 'username' into outfile '/tmp/a.txt";

Zapytanie 2 źródło a.txt

To pozwoli Ci zabić wszystkie zapytania w show processlist przez konkretnego użytkownika.

 -4
Author: Saurav Sood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 12:50:24