Как остановить выполнение запроса MySQL?
подключиться к mysql
из моей оболочки Linux. Время от времени я запускаю SELECT
запрос, который слишком велик. Он печатает и печатает, и я уже знаю, что это не то, что я имел в виду. Я хотел бы остановить запрос.
удара Ctrl+C
(пару раз) убивает mysql
полностью и возвращает меня в оболочку, поэтому мне нужно снова подключиться.
можно ли остановить запрос, не убивая ?
6 ответов
добавить
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
запрос.