Назад | Перейти на главную страницу

Как убить все процессы MySQL в списке процессов?

Я хочу убить все процессы MySQL в списке процессов. Есть ли способ сделать это?

# mysqladmin -u root -p processlist
Enter password: 
+------+----------------------+---------------------+----+---------+------+-------+------------------+
| Id   | User                 | Host                | db | Command | Time | State | Info             |
+------+----------------------+---------------------+----+---------+------+-------+------------------+
| 1908 | unauthenticated user | 192.168.1.103:46046 |    | Connect |      | login |                  |
| 1909 | unauthenticated user | 192.168.1.103:46047 |    | Connect |      | login |                  |
| 1910 | unauthenticated user | 192.168.1.103:46048 |    | Connect |      | login |                  |
| 1914 | unauthenticated user | 192.168.1.103:46049 |    | Connect |      | login |                  |
| 1946 | unauthenticated user | 192.168.1.103:46076 |    | Connect |      | login |                  |
| 1954 | unauthenticated user | 192.168.1.103:46078 |    | Connect |      | login |                  |
| 2015 | root                 | localhost           |    | Query   | 0    |       | show processlist |
+------+----------------------+---------------------+----+---------+------+-------+------------------+

Остановка / запуск экземпляра MySQL не является ответом. В большинстве случаев это может занять довольно много времени и повлиять на ваше производство. Вы должны просто УБИТЬ такие запросы.

Две интересные статьи:

Как выборочно убивать запросы в MySQL?

и:

Почему потоки в MySQL иногда остаются в "убитом" состоянии?

Самый быстрый способ - просто перезапустить MySQL. В противном случае вам нужно будет убить каждый запущенный процесс один за другим (в mysqladmin нет killall).

Вы можете добиться этого с помощью сценария оболочки:

#!/bin/bash

# Get the processlist and save it in a file
mysqladmin -u root -p"your password" processlist > fullproce

# Get the process ids of the processes in the "Sleep" state and save them in id.
# Adjust the grep to match the processes you want to kill.
cat fullproce |grep Sleep |awk -F " " '{print $2}' > id

for todos_id in `cat ./id`
do
  # Kill each id identified earlier.
  mysqladmin -u root -p"your password" KILL $todos_id ;
done

# Remove files
rm  fullproce
rm id

Эта команда оболочки может помочь убить все процессы сна:

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