Подтвердить что ты не робот

Как перехватить длинный запрос в инструменте командной строки mysql без выхода из mysql?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

[mysql]
pager
safe-updates

Ответ 2

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

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

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

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

Ответ 3

Из текущих mysql docs:

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

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

Ответ 4

Бит поздно, но, возможно, мой ответ поможет кому-то.

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

  • Идентифицируйте идентификатор процесса этого запроса командой: mysqladmin processlist
  • Предполагая, что Id является 5736748, чтобы убить запрос, который вы должны ввести: mysqladmin kill 5736748

Ответ 5

Используйте mysql --sigint-ignore

и очистить строку, используйте control + U