База данных MySQL зависает из-за некоторых запросов.
Как мне найти процессы и убить их?
База данных MySQL зависает из-за некоторых запросов.
Как мне найти процессы и убить их?
Вот решение:
show full processlist;
, чтобы получить идентификатор процесса со статусом и запрос, который вызывает зависание базы данных;KILL <pid>;
, чтобы убить этот процесс.Иногда недостаточно просто убить каждый процесс вручную. Итак, для этого нам нужно пойти с некоторым трюком:
Select concat('KILL ',id,';') from information_schema.processlist where user='user';
, чтобы распечатать все процессы с помощью команды KILL
;|
, снова скопируйте и вставьте все в консоль запроса. НАЖМИТЕ ВВОД. БУМ готово.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
select group_concat(concat('KILL ',id,';') separator ' ')
, чтобы все они попадали в одну строку, которую можно было скопировать и вставить
- person architectonic; 07.08.2018
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;
Вы можете сделать что-то вроде этого, чтобы проверить, запущен ли какой-либо mysql
процесс:
ps aux | grep mysqld
ps aux | grep mysql
Затем, если он запущен, вы можете killall
, используя (в зависимости от того, какие процессы выполняются в данный момент):
killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe
Для MYSQL 8.xx вы можете просто использовать mysqladmin shutdown. Не уверен, работает ли это в более старых версиях.
Пример, где пароль root - SomePass
mysqladmin -u root -pSomePass shutdown
Также вы должны увидеть выключение в /var/log/mysql/error.log