В Linux существует команда «watch», которая позволяет запускать команды, стоящие после неё с определённым интервалом. Так можно почти в реальном времени отследить значения в выводе. К сожалению, иногда её неудобно или невозможно использовать для просмотра запросов MySQL. Но это ещё можно делать через mysqladmin.
Для просмотра всех исполняемых запросов из очереди в MySQL можно выполнить команду:
SELECT * FROM information_schema.processlist;
Но запросы часто выполняются намного быстрее секунды. Поэтому придётся запускать команду раз десять, чтобы поймать хотя бы один запрос, который находится в процессе выполнения. И чтобы не молотить пальцами по клавиатуре, можно воспользоваться утилитой «mysqladmin», запустив её с параметром «processlist» и некоторыми другими:
mysqladmin -h ip_адрес -P порт -u польз. —verbose -p -i 1 processlist
Разберём все ключи mysqladmin в этой команде:
- -h — задаёт адрес сервера (хоста) с базой данных. По умолчанию «localhost».
- -P — указывает порт сервера, который прослушивается базой данных. По умолчанию «3306».
- -u — содержит имя пользователя базы данных, от имени которого надо выполнять запросы. По умолчанию «root».
- -p — заставляет mysqladmin запоминать введённый пароль, чтобы не переспрашивал. Можно не использовать, если пароль указан в файле «.my.conf», в домашней папке пользователя.
- -i — задаёт интервал в секундах между запросами.
- —verbose — выводит полную информацию о запросе. Иначе SQL строка запроса будет обрезаться, чтобы таблица вошла в терминал по ширине.
При запуске этой команды в терминале будет каждую секунду появляться таблица, из которой можно узнать информацию о каждом запросе в очереди:
- id запроса
- Имя пользователя
- Имя базы данных
- Хост (ip адрес)
- Тип команды
- Время исполнения
- SQL строку запроса
- Размер ответа
Чтобы завершить повисший запрос можно воспользоваться командой kill, которой передаётся id запроса (который узнаётся из первого столбца таблицы «processlist»):
mysqladmin -h ip_адрес -P порт -u польз. kill id_запроса