¿Cómo puedo habilitar el registro de consultas lentas de MySQL sin reiniciar MySQL?

88

Seguí las instrucciones aquí: http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/ pero eso parece solo establecer el umbral.

¿Necesito hacer algo más como establecer la ruta del archivo?

Según los documentos de MySQL

Si no se proporciona ningún valor file_name para --log-slow-queries, el nombre predeterminado es 
nombre_host-slow.log. El servidor crea el archivo en el directorio de datos a menos que
se proporciona un nombre de ruta absoluto para especificar un directorio diferente. 

Corriendo

MOSTRAR VARIABLES

no indica ninguna ruta de archivo de registro y no veo ningún archivo de registro de consulta lenta en mi servidor ...

EDITAR

Parece que estoy usando la versión del servidor 5.0.77, así que necesitaba hacer:

SET GLOBAL log_slow_queries = 1;

pero obtengo: ERROR 1238 (HY000): La variable 'log_slow_queries' es una variable de solo lectura

Supongo que voy a necesitar reiniciar el servidor y tener log_slow_queries configurado en mi configuración.

mmattax
fuente
5
¿Por qué no pruebas eso en una caja de desarrollo?
Martin

Respuestas:

93

Prueba SET GLOBAL slow_query_log = 'ON';y tal vezFLUSH LOGS;

Esto supone que está utilizando MySQL 5.1 o posterior. Si está utilizando una versión anterior, deberá reiniciar el servidor. Esto está documentado en el Manual de MySQL . Puede configurar el registro en el archivo de configuración o en la línea de comando.

Ian Gregory
fuente
8
FLUSH SLOW LOGS está disponible en 5.5!
Carson Reinke
También me funcionó en 10.0.36-MariaDB. SET GLOBAL slow_query_log = 'OFF';funciona como se esperaba, también. FLUSH LOGSno fue necesario en ningún caso.
rinogo
28

Para consultas lentas en la versión <5.1, la siguiente configuración funcionó para mí:

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

También tenga en cuenta que debe colocarlo debajo de [mysqld]parte del archivo de configuración y reiniciar mysqld.

Nitin
fuente
2
Son log_slow_queries en lugar de log-slow-queries
naomi
6
Además, debe crear el archivo de registro manualmente antes:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles
1
log_slow_queriesfue obsoleto en MySQL 5.1.29 por slow-query-log. El Manual de referencia de MySQL 5.1 tiene más detalles.
Xeoncross
18

¿Encontrar registro habilitado o no?

SHOW VARIABLES LIKE '%log%';

Establecer los registros: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 
Sivaprabu Ganesan
fuente
6

Estos funcionan

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

Roto en mi configuración 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 la mejor manera de hacer esto es establecer log_slow_time muy alto y así "apagar" el registro de consultas lentas. Disminuya log_slow_time para habilitarlo. Utilice el mismo truco (configurado en OFF) para log_queries_not_using_indexes.

mikeytown2
fuente
5

Creo que el problema es asegurarse de que el servidor MySQL tenga los derechos sobre el archivo y pueda editarlo.

Si puede conseguir que tenga acceso al archivo, puede intentar configurar:
SET GLOBAL slow_query_log = 1;

De lo contrario, siempre puede 'recargar' el servidor después de cambiar el archivo de configuración. En Linux es generalmente/etc/init.d/mysql reload

Jonathan
fuente
Recibo: ERROR 1193 (HY000): Variable de sistema desconocida 'slow_query_log'
mmattax
¿Qué versión de MySQL está ejecutando?
Ian Gregory
3

Si desea habilitar los registros de errores generales y el registro de errores de consulta lenta en la tabla en lugar del archivo

Para comenzar a iniciar sesión en la tabla en lugar del archivo:

set global log_output = “TABLE”;

Para habilitar el registro de consultas general y lento:

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

Para ver los registros:

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

Para más detalles visite este enlace

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

dilraj singh
fuente
1

Esto debería funcionar en mysql> 5.5

MOSTRAR VARIABLES COMO '% long%';

SET GLOBAL long_query_time = 1;

gerard
fuente