Как показать последние запросы, выполненные на MySQL? - PullRequest
430 голосов
/ 16 марта 2009

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

Ответы [ 10 ]

722 голосов
/ 24 марта 2009

Для тех, кто благословлен 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

41 голосов
/ 16 марта 2009

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

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

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

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

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

Привет, вы можете смотреть запросы по мере их поступления.

15 голосов
/ 30 марта 2015

Вы можете выполнять текущие действия для мониторинга журналов запросов 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
13 голосов
/ 18 июня 2015
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
7 голосов
/ 26 ноября 2015

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

4 голосов
/ 09 февраля 2014

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

mysqlbinlog binlog.000001 >  /tmp/statements.sql

разрешение

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

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

3 голосов
/ 16 марта 2009

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

2 голосов
/ 26 марта 2018

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

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

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

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

Вам необходимо добавить дополнительный столбец (event_unix), а затем вы можете использовать этот скрипт для поддержания чистоты журнала ... он обновит временную метку в Unix-timestamp, удалит журналы старше 1 дня, а затем обновит event_time в Timestamp из 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';

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

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

2 голосов
/ 12 февраля 2016

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

1 голос
/ 17 апреля 2013

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

cd /root

ls -al

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...