В 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_запроса