Как прервать длинный запрос в инструменте командной строки mysql, не выходя из mysql? - PullRequest
25 голосов
/ 31 января 2009

При отладке операторов SQL, если я случайно выполню запрос с использованием командной строки mysql, которая выдает много результатов (даже если сам запрос выполняется за разумное время), единственный известный мне способ остановить бесконечный поток: выход CTRL-C.

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

Чтобы избежать этого, я начал запускать mysql с опцией - sigint-ignore , чтобы игнорировать CTRL-C.

Теперь я хотел бы прервать вывод этих длинных запросов.

Есть ли комбинация клавиш, которая сделает это?

Ответы [ 5 ]

20 голосов
/ 31 января 2009

Не сочетание клавиш.

Единственный выбор - открыть другой сеанс, использовать Показать список процессов , а затем KILL QUERY тот, который вы хотите прекратить.

Вы также можете использовать инструмент командной строки mysqladmin для ввода этих команд.

В любом случае, вам необходимо войти в систему. Так что это не слишком большое преимущество по сравнению с простым нажатием Ctrl-C.

17 голосов
/ 31 января 2009

Вы можете использовать --pager для передачи вашего вывода на пейджер, такой как less, который даст вам контроль над выводом. Не просто убить его, но и разбивать на страницы, искать и даже сохранять вывод лучше, чем дает окно вашего терминала.

Существует также переключатель --safe-updates или -U, также известный как --i-am-a-dummy, который защищает вас от безусловных update с и delete с, а также автоматически ограничивает выбор до 1000 (можно изменить с помощью select_limit).

Все это можно установить по умолчанию в ~/.my.cnf.

[mysql]
pager
safe-updates
12 голосов
/ 02 февраля 2009

Из текущей документации MySQL:

Начиная с MySQL 5.1.10, печатать Control-C заставляет mysql пытаться убить текущее заявление. Если это не может быть готово, или Control-C набирается снова до того, как заявление убит, MySQL выходы. Ранее Control-C вызывал mysql для выхода во всех случаях.

Поскольку я использовал версию 5.0.67, похоже, что обновление mysql было бы лучшим решением. Однако я принял ответ Шверна, потому что он был быстр в реализации и работал как мечта.

4 голосов
/ 14 мая 2014

Немного поздно, но, возможно, мой ответ кому-нибудь поможет.

Способ уничтожить конкретный запрос MySQL через командную строку:

  1. Определите идентификатор процесса этого запроса с помощью команды: mysqladmin processlist
  2. Предполагая, что Id - 5736748, чтобы завершить запрос, введите: mysqladmin kill 5736748
2 голосов
/ 16 июля 2014

Использование mysql --sigint-ignore

и для очистки линии используйте control + U

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