Как показать последние запросы, выполненные на 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

Эй, Presto, вы можете наблюдать за запросами по мере их поступления.

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

Вы можете выполнять текущие действия для мониторинга журналов запросов 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

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

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

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

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

mysqlbinlog binlog.000001 >  /tmp/statements.sql

что позволяет

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

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

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

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

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

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

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

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

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

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

cd /root

ls -al

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

Другие вопросы по тегам