Как показать последние запросы, выполненные на MySQL?

373

Есть ли какой-либо запрос/способ показать последние запросы, выполняемые на серверах ВСЕ?

Теги:
logging

9 ответов

615
Лучший ответ

Для тех, кто благословлен MySQL >= 5.1.12, вы можете управлять этим параметром во всем мире во время выполнения:

  • Выполнить SET GLOBAL log_output = 'TABLE';
  • Выполнить SET GLOBAL general_log = 'ON';
  • Взгляните на таблицу mysql.general_log

Если вы предпочитаете выводить в файл вместо таблицы:

  • SET GLOBAL log_output = "FILE"; по умолчанию.
  • SET GLOBAL general_log_file = "/path/to/your/logfile.log";
  • SET GLOBAL general_log = 'ON';

Я предпочитаю этот метод для редактирования файлов .cnf, потому что:

  • вы не редактируете файл my.cnf и, возможно, постоянно включаете ведение журнала
  • вы не ловите рыбу вокруг файловой системы, которая ищет журнал запросов - или, что еще хуже, отвлекается на необходимость идеального назначения. /var/log /var/data/log /opt /home/mysql_savior/var
  • перезапуск сервера оставляет вас там, где вы начали (по умолчанию по умолчанию отключен)
  • Вам не нужно перезапускать сервер и прерывать любые текущие подключения к нему.

Для получения дополнительной информации см. Справочное руководство MySQL 5.1 - Системные переменные сервера - общий_лог

  • 4
    Отличный дизайн интерфейса. В любом случае, таблицы журналов MySQL на самом деле используют движок CSV, поэтому вы можете сделать все, что FlipMcF сказал в ответе о включении входа в таблицу general_log, и иметь tail -f из general_log, например: tail -f / var / lib / mysql / mysql / general_log.CSV
  • 1
    черт возьми, документ MySQL для этого даже не стрелял в параметр таблицы. большое спасибо.
Показать ещё 14 комментариев
37

Вы можете включить общий журнал запросов для такого рода диагностики. Как правило, вы не регистрируете все запросы SELECT на рабочем сервере, но это убийца производительности.

Отредактируйте конфигурацию MySQL, например. /etc/mysql/my.cnf - найдите или добавьте строку, подобную этой

[mysqld]
log = /var/log/mysql/mysql.log

Перезагрузите mysql, чтобы получить это изменение, теперь вы можете

tail -f /var/log/mysql/mysql.log

Hey presto, вы можете смотреть запросы, когда они входят.

  • 4
    general_log_file и general_log в моем my.cnf
  • 0
    Это работает, если вы хотите знать, перезапустите mysql askubuntu.com/questions/82374/how-do-i-start-stop-mysql-server
Показать ещё 2 комментария
11

Вы можете сделать текущую вещь для мониторинга журналов запросов mysql.

Откройте конфигурационный файл mysql my.cnf

sudo nano /etc/mysql/my.cnf

Искать следующие строки под заголовком [mysqld] и раскомментировать эти строки для включения журнала

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Перезагрузите сервер mysql для отражения изменений

sudo service mysql start

Мониторинг журнала сервера mysql со следующей командой в терминале

tail -f /var/log/mysql/mysql.log
9
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
3

1) Если общее ведение журнала mysql включено, мы можем проверить запросы в файле журнала или таблице на основе того, что мы упоминали в конфиге. Проверьте, что включено с помощью следующей команды

mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';

Если нам нужна история запросов в таблице, то

Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';

Взгляните на таблицу mysql.general_log

Если вы предпочитаете выводить в файл:

SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';

2) Мы также можем проверить запросы в файле .mysql_history cat ~/.mysql_history

3

Если mysql binlog включен, вы можете проверить команды, выполняемые пользователем, выполнив следующую команду в консоли linux путем просмотра в каталоге binlog mysql

mysqlbinlog binlog.000001 >  /tmp/statements.sql

включение

[mysqld]
log = /var/log/mysql/mysql.log

или общий журнал будет влиять на производительность mysql

  • 0
    возможно, но больно. более полезно, если вы хотите посмотреть, что произошло в прошлом.
3

Возможно, вы могли бы найти это, посмотрев .

2

Вы можете посмотреть следующее в linux

cd /root

ls -al

vi .mysql_history Это может помочь

  • 6
    Похоже, это будет работать только для официального клиента командной строки mysql и только для запросов, выполняемых пользователем root
  • 0
    Вопрос говорит «весь сервер», что делает этот ответ неверным. Это покажет все запросы, выполненные одним клиентом.
Показать ещё 2 комментария
1

Если вам не хочется менять конфигурацию MySQL, вы можете использовать профилировщик SQL, например "Neor Profile SQL" http://www.profilesql.com.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню