Как я могу включить журнал медленных запросов MySQL без перезапуска MySQL?

88

Я выполнил инструкции здесь: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/, но это, похоже, только устанавливает порог.

Мне нужно что-то еще, например, установить путь к файлу?

Согласно документам MySQL

Если для --log-slow-questions не указано значение file_name, по умолчанию используется имя 
имя_хоста-slow.log. Сервер создает файл в каталоге данных, если только
дается имя абсолютного пути для указания другого каталога. 

Бег

ПОКАЗАТЬ ПЕРЕМЕННЫЕ

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

РЕДАКТИРОВАТЬ

Похоже, я использую сервер версии 5.0.77, поэтому мне нужно было сделать:

УСТАНОВИТЬ ГЛОБАЛЬНЫЙ log_slow_queries = 1;

но я получаю: ОШИБКА 1238 (HY000): переменная log_slow_queries предназначена только для чтения.

Я предполагаю, что мне нужно будет перезагрузить сервер и в моей конфигурации установить log_slow_queries?

mmattax
источник
5
Почему бы вам не протестировать это на коробке для разработки?
Мартин

Ответы:

93

Попробуйте SET GLOBAL slow_query_log = 'ON';и возможноFLUSH LOGS;

Предполагается, что вы используете MySQL 5.1 или новее. Если вы используете более раннюю версию, вам необходимо перезапустить сервер. Это описано в Руководстве по MySQL . Вы можете настроить журнал либо в файле конфигурации, либо в командной строке.

Ян Грегори
источник
8
FLUSH SLOW LOGS доступен в версии 5.5!
Carson Reinke
Также у меня работал на 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';работает, как ожидалось. FLUSH LOGSв любом случае не было необходимости.
rinogo 02
28

Для медленных запросов на версии <5.1 у меня работала следующая конфигурация:

log_slow_queries=/var/log/mysql/slow-query.log
long_query_time=20
log_queries_not_using_indexes=YES

Также обратите внимание, чтобы поместить его в [mysqld]часть файла конфигурации и перезапустить mysqld.

Нитин
источник
2
Это log_slow_queries, а не log-slow-
questions
6
Кроме того, вам нужно создать файл журнала вручную, прежде чем:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Чарльз
1
log_slow_queriesустарел в MySQL 5.1.29 пользователем slow-query-log. MySQL 5.1 Справочное руководство имеет более подробную информацию.
Xeoncross
18

Находить журнал включенным или нет?

SHOW VARIABLES LIKE '%log%';

Установите журналы: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Сивапрабу Ганешан
источник
6

Эти работы

SET GLOBAL LOG_SLOW_TIME = 1;
SET GLOBAL LOG_QUERIES_NOT_USING_INDEXES = ON;

Сломан на моей настройке 5.1.42

SET GLOBAL LOG_SLOW_QUERIES = ON;
SET GLOBAL SLOW_QUERY_LOG = ON;
set @@global.log_slow_queries=1;

http://bugs.mysql.com/bug.php?id=32565

Похоже, что лучший способ сделать это - установить очень большое значение log_slow_time, таким образом «отключив» журнал медленных запросов. Уменьшите log_slow_time, чтобы включить его. Используйте тот же прием (установите значение OFF) для log_queries_not_using_indexes.

mikeytown2
источник
5

Я думаю, проблема в том, чтобы убедиться, что сервер MySQL имеет права на файл и может его редактировать.

Если вы можете получить доступ к файлу, вы можете попробовать установить:
SET GLOBAL slow_query_log = 1;

Если нет, вы всегда можете «перезагрузить» сервер после изменения файла конфигурации. В Linux это обычно/etc/init.d/mysql reload

Джонатан
источник
Я получаю: ОШИБКА 1193 (HY000): неизвестная системная переменная slow_query_log
mmattax
Какая версия MySQL у вас установлена?
Ян Грегори
3

Если вы хотите включить общие журналы ошибок и журнал ошибок медленного запроса в таблице вместо файла

Чтобы начать регистрацию в таблице вместо файла:

set global log_output = “TABLE”;

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

set global general_log = 1;
set global slow_query_log = 1;

Для просмотра журналов:

select * from mysql.slow_log;
select * from mysql.general_log;

Для получения более подробной информации посетите эту ссылку

http://easysolutionweb.com/technology/mysql-server-logs/

Дилрадж Сингх
источник
1

Это должно работать на mysql> 5.5

ПОКАЗАТЬ ПЕРЕМЕННЫЕ, КАК "% long%";

УСТАНОВИТЬ ГЛОБАЛЬНЫЙ long_query_time = 1;

Джерард
источник