Как я могу остановить запущенный MySQL запрос? - PullRequest
237 голосов
/ 24 сентября 2010

Я подключаюсь к mysql из своей оболочки Linux. Время от времени я запускаю слишком большой запрос SELECT. Он печатает и печатает, и я уже знаю, что я не это имел в виду. Я хотел бы остановить запрос.

Удар Ctrl+C (пару раз) полностью убивает mysql и возвращает меня обратно в оболочку, поэтому я должен восстановить соединение

Можно ли остановить запрос, не убивая mysql самого себя?

Ответы [ 7 ]

424 голосов
/ 24 сентября 2010
mysql>show processlist;

mysql> kill "number from first col";
66 голосов
/ 22 декабря 2012

Просто добавить

KILL QUERY **Id** где Id - это идентификатор соединения от show processlist

предпочтительнее, если вы не хотите прерывать соединение, как правило, при запуске из какого-либо приложения.

Для более подробной информации вы можете прочитать MySQL документ здесь

38 голосов
/ 13 июня 2014

Подключиться к mysql

mysql -uusername -p  -hhostname

показать полный список процессов:

mysql> show full processlist;
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| Id      | User   | Host              | db      | Command | Time | State | Info             |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| 9255451 | logreg | dmin001.ops:37651 | logdata | Query   |    0 | NULL  | show processlist |
+---------+--------+-------------------+---------+---------+------+-------+------------------+

Убить конкретный запрос. Здесь id = 9255451

mysql> kill 9255451;

Если вам отказано в разрешении, попробуйте этот SQL:

CALL mysql.rds_kill(9255451)
12 голосов
/ 10 октября 2013

Используйте mysqladmin, чтобы убить безудержный запрос:

Выполните следующие команды:

mysqladmin -uusername -ppassword pr

Затем запишите идентификатор процесса.

mysqladmin -uusername -ppassword kill pid

Безудержный запрос больше не должен потреблять ресурсы.

9 голосов
/ 23 мая 2013

Если у вас есть mysqladmin, вы можете получить список запросов с:

> mysqladmin -uUSERNAME -pPASSWORD pr

+-----+------+-----------------+--------+---------+------+--------------+------------------+
| Id  | User | Host            | db     | Command | Time | State        | Info             |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
| 137 | beet | localhost:53535 | people | Query   | 292  | Sending data | DELETE FROM      |
| 145 | root | localhost:55745 |        | Query   | 0    |              | show processlist |
+-----+------+-----------------+--------+---------+------+--------------+------------------+

Затем вы можете остановить процесс mysql, на котором размещен длительный запрос:

> mysqladmin -uUSERNAME -pPASSWORD kill 137
2 голосов
/ 04 января 2019

Вам нужно выполнить следующую команду, чтобы завершить процесс.

> show processlist;  
> kill query processId;

Параметр Query указывает, что нам нужно завершить процесс команды запроса.

Синтаксис для процесса уничтожения выглядит следующим образом

УБИТЬ [СОЕДИНЕНИЕ | QUERY] processlist_id

Пожалуйста, см. эту ссылку для получения дополнительной информации.

0 голосов
/ 15 декабря 2014

Автор этого вопроса упоминает, что обычно только после того, как MySQL напечатает его вывод, он понимает, что был выполнен неправильный запрос.Как уже отмечалось, в этом случае Ctrl-C не помогает.Тем не менее, я заметил, что прервет текущий запрос - если вы поймаете его до , то любой вывод будет напечатан.Например:

mysql> select * from jos_users, jos_comprofiler;

MySQL начинает создавать декартово произведение из двух приведенных выше таблиц, и вскоре вы заметите, что MySQL не выводил вывод на экран (состояние процесса Отправка данных ) так что вы набираете Ctrl-C:

Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

Ctrl-C также может использоваться для остановки запроса UPDATE.

...