Como posso ativar o log de consulta lenta do MySQL sem reiniciar o MySQL?

88

Segui as instruções aqui: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/ mas isso parece apenas definir o limite.

Preciso fazer mais alguma coisa, como definir o caminho do arquivo?

De acordo com os documentos do MySQL

Se nenhum valor de file_name for fornecido para --log-slow-queries, o nome padrão é 
host_name-slow.log. O servidor cria o arquivo no diretório de dados, a menos que
um nome de caminho absoluto é fornecido para especificar um diretório diferente. 

Corrida

MOSTRAR VARIÁVEIS

não indica nenhum caminho de arquivo de log e não vejo nenhum arquivo de log de consulta lenta em meu servidor ...

EDITAR

Parece que estou usando a versão 5.0.77 do servidor, então precisava fazer:

SET GLOBAL log_slow_queries = 1;

mas recebo: ERROR 1238 (HY000): a variável 'log_slow_queries' é uma variável somente leitura

Presumo que vou precisar reiniciar o servidor e ter log_slow_queries definido em minha configuração.

mmattax
fonte
5
Por que você não testa isso em uma caixa de desenvolvimento?
Martin,

Respostas:

92

Tente SET GLOBAL slow_query_log = 'ON';e talvezFLUSH LOGS;

Isso assume que você está usando MySQL 5.1 ou posterior. Se você estiver usando uma versão anterior, será necessário reiniciar o servidor. Isso está documentado no Manual do MySQL . Você pode configurar o log no arquivo de configuração ou na linha de comando.

Ian Gregory
fonte
8
FLUSH SLOW LOGS está disponível em 5.5!
Carson Reinke
Também funcionou para mim em 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';funciona conforme o esperado também. FLUSH LOGSnão foi necessário em nenhum dos casos.
rinogo
28

Para consultas lentas na versão <5.1, a seguinte configuração funcionou para mim:

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

Observe também para colocá-lo em [mysqld]parte do arquivo de configuração e reinicie mysqld.

Nitin
fonte
2
É log_slow_queries em vez de log-slow-queries
naomi
6
Além disso, você deve criar o arquivo de log manualmente antes de:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles
1
log_slow_queriesfoi preterido no MySQL 5.1.29 por slow-query-log. O Manual de Referência do MySQL 5.1 tem mais detalhes.
Xeoncross
18

Encontrar log ativado ou não?

SHOW VARIABLES LIKE '%log%';

Defina os registros: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Sivaprabu Ganesan
fonte
7

Manual do MySQL - arquivo de log de consulta lenta

Isso afirma que você pode executar o seguinte para definir o arquivo de log lento (5.1.6 em diante):

set global slow_query_log_file = 'path';

A variável slow_query_log apenas controla se está habilitado ou não.

Martin
fonte
6

Estes funcionam

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

Quebrado na minha configuração 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

Parece que a melhor maneira de fazer isso é definir log_slow_time como muito alto, "desligando" o log de consulta lenta. Reduza o log_slow_time para habilitá-lo. Use o mesmo truque (definido como OFF) para log_queries_not_using_indexes.

mikeytown2
fonte
5

Acho que o problema é ter certeza de que o servidor MySQL tem direitos sobre o arquivo e pode editá-lo.

Se você conseguir que ele tenha acesso ao arquivo, pode tentar configurar:
SET GLOBAL slow_query_log = 1;

Caso contrário, você sempre pode 'recarregar' o servidor após alterar o arquivo de configuração. No Linux é geralmente/etc/init.d/mysql reload

Jonathan
fonte
Eu recebo: ERROR 1193 (HY000): Variável de sistema desconhecida 'slow_query_log'
mmattax
Qual versão do MySQL você está executando?
Ian Gregory
3

Se você deseja habilitar logs de erros gerais e log de erros de consulta lenta na tabela em vez de no arquivo

Para iniciar o registro na tabela em vez do arquivo:

set global log_output = TABLE”;

Para ativar o registro de consulta geral e lenta:

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

Para ver os registros:

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

Para mais detalhes visite este link

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

Dilraj Singh
fonte
1

Isso deve funcionar no mysql> 5.5

MOSTRAR VARIÁVEIS COMO '% long%';

SET GLOBAL long_query_time = 1;

gerard
fonte