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

База данных MySQL зависает из-за некоторых запросов.

Как мне найти процессы и убить их?


person Ashish Dadhich    schedule 26.05.2017    source источник


Ответы (4)


Вот решение:

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

Иногда недостаточно просто убить каждый процесс вручную. Итак, для этого нам нужно пойти с некоторым трюком:

  1. Войдите в MySQL;
  2. Запустите запрос Select concat('KILL ',id,';') from information_schema.processlist where user='user';, чтобы распечатать все процессы с помощью команды KILL;
  3. Скопируйте результат запроса, вставьте и удалите знак вертикальной черты |, снова скопируйте и вставьте все в консоль запроса. НАЖМИТЕ ВВОД. БУМ готово.
person Ashish Dadhich    schedule 26.05.2017
comment
Этот запрос великолепен! Для тех, кто смотрит на это с легким опытом работы с MySQL, вы также можете заполнить запрос по 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'; - person KareemElashmawy; 09.02.2018
comment
Спасибо за запрос! Я использовал расширенную версию, которая могла сэкономить время на ручное редактирование: select group_concat(concat('KILL ',id,';') separator ' '), чтобы все они попадали в одну строку, которую можно было скопировать и вставить - person architectonic; 07.08.2018
comment
Запрос в порядке, но вы можете убить свой собственный процесс. Я бы просмотрел список идентификаторов процессов перед повторным запуском kill all. - person Patrick.SE; 12.02.2019
comment
Подправил комментарий @architectonic, чтобы сразу получить что-то более легкое для обработки из буфера обмена (даже с надоедливыми открывающими и закрывающими двойными кавычками) SELECT group_concat(concat('KILL ',id,';') SEPARATOR ' \n') AS KILL_EVERYTHING FROM information_schema.processlist; - person leerssej; 10.07.2019

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;
person whistling_marmot    schedule 01.08.2019

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

ps aux | grep mysqld
ps aux | grep mysql

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

killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe    
person Pritam Banerjee    schedule 18.10.2018
comment
OP спрашивает о процессах, запущенных на сервере MySQL. - person reinierpost; 08.07.2019
comment
Хотя это не то, о чем просили, это помогло, поскольку это первый элемент, который Google вернул при поиске того, как убить все процессы mysqld в Linux;) - person IncredibleHat; 30.08.2019

Для MYSQL 8.xx вы можете просто использовать mysqladmin shutdown. Не уверен, работает ли это в более старых версиях.

Пример, где пароль root - SomePass

mysqladmin -u root -pSomePass shutdown

Также вы должны увидеть выключение в /var/log/mysql/error.log

person Greg Long    schedule 14.04.2021