Как остановить выполнение запроса MySQL?

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

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

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

6 ответов


mysql>show processlist;

mysql> kill "number from first col";

добавить

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

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

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


подключение к mysql

mysql -uusername -p  -hhostname

показать полный processlist:

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)

использовать mysqladmin чтобы убить запрос runaway:

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

mysqladmin -uusername -ppassword pr

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

mysqladmin -uusername -ppassword kill pid

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


Если у вас 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

автор этого вопроса упоминает, что обычно это происходит только после 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 запрос.