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.


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.


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.


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


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.


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


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/


1

Isso deve funcionar no mysql> 5.5

MOSTRAR VARIÁVEIS COMO '% long%';

SET GLOBAL long_query_time = 1;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.