Ответ 1
mysql>show processlist;
mysql> kill "number from first col";
Я подключаюсь к mysql
из своей оболочки Linux. Время от времени я запускаю запрос SELECT
, который слишком велик. Он печатает и печатает, и я уже знаю, что это не то, что я имел в виду. Я хотел бы остановить запрос.
Нажатие Ctrl+C
(пару раз) полностью убивает mysql
и возвращает меня в оболочку, поэтому мне нужно снова подключиться.
Можно ли остановить запрос без самоубийства mysql
?
mysql>show processlist;
mysql> kill "number from first col";
Просто добавьте
KILL QUERY **Id**
где Id - идентификатор соединения из show processlist
является более предпочтительным, если вы не хотите убивать соединение, обычно при запуске из какого-либо приложения.
Для получения дополнительной информации вы можете прочитать mysql doc здесь
Подключиться к 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)
Используйте mysqladmin
, чтобы убить запрос убегания:
Выполните следующие команды:
mysqladmin -uusername -ppassword pr
Затем запишите идентификатор процесса.
mysqladmin -uusername -ppassword kill pid
Беглый запрос больше не должен потреблять ресурсы.
Если у вас есть 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
.