Как включить MySQL Query Log?

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

Ответ 1

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

Для mysql < 5.1.29:

Чтобы включить журнал запросов, поместите это в /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;

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

Ответ 2

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

Войти все запросы в MySQL


Вот резюме:

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

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

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

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

Ответ 3

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

Запись в TABLE

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 секунд.

Ответ 4

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

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

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

Ответ 5

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

SET GLOBAL general_log = 1 # (or 0 to disable)

Ответ 6

Я также хотел включить файл журнала 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/ и проверьте логи

Ответ 7

В версии 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"

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

Ответ 8

В 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
...
...
...
...

Ответ 9

для mysql >= 5.5 только для медленных запросов (1 секунда и более) my.cfg

[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes

Ответ 10

Чтобы включить журнал запросов в машине MAC:

Откройте следующий файл:

vi /private/etc/my.cnf

Задайте URL-адрес журнала запросов в разделе "mysqld" следующим образом:

[mysqld]

general_log_file=/Users/kumanan/Documents/mysql_query.log

Немногие машины не регистрируют запрос правильно, поэтому в этом случае вы можете включить его из консоли MySQL

mysql> SET global general_log = 1;

Ответ 11

Не совсем ответ на вопрос, потому что у вопроса уже есть большие ответы. Это дополнительная информация. Включение 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 в течение короткой продолжительности, чтобы достаточно регистрировать, чтобы узнать, что вы пытаетесь выяснить, а затем отключите.

Ответ 12

В phpMyAdmin 4.0 вы перейдете в Status > Monitor. Там вы можете включить журнал медленных запросов и общий журнал, посмотреть живой монитор, выбрать часть графика, просмотреть связанные запросы и проанализировать их.

Ответ 13

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

[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'

Итак, если стандартный ответ "Проверить, чтобы журнал был включен" не работает для вас, убедитесь, что ваши поля имеют правильный набор символов.

Ответ 14

// 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;