Как перехватить длинный запрос в инструменте командной строки mysql без выхода из mysql?
При отладке операторов SQL, если я случайно выполняю запрос с использованием командной строки mysql, которая выводится с множеством результатов (даже если сам запрос выполняется в разумные сроки), единственный способ, которым я знаю, остановить бесконечный поток выход - CTRL-C.
К сожалению, это возвращает меня в оболочку, заставляя меня входить в систему и снова выбирать базу данных.
Чтобы этого избежать, я начал запускать mysql с опцией -sigint-ignore, поэтому CTRL-C игнорируется.
Теперь мне нужен способ прервать вывод этих длинных запросов.
Есть ли комбинация клавиш, которая сделает это?
Ответы
Ответ 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