Як знайти список процесів MySQL та вбити ці процеси?


Відповіді:


158

Ось рішення:

  1. Увійти в БД;
  2. Запустіть команду, show full processlist;щоб отримати ідентифікатор процесу із статусом та самим запитом, що призводить до зависання бази даних;
  3. Виберіть ідентифікатор процесу та запустіть команду, KILL <pid>;щоб убити цей процес.

Іноді недостатньо вбити кожен процес вручну. Отже, для цього ми маємо піти з деякою хитрістю:

  1. Увійти в MySQL;
  2. Запустіть запит Select concat('KILL ',id,';') from information_schema.processlist where user='user';на друк усіх процесів за допомогою KILLкоманди;
  3. Скопіюйте результат запиту, вставте та видаліть |знак труби , скопіюйте та вставте все знову на консоль запиту. HIT ENTER. Бум це зроблено .

8
Цей запит чудовий! Для тих , хто дивиться на це з легким досвідом MySQL ви можете також FILER запит, Host, db, Command, Time, State, або Info: SELECT concat('KILL ',id,';') from information_schema.processlist where Command='Sleep'; або SELECT concat('KILL ',id,';') from information_schema.processlist where Time>'300';
KareemElashmawy

6
Дякуємо за запит! Я використав вдосконалену версію, яка може заощадити час на редагування вручну: select group_concat(concat('KILL ',id,';') separator ' ')так що всі вони потрапляють на один рядок, який можна скопіювати
архітектонічний

1
Запит нормальний, але в кінцевому підсумку ви можете вбити власний процес. Я б переглянув список ідентифікаторів процесу перед повторним запуском "вбити всіх".
Патрік.

2
Налаштування коментаря @architectonic, щоб мені одразу було простіше впоратися з буфером обміну (навіть з настирливим відкриттям і закриттям подвійних лапок) SELECT group_concat(concat('KILL ',id,';') SEPARATOR ' \n') AS KILL_EVERYTHING FROM information_schema.processlist;
leerssej

23
select GROUP_CONCAT(stat SEPARATOR ' ') from (select concat('KILL ',id,';') as stat from information_schema.processlist) as stats;

Потім скопіюйте та вставте результат назад у термінал. Щось на зразок:

KILL 2871; KILL 2879; KILL 2874; KILL 2872; KILL 2866;

12

Ви можете зробити щось подібне, щоб перевірити mysql, запущений який-небудь процес чи ні:

ps aux | grep mysqld
ps aux | grep mysql

Тоді, якщо він запущений, ви можете killallза допомогою (залежно від того, які всі процеси запущені в даний час):

killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe    

5
OP запитує про процеси, що виконуються на сервері MySQL.
reinierpost

4
Хоча це не те, про що просили, це допомогло, оскільки це перший елемент, який Google повертає під час пошуку, як вбити всі процеси mysqld в Linux;)
IncredibleHat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.