Вы также можете перезапустить mysqld, например,sudo service mysqld restart
philfreo 04
Ответы:
108
Вам нужно убить их одного за другим, MySQL не имеет никакой массивной команды kill. Вы можете написать сценарий на любом языке, например, в PHP вы можете использовать что-то вроде:
$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);}}
если вы не хотите хранить в файле, сохраните в variable
Просто запустите в командной строке
> 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")
это очень плохая идея ... особенно, если у вас установлен движок таблиц в памяти, потому что все данные будут потеряны ... или если вы используете тип движка innodb, потому что он повторит все индексы при перезапуске
HellBaby
8
Также он убивает весь процесс во всех базах данных
Диего Андрес Диас Эспиноза
9
Только для mariaDB
Это не становится проще, просто выполните это в командной строке mysql.
killUSER username;
Это убьет весь процесс под указанным именем пользователя. потому что большинство людей используют одного и того же пользователя для всех целей, это работает!
В какой версии MySQL это существует? Я не вижу это задокументировано в справочнике MySQL 5.7 ; нет никаких доказательств того, что можно убить пользователем: KILL [CONNECTION | QUERY] processlist_id. Я попробовал ваш запрос в MySQL 5.6.34, и это было признано синтаксической ошибкой.
Birchlabs
4
Я пробовал это в приглашении MySQL 5.6.34: mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1 возможно, ваш ответ относится только к MariaDB.
Birchlabs
Это не работает для Mysql. Пожалуйста, прочтите, прежде чем публиковать советы, касающиеся других систем БД ...
RyanH
7
Следующее создаст простую хранимую процедуру, которая использует курсор для уничтожения всех процессов один за другим, кроме процесса, который используется в данный момент:
DROPPROCEDUREIFEXISTS kill_other_processes;
DELIMITER $$CREATEPROCEDURE kill_other_processes()BEGINDECLARE finished INT DEFAULT0;DECLARE proc_id INT;DECLARE proc_id_cursor CURSORFORSELECT id FROM information_schema.processlist;DECLARECONTINUE HANDLER FORNOT FOUND SET finished =1;OPEN proc_id_cursor;
proc_id_cursor_loop: LOOP
FETCH proc_id_cursor INTO proc_id;IF finished =1THEN
LEAVE proc_id_cursor_loop;ENDIF;IF proc_id <> CONNECTION_ID()THENKILL proc_id;ENDIF;END LOOP proc_id_cursor_loop;CLOSE proc_id_cursor;END$$
DELIMITER ;
Его можно запустить с SELECTs, чтобы показать процессы до и после следующего:
Мне недавно нужно было это сделать, и я придумал это
-- GROUP_CONCAT turns all the rows into 1-- @q:= stores all the kill commands to a variableselect@q:=GROUP_CONCAT(CONCAT('KILL ',ID) SEPARATOR ';')FROM information_schema.processlist
-- If you don't need it, you can remove the WHERE command altogetherWHEREuser='user';-- Creates statement and execute it
PREPARE stmt FROM@q;EXECUTE stmt;DEALLOCATE PREPARE stmt;
Таким образом, вам не нужно сохранять в файл и выполнять все запросы с помощью одной команды.
ШАГ 2: Вызовите хранимую процедуру, присвоив ей имя пользователя базы данных, чьи процессы вы хотите убить. Вы можете переписать хранимую процедуру для фильтрации по другим критериям, если хотите.
Привет всем. Не уверен, что вы бот, сообщество или человек, но в любом случае было бы здорово, если бы вы добавили несколько слов, объясняющих, что происходит с этой строкой кода и как она решает проблему?
Феликс Ганьон-Гренье
1
Добавлены -u и -p для предоставления доступа пользователю ... все в порядке!
Лорд Сент-Джон
2
Мы можем сделать это с помощью MySQL Workbench. Просто выполните это:
Самый простой способ - перезапустить сервер mysql. Откройте "services.msc" в Windows Выполнить, выберите Mysql из списка. Щелкните правой кнопкой мыши и остановите службу. Затем запустите снова, и все процессы будут уничтожены, кроме одного (зарезервированное соединение по умолчанию)
sudo service mysqld restart
Ответы:
Вам нужно убить их одного за другим, MySQL не имеет никакой массивной команды kill. Вы можете написать сценарий на любом языке, например, в PHP вы можете использовать что-то вроде:
источник
for i in {994..1145}; do mysql -uroot -p123456 -e "kill $i" ; done
Операция массового убийства экономит время. Сделайте это в самом MySql:
Выполните эти команды
Ссылка
если вы не хотите хранить в файле, сохраните в
variable
Просто запустите в командной строке
источник
Я также искал, как разобрать через MySQL команду SHOW PROCESSLIST и закончил однострочным текстом в оболочке:
Вы можете запустить grep перед командой awk, чтобы отфильтровать конкретное имя базы данных.
источник
Или ... в оболочке ...
Да, я знаю, я ленив, но это тоже может пригодиться.
источник
Только для mariaDB
Это не становится проще, просто выполните это в командной строке mysql.
Это убьет весь процесс под указанным именем пользователя. потому что большинство людей используют одного и того же пользователя для всех целей, это работает!
Я тестировал это на MariaDB, не уверен в mysql.
источник
KILL [CONNECTION | QUERY] processlist_id
. Я попробовал ваш запрос в MySQL 5.6.34, и это было признано синтаксической ошибкой.mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1
возможно, ваш ответ относится только к MariaDB.Следующее создаст простую хранимую процедуру, которая использует курсор для уничтожения всех процессов один за другим, кроме процесса, который используется в данный момент:
Его можно запустить с
SELECT
s, чтобы показать процессы до и после следующего:источник
Мне недавно нужно было это сделать, и я придумал это
Таким образом, вам не нужно сохранять в файл и выполнять все запросы с помощью одной команды.
источник
УБИТЬ ВСЕ ВЫБОРНЫЕ ЗАПРОСЫ
источник
Если у вас нет information_schema:
источник
войдите в Mysql как администратор:
И затем запустите команду:
Вы получите примерно следующее:
Вы увидите полную информацию о различных подключениях. Теперь вы можете отключить спящее соединение, как показано ниже:
источник
Этот фрагмент сработал для меня (сервер MySQL 5.5), чтобы убить все процессы MySQL:
источник
Я бы объединил bash и mysql:
источник
Вот решение, которое вы можете выполнить, не полагаясь на операционную систему:
ШАГ 1. Создайте хранимую процедуру.
ШАГ 2: Вызовите хранимую процедуру, присвоив ей имя пользователя базы данных, чьи процессы вы хотите убить. Вы можете переписать хранимую процедуру для фильтрации по другим критериям, если хотите.
ВЫЗОВ
kill_user_processes('devdba');
источник
источник
Мы можем сделать это с помощью MySQL Workbench. Просто выполните это:
Пример:
Это удалит его.
источник
Самый простой способ - перезапустить сервер mysql. Откройте "services.msc" в Windows Выполнить, выберите Mysql из списка. Щелкните правой кнопкой мыши и остановите службу. Затем запустите снова, и все процессы будут уничтожены, кроме одного (зарезервированное соединение по умолчанию)
источник
источник
Иногда у меня есть несколько зомби-процессов mysql, которые невозможно убить (с помощью MAMP Pro).
Сначала получите список всех процессов mysql:
Затем убейте каждого из них (замените processId первым столбцом в результате предыдущей команды):
источник
Для меня отлично сработало следующее:
источник
Я использовал команду,
flush tables
чтобы убить все неактивные соединения, которые на самом деле были основной проблемой.источник
для языка Python вы можете сделать это так
источник
Если вы используете laravel, то это для вас:
Конечно, вы должны использовать это
use Illuminate\Support\Facades\DB;
после вашего пространства имен.источник
Запрос 1 выберите concat ('KILL', id, ';') из information_schema.processlist, где user = 'username', в outfile '/tmp/a.txt';
Источник запроса 2 a.txt
Это позволит вам уничтожить все запросы в show processlist от конкретного пользователя.
источник