убить все запросы - MySQL

17

Иногда во время SNAFU мне приходится бегать kill query xxxxxxxдвадцать или тридцать раз. Любая kill allкоманда, которую я пропускаю?

Из-за того, что я не люблю печатать.

JIStone
источник
перезагрузить сервер?
Дерек Дауни
@DTest - это можно сделать с помощью запроса? У меня нет прямого доступа к серверу.
JIStone
Этот вопрос может пригодиться другим разработчикам и администраторам баз данных (+1) !!!
RolandoMySQLDBA

Ответы:

15

Из командной строки Linux

for PROC_TO_KILL in `mysql -h... -u... -p... -A --skip-column-names -e"SHOW PROCESSLIST" | grep -v "system user" | awk '{print $1}'` ; do mysql -h... -u... -p... -A --skip-column-names -e"KILL QUERY ${PROC_TO_KILL}" ; done

Вы можете изменить опцию grep в заголовке цикла for, чтобы найти конкретного пользователя или конкретную строку в запросе.

Если у вас есть MySQL 5.1, где список процессов находится в INFORMATION_SCHEMA, вы можете сделать это для генерации массовых команд KILL QUERY из клиента mysql:

SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G

Вы можете использовать предложения WHERE для поля INFO, чтобы искать конкретный запрос, поле TIME для длительных запросов или поле DB для конкретной базы данных.

RolandoMySQLDBA
источник
5
mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt';
Query OK, 2 rows affected (0.00 sec)

mysql> source /tmp/a.txt;
Query OK, 0 rows affected (0.00 sec)

http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/

philfreo
источник
Мне действительно нравится этот подход, потому что это может быть сделано в рамках клиента MySQL независимо от Linux или Windows. +1 !!!
RolandoMySQLDBA