Как я могу остановить запущенный запрос MySQL?

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

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

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

Ответ 1

mysql>show processlist;

mysql> kill "number from first col";

Ответ 2

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

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

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

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

Ответ 3

Подключиться к 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)

Ответ 4

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

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

mysqladmin -uusername -ppassword pr

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

mysqladmin -uusername -ppassword kill pid

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

Ответ 5

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

Ответ 6

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