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

есть ли какой-либо запрос/способ показать последние запросы, выполненные на все сервера?

10 ответов


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

  1. выполнить SET GLOBAL log_output = 'TABLE';
  2. выполнить SET GLOBAL general_log = 'ON';
  3. взгляните на стол mysql.general_log

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

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

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

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

для получения дополнительной информации см. MySQL 5.1 справочное руководство-системные переменные сервера-general_log


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

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

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

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

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

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


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

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

sudo nano /etc/mysql/my.cnf

Поиск следующих строк под [mysqld] заголовок и раскомментировать эти строки, чтобы включить log

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

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

sudo service mysql start

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

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

SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;

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 кошка ~/.mysql_history


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

mysqlbinlog binlog.000001 >  /tmp/statements.sql

включение

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

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


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


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

cd /root

ls -al

vi .mysql_history может поможет


прочитав ответ Павла, я продолжил копать для получения дополнительной информации о https://dev.mysql.com/doc/refman/5.7/en/query-log.html

Я нашел действительно полезный код человеком. Вот краткое изложение контекста.

(Примечание: следующий код не мой)

этот сценарий является примером, чтобы сохранить таблицу чистой, которая поможет вам уменьшить размер таблицы. Как и через день, будет около 180k запросов журнала. ( в файле, это будет 30МБ в день)

вам нужно добавить дополнительный столбец (event_unix), а затем вы можете использовать этот скрипт, чтобы сохранить журнал в чистоте... он обновит метку времени в метку времени Unix, удалит журналы старше 1 дня, а затем обновит event_time в метку времени из event_unix... звучит немного запутанно, но работает отлично.

команды для нового столбца:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

очистка скрипт:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

кредит идет к Себастьяну кайзеру (автор оригинального кода).

надеюсь, кто-то найдет его полезным, как и я.


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