знищити всі запити - MySQL


17

Іноді під час SNAFU мені доводиться бігати kill query xxxxxxxдвадцять-тридцять разів. Якоїсь kill allкоманди мені не вистачає?

За рахунок того, як мені не подобається вводити текст.


перезапустити сервер?
Дерек Дауні

@DTest - це можна зробити із запитом? У мене немає прямого доступу до сервера.
JIStone

Це питання, яке може стати в нагоді іншим розробникам та DBA (+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 проти конкретної бази даних.


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/


Мені справді подобається такий підхід, тому що його можна здійснити в межах клієнта mysql незалежно від Linux або Windows. +1 !!!
RolandoMySQLDBA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.