Как включить MySQL Query Log? - PullRequest
232 голосов
/ 25 июня 2011

Как включить функцию MySQL, которая регистрирует каждый оператор SQL-запроса, полученный от клиентов, и время отправки этого запроса? Могу ли я сделать это в phpmyadmin или NaviCat? Как мне проанализировать журнал?

Ответы [ 14 ]

278 голосов
/ 25 июня 2011

Во-первых, Помните, что этот файл журнала может быть очень большим на занятом сервере.

Для mysql <5.1.29: </strong>

Чтобы включить журнал запросов, поместите его в /etc/my.cnf в разделе [mysqld]

log   = /path/to/query.log  #works for mysql < 5.1.29

Также, чтобы включить его из консоли MySQL

SET general_log = 1;

См. http://dev.mysql.com/doc/refman/5.1/en/query-log.html

Для MySQL 5.1.29 +

В mysql 5.1.29+ опция log устарела. Чтобы указать файл журнала и включить ведение журнала, используйте его в my.cnf в разделе [mysqld]:

general_log_file = /path/to/query.log
general_log      = 1

Альтернативно, чтобы включить ведение журнала с консоли MySQL (также необходимо как-то указать местоположение файла журнала или найти местоположение по умолчанию):

SET global general_log = 1;

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

167 голосов
/ 18 января 2013

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

Журнал всех запросов в mysql


Вот резюме:

Если вы не хотите или не можете перезапустить сервер MySQL, вы можете продолжить на своем работающем сервере:

  • Создайте таблицы журналов (см. ответ )

  • Включить ведение журнала запросов в базе данных. (Обратите внимание, что строка «таблица» должна быть буквально вставлена, а не заменена каким-либо именем таблицы. Спасибо Николас Пикеринг )

SET global general_log = 1;
SET global log_output = 'table';
  • Просмотр журнала
select * from mysql.general_log;
  • Отключить ведение журнала запросов в базе данных
SET global general_log = 0;
56 голосов
/ 16 февраля 2014

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

Вход в СТОЛ

SET global general_log = 1;
SET global log_output = 'table';

Затем вы можете выбрать из моей таблицы mysql.general_log, чтобы получить последние запросы.

Затем я могу сделать что-то похожее на tail -f в mysql.log, но с некоторыми уточнениями ...

select * from mysql.general_log 
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> "" 
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
and command_type = "Query"  and argument <> "SET PROFILING=1"

Это облегчает просмотр моих запросов, которые я могу попытаться сократить. Я использую интервал 8 секунд, чтобы получать только запросы, выполненные за последние 8 секунд.

49 голосов
/ 03 апреля 2017

Это уже было в комментарии, но заслуживает своего ответа: Без редактирования файлов конфигурации: в mysql от имени root выполните

SET global general_log_file='/tmp/mysql.log'; 
SET global log_output = 'file';
SET global general_log = on;

Не забудьте потом выключить его.

13 голосов
/ 25 июня 2011

Вы можете отключить или включить общий журнал запросов (который регистрирует все запросы) с помощью

SET GLOBAL general_log = 1 # (or 0 to disable)
6 голосов
/ 21 июня 2017

Я также хотел включить файл журнала MySQL для просмотра запросов, и я решил это с помощью приведенных ниже инструкций

  1. Перейти к /etc/mysql/mysql.conf.d
  2. открыть mysqld.cnf

и включите следующие строки

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
  1. перезапустите MySQL с помощью этой команды /etc/init.d/mysql restart
  2. перейдите на /var/log/mysql/ и проверьте журналы
3 голосов
/ 30 марта 2015

В версии MySQL 5.6 есть ошибка.Даже mysqld показывают как:

    Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf 

Действительно настройки читаются в следующем порядке:

    Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf

Проверьте файл: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 04 апреля 2014

В Windows вы можете просто перейти на

C:\wamp\bin\mysql\mysql5.1.53\my.ini

Вставить эту строку в my.ini

general_log_file = c:/wamp/logs/mysql_query_log.log

my.ini файл наконец-то выглядит следующим образом

...
...
...    
socket      = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log        #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
1 голос
/ 08 мая 2019
// To see global variable is enabled or not and location of query log    
SHOW VARIABLES like 'general%';
// Set query log on 
SET GLOBAL general_log = ON; 
1 голос
/ 22 апреля 2017

Не совсем ответ на вопрос, потому что на этот вопрос уже есть отличные ответы.Это дополнительная информация.Включение general_log действительно сказывается на производительности MySQL.Я случайно оставил general_log =1 на рабочем сервере и потратил часы, чтобы выяснить, почему производительность не сравнима с аналогичной настройкой на других серверах.Затем я обнаружил, что это объясняет влияние включения общего журнала.http://www.fromdual.com/general_query_log_vs_mysql_performance.

Суть истории, не помещайте general_log=1 в файл .cnf.Вместо этого используйте set global general_log =1 на короткое время, чтобы просто войти в систему, чтобы выяснить, что вы пытаетесь выяснить, и затем отключите ее.

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