¿Cómo habilitar el registro de consultas de MySQL?

Resuelto Feng-Chun Ting asked hace 13 años • 16 respuestas

¿Cómo habilito la función MySQL que registra cada declaración de consulta SQL recibida de los clientes y la hora en que se envió esa declaración de consulta? ¿Puedo hacer eso en phpmyadmin o NaviCat? ¿Cómo analizo el registro?

Feng-Chun Ting avatar Jun 25 '11 23:06 Feng-Chun Ting
Aceptado

Primero, recuerde que este archivo de registro puede crecer mucho en un servidor ocupado.

Para mysql <5.1.29:

Para habilitar el registro de consultas, colóquelo en /etc/my.cnfla [mysqld]sección

log   = /path/to/query.log  #works for mysql < 5.1.29

Además, para habilitarlo desde la consola MySQL.

SET general_log = 1;

Ver http://dev.mysql.com/doc/refman/5.1/en/query-log.html

Para MySQL 5.1.29+

Con mysql 5.1.29+, la logopción está en desuso. Para especificar el archivo de registro y habilitar el registro, use esto en my.cnf en la [mysqld]sección:

general_log_file = /path/to/query.log
general_log      = 1

Alternativamente, para activar el registro desde la consola MySQL (también debe especificar la ubicación del archivo de registro de alguna manera o encontrar la ubicación predeterminada):

SET global general_log = 1;

También tenga en cuenta que existen opciones adicionales para registrar solo consultas lentas o aquellas que no utilizan índices.

Gryphius avatar Jun 25 '2011 16:06 Gryphius

Eche un vistazo a esta respuesta a otra pregunta relacionada. Muestra cómo habilitar, deshabilitar y ver los registros en servidores en vivo sin reiniciar.

Registrar todas las consultas en mysql


Aquí hay un resumen:

Si no desea o no puede reiniciar el servidor MySQL, puede proceder así en su servidor en ejecución:

  • Crea tus tablas de registro (ver respuesta )

  • Habilite el registro de consultas en la base de datos (tenga en cuenta que la cadena 'tabla' debe escribirse literalmente y no sustituirse por ningún nombre de tabla. Gracias, Nicholas Pickering ).

SET global general_log = 1;
SET global log_output = 'table';
  • Ver el registro
select * from mysql.general_log;
  • Deshabilitar el registro de consultas en la base de datos
SET global general_log = 0;
  • Borrar registros de consultas sin deshabilitarlos
TRUNCATE mysql.general_log
Alexandre Marcondes avatar Jan 18 '2013 17:01 Alexandre Marcondes

Esto ya estaba en un comentario, pero merece su propia respuesta: Sin editar los archivos de configuración: en mysql, como root, haga

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

No olvides apagarlo después:

SET global general_log = off;
commonpike avatar Apr 03 '2017 13:04 commonpike

Utilizo este método para iniciar sesión cuando quiero optimizar rápidamente diferentes cargas de páginas. Es un pequeño consejo...

Iniciar sesión en una TABLA

SET global general_log = 1;
SET global log_output = 'table';

Luego puede seleccionar desde mi mysql.general_logtabla para recuperar consultas recientes.

Luego puedo hacer algo similar tail -fa mysql.log, pero con más mejoras...

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"

Esto facilita ver mis consultas y puedo intentar reducirlas. Utilizo un intervalo de 8 segundos para recuperar solo consultas ejecutadas en los últimos 8 segundos.

Layke avatar Feb 16 '2014 13:02 Layke

Puede deshabilitar o habilitar el registro de consultas general (que registra todas las consultas) con

SET GLOBAL general_log = 1 # (or 0 to disable)
Jon avatar Jun 25 '2011 17:06 Jon