Как я могу отслеживать запросы MySQL на моем сервере Linux, как они происходят?
Например, я хотел бы настроить своего рода прослушиватель, затем запросить веб-страницу и просмотреть все запросы, выполненные механизмом, или просто просмотреть все запросы, выполняемые на рабочем сервере. Как я могу это сделать?
mysql
monitoring
barfoon
источник
источник
Ответы:
Вы можете запустить команду MySQL,
SHOW FULL PROCESSLIST;
чтобы увидеть, какие запросы обрабатываются в любой момент времени, но это, вероятно, не достигнет того, на что вы надеетесь.Вероятно, лучший способ получить историю, не изменяя каждое приложение, использующее сервер, - это использовать триггеры. Вы можете настроить триггеры так, чтобы каждый запуск запроса приводил к тому, что запрос вставлялся в некую таблицу истории, а затем создавал отдельную страницу для доступа к этой информации.
Имейте в виду, что это, вероятно, значительно замедлит все на сервере, добавляя дополнительные
INSERT
в верхней части каждого запроса.Изменить: другой альтернативой является общий журнал запросов , но его запись в плоский файл исключит множество возможностей для гибкости отображения, особенно в режиме реального времени. Если вам нужен простой, простой в реализации способ увидеть, что происходит, включите GQL и затем запустите запуск
tail -f
в файле журнала.источник
Вы можете легко записать каждый запрос в файл журнала:
Делайте ваши запросы (на любой БД). Grep или иным образом изучить
/var/run/mysqld/mysqld.log
Тогда не забудьте
или производительность упадет, и ваш диск заполнится!
источник
tail -f -n300 /var/run/mysqld/mysqld.log
для отслеживания вашего файла журналаSELECT name FROM person where id=?
но я не знаю, чтоid
есть.SHOW VARIABLES
не работает для меня ОднакоSELECT @@GLOBAL.general_log_file;
работает отлично. (MariaDB 10.1.9)SHOW VARIABLES LIKE "log_output%"
. Если установлено значениеtable
, то журналы будут сохраняться в самой базе данных, а таблица -mysql.general_log
не в файловой системе. Вы можете изменить егоfile
сSET GLOBAL log_output = 'file';
Хотя ответ уже принят, я хотел бы представить, что может быть даже самым простым вариантом:
Это будет печатать текущие запросы на вашем экране каждую секунду.
-u
Пользователь mysql, для которого вы хотите выполнить команду как-p
Запрашивать пароль (чтобы вам не приходилось сохранять его в файл или чтобы команда отображалась в истории команд)i
Интервал в секундах.--verbose
флаг, чтобы отобразить полный список процессов, отображая весь запрос для каждого процесса. (Спасибо, нмат )Возможный недостаток: быстрые запросы могут не отображаться, если они выполняются между заданным интервалом. IE: мой интервал установлен в одну секунду, и если есть запрос, который принимает
.02
секунды и выполняется между интервалами, вы не увидите его.Используйте эту опцию предпочтительно, когда вы хотите быстро проверить выполнение запросов без необходимости настройки прослушивателя или чего-либо еще.
источник
--verbose
чтобы увидеть полные запросыЗапустите этот удобный запрос SQL, чтобы увидеть запущенные запросы MySQL. Он может быть запущен из любой среды, которая вам нравится, когда угодно, без каких-либо изменений кода или накладных расходов. Это может потребовать некоторой конфигурации разрешений MySQL, но для меня это просто работает без какой-либо специальной настройки.
Единственный улов заключается в том, что вы часто пропускаете запросы, которые выполняются очень быстро, поэтому это наиболее полезно для более длительных запросов или когда на сервере MySQL есть запросы, для которых выполняется резервное копирование - по моему опыту, это именно то время, когда я хочу просмотреть » живые "запросы.
Вы также можете добавить условия, чтобы сделать его более конкретным только для любого запроса SQL.
Например, показывает все запросы, запущенные в течение 5 секунд или более:
Например, Показать все запущенные ОБНОВЛЕНИЯ:
Для получения полной информации см .: http://dev.mysql.com/doc/refman/5.1/en/processlist-table.html
источник
Я нахожусь в особой ситуации, когда у меня нет разрешений на включение входа в систему, и у меня не будет разрешений на просмотр журналов, если они были включены. Я не мог добавить триггер, но у меня были разрешения на вызов show processlist. Итак, я приложил все усилия и придумал это:
Создайте bash-скрипт с именем "showsqlprocesslist":
Выполните скрипт:
Хвост вывод:
Бинго Банго. Несмотря на то, что он не ограничен, он занимал только 2-4% процессора на коробках, на которых я его запускал. Я надеюсь, что это может кому-то помочь.
источник
strace
Самый быстрый способ увидеть живые запросы MySQL / MariaDB - использовать отладчик. В Linux вы можете использовать
strace
, например:Поскольку существует много экранированных символов, вы можете отформатировать вывод strace, добавив по конвейеру (просто добавив
|
между этими двумя однострочными) выше, следующую команду:Таким образом, вы должны видеть довольно чистые запросы SQL без времени, не касаясь файлов конфигурации.
Очевидно, это не заменит стандартный способ включения журналов, который описан ниже (который включает в себя перезагрузку сервера SQL).
dtrace
Используйте пробники MySQL для просмотра запросов MySQL в реальном времени, не касаясь сервера. Пример скрипта:
Сохраните приведенный выше скрипт в файл (вроде
watch.d
) и запустите:Узнайте больше: Начало работы с DTracing MySQL
Гиббс MySQL Spyglass
Смотрите этот ответ .
бревна
Вот шаги, полезные для разработки предложений.
Добавьте эти строки в свой
~/.my.cnf
или глобальныйmy.cnf
:Пути:
/var/log/mysqld.log
или/usr/local/var/log/mysqld.log
могут также работать в зависимости от ваших прав доступа к файлу.затем перезапустите MySQL / MariaDB с помощью (префикса
sudo
при необходимости):Затем проверьте ваши журналы:
После завершения, изменения
general_log
в0
(так что вы можете использовать его в будущем), а затем удалите файл и перезапустите SQL сервер снова:killall -HUP mysqld
.источник
general_log
запрос MySQL. Он начнет запись в файл, на которыйgeneral_log_file
указывает.Это самая простая установка на машине с Linux Ubuntu, с которой я когда-либо сталкивался. Сумасшедший, чтобы увидеть все запросы в прямом эфире.
Найдите и откройте файл конфигурации MySQL, обычно в Ubuntu /etc/mysql/my.cnf. Найдите раздел «Ведение журнала и репликация».
Просто раскомментируйте переменную «log», чтобы включить ведение журнала. Перезапустите MySQL с помощью этой команды:
Теперь мы готовы начать мониторинг запросов по мере их поступления. Откройте новый терминал и выполните эту команду, чтобы прокрутить файл журнала, скорректировав путь при необходимости.
Теперь запустите ваше приложение. Вы увидите, что запросы к базе данных начинают пролетать в окне вашего терминала. (убедитесь, что на терминале включена прокрутка и история)
ОТ http://www.howtogeek.com/howto/database/monitor-all-sql-queries-in-mysql/
источник
Из командной строки вы можете запустить:
Замените значения [x] вашими значениями.
Или даже лучше:
источник
Проверьте mtop .
источник
mtop (MySQL top) monitors a MySQL server showing the queries which are taking the most amount of time to complete.
mtop.sourceforge.net Иногда это довольно полезно.Я пытался сделать то же самое и собрал воедино решение из разных постов, а также создал небольшое консольное приложение для вывода текста запроса в реальном времени по мере его записи в файл журнала. Это было важно в моем случае, так как я использую Entity Framework с MySQL, и мне нужно иметь возможность проверять сгенерированный SQL.
Шаги для создания файла журнала (некоторое дублирование других постов, все здесь для простоты):
Отредактируйте файл, расположенный по адресу:
Добавьте "log = development.log" в конец файла. (Примечание: сохранение этого файла потребовало от меня запуска моего текстового редактора в качестве администратора).
Используйте MySql Workbench, чтобы открыть командную строку, введите пароль.
Выполните следующее, чтобы включить ведение общего журнала, в котором будут записываться все выполненные запросы:
Это приведет к тому, что запущенные запросы будут записаны в текстовый файл в следующем месте.
Создайте / запустите консольное приложение, которое будет выводить информацию журнала в режиме реального времени:
Источник доступен для скачивания здесь
Источник:
источник
В дополнение к предыдущим ответам, описывающим, как включить общее ведение журнала, мне пришлось изменить еще одну переменную в моей стандартной установке MySql 5.6, прежде чем в журнал был записан какой-либо SQL:
Значением по умолчанию было «НЕТ».
источник
Гиббс MySQL Spyglass
AgilData недавно выпустила Gibbs MySQL Scalability Advisor (бесплатный инструмент самообслуживания), который позволяет пользователям захватывать живой поток запросов для загрузки в Gibbs. Spyglass (который является открытым исходным кодом) будет наблюдать за взаимодействием между вашими MySQL Server и клиентскими приложениями. Никакой реконфигурации или перезапуска сервера базы данных MySQL не требуется (клиент или приложение).
GitHub: AgilData / gibbs-mysql-spyglass
Узнайте больше: захват пакетов MySQL с помощью Rust
Установить команду:
источник