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

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

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

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

 Morgan Tocker02 июл. 2014 г., 18:05
Стоит отметить, что MySQL 5.7 поддерживает время ожидания оператора SELECT на стороне сервера. Подробнее об этом здесь:mysqlserverteam.com/server-side-select-statement-timeouts

Ответы на вопрос(7)

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

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

mysqladmin -uusername -ppassword pr

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

mysqladmin -uusername -ppassword kill pid

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

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

Вам нужно выполнить следующую команду, чтобы убить процесс.

> show processlist;  
> kill query processId;

Параметр Query указывает, что нам нужно убить запрос командного процесса.

Синтаксис для процесса уничтожения выглядит следующим образом

УБИТЬ [СОЕДИНЕНИЕ | QUERY] processlist_id

пожалуйстаобращаться эта ссылка для получения дополнительной информации.

Решение Вопроса
mysql>show processlist;

mysql> kill "number from first col";
 BadHorsie16 мар. 2015 г., 19:05
@Zilverdistel Как вы делаете это в phpMyAdmin?
 Kip23 мар. 2017 г., 20:51
При использовании MySQL в AWS RDS у вас не будет разрешения на запускKILL, но вы можете запустить:CALL mysql.rds_kill(12345)
 DrLightman27 февр. 2017 г., 11:58
Я получаю «ОШИБКА 1094 (HY000): неизвестный идентификатор потока: XXX», где XXX - это идентификатор из списка процессов.
 David B24 сент. 2010 г., 15:42
ноmysql печатает ... я не вижу подсказку
 Lucas Morgan18 апр. 2016 г., 22:23
Как вы делаете это, пока ваша консоль извергает информацию?
 user98400325 июл. 2015 г., 00:31
Это не работает для всех запросов. Они сказали «отправка данных» Вместо этого я использовал запрос на уничтожение <id number no quotes>;
 Zilverdistel24 сент. 2010 г., 15:41
Спасибо, я только знал, как это сделать в phpmyadmin!
 Mugoma J. Okomba13 сент. 2016 г., 15:39
Вы не показываете команду mysql противkill, Стоит отметить, что номера процессов не ОС, аkill относится только к MySQL и ОСkill: mysql> kill <ID>; или же$mysql -uusername -p -hhostname -e 'kill <ID>'
 Scott05 авг. 2013 г., 19:13
Полезный совет, если ваш список процессов прокручивается мимо вашего буфера, это установить пейджер. Просто введите «\ P more» в командной строке. Подробнее об этом совете здесьdbasquare.com/2012/03/28/...
 Ike Walker24 сент. 2010 г., 20:12
Я согласен с этим основным подходом, но я думаю, используяKILL QUERY немного предпочтительнееKILL для этого случая. Таким образом, запрос уничтожается, но не соединение.
 baklarz204824 сент. 2010 г., 15:45
запустить клиент на другом терминале ...

Подключиться к 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)
 Kip23 мар. 2017 г., 20:49
Примечание. Последний запрос необходим при использовании экземпляра AWS RDS.

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

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

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

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

 Uncle Iroh03 июн. 2014 г., 01:25
Вопрос, который у меня возник по этому поводу, вызывает ли соединение только респаун или уничтожение соединений в итоге приводит к тому, что размер пула слишком мал для запуска приложения?

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

Ваш ответ на вопрос