2010-09-24 3 views
181

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

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

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

+1

Следует отметить, что MySQL 5.7 поддерживает тайм-аут инструкции SELECT на стороне сервера. Больше информации об этом здесь: http://mysqlserverteam.com/server-side-select-statement-timeouts/ –

ответ

319
mysql>show processlist; 

mysql> kill "number from first col"; 
+1

Thanx, я знал, как это сделать в phpmyadmin! – Zilverdistel

+4

, но 'mysql' печатает ... Я не вижу подсказки –

+5

запустить клиент на другом терминале ... – iddqd

54

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

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

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

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

+0

Вопрос, связанный с этим, действительно ли соединение просто возрождается или Неужели убийство соединений в конечном итоге приводит к тому, что размер пула слишком мал для запуска приложения? –

8

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

Использование mysqladmin убить беглого запрос:

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

mysqladmin -uusername -ppassword pr 

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

mysqladmin -uusername -ppassword kill pid 

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

31

Подключение к 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 | 
+---------+--------+-------------------+---------+---------+------+-------+------------------+ 

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

mysql> kill 9255451; 

Если вы получаете доступ запрещен, попробуйте этот SQL:

CALL mysql.rds_kill(9255451) 
+4

Примечание: этот последний запрос требуется при использовании экземпляра AWS RDS. – Kip

0

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

Смежные вопросы