10 ответов:
для тех, кто благословлен 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-системные переменные сервера-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]заголовок и раскомментируйте эти строки, чтобы включить журнал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 кошка ~/.mysql_history
Если binlog в базе MySQL включено вы можете проверить команды, выполняемые пользователем, выполнив следующая команда в консоли 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
Я нашел действительно полезный код от человека. Вот краткое изложение контекста.
(Примечание: следующий код не мой)
этот скрипт является примером, чтобы сохранить таблицу чистой, которая поможет вам уменьшить размер таблицы. Как и через день, будет около 180k запросов журнала. ( в файле, это было бы 30 МБ в день)
вам нужно добавить дополнительный столбец (event_unix), а затем вы можете использовать этот скрипт, чтобы сохранить журнал в чистоте... он обновит метку времени в Unix-timestamp, удалит журналы старше 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 .
Comments