¿Cómo habilitar el registro de consultas MySQL?

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

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, coloque esto en /etc/my.cnf en la sección [mysqld]

 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 opción de log está en desuso. Para especificar el archivo de registro y habilitar el registro, use esto en my.cnf en la sección [mysqld] :

 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 buscar la ubicación predeterminada):

 SET global general_log = 1; 

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

Mire esta respuesta a otra pregunta relacionada. Muestra cómo habilitar, deshabilitar y ver los registros en servidores activos sin reiniciar.

Registrar todas las consultas en mysql


Aquí hay un resumen:

Si no quiere o no puede reiniciar el servidor MySQL, puede proceder de esta manera 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’ se debe poner literalmente y no sustituir 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; 

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

Iniciar sesión en una TABLA

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

A continuación, puede seleccionar desde mi tabla mysql.general_log para recuperar consultas recientes.

Entonces puedo hacer algo similar a tail -f en mysql.log, pero con más refinamientos …

 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 hace que sea más fácil ver mis consultas que puedo intentar y reducir. Utilizo un intervalo de 8 segundos para obtener solo las consultas ejecutadas en los últimos 8 segundos.

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

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

No te olvides de apagarlo después.

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

 SET GLOBAL general_log = 1 # (or 0 to disable) 

Hay errores en la versión de MySQL 5.6. Incluso mysqld se muestra como:

  Default options are read from the following files in the given order: C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf 

La configuración real está leyendo en el siguiente orden:

  Default options are read from the following files in the given order: C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf 

Comprueba el archivo: “C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini”

Espero que ayude a alguien.

También quería habilitar el archivo de registro de mysql para ver las consultas y lo he resuelto con las siguientes instrucciones

1 – Vaya a /etc/mysql/mysql.conf.d
2 – abre el mysqld.cnf
y habilite las siguientes líneas

general_log_file = /var/log/mysql/mysql.log
general_log = 1

3 – reinicia el mysql con este comando /etc/init.d/mysql restart
4 – vaya a / var / log / mysql / y revise los registros

En Windows, simplemente puede ir a

 C:\wamp\bin\mysql\mysql5.1.53\my.ini 

Inserta esta línea en my.ini

 general_log_file = c:/wamp/logs/mysql_query_log.log 

El archivo my.ini finalmente se ve así

 ... ... ... socket = /tmp/mysql.sock skip-locking key_buffer = 16M max_allowed_packet = 1M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M basedir=c:/wamp/bin/mysql/mysql5.1.53 log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file log-error=c:/wamp/logs/mysql.log datadir=c:/wamp/bin/mysql/mysql5.1.53/data ... ... ... ... 

para mysql> = 5.5 solo para consultas lentas (1 segundo y más) my.cfg

 [mysqld] slow-query-log = 1 slow-query-log-file = /var/log/mysql/mysql-slow.log long_query_time = 1 log-queries-not-using-indexes 

Para habilitar el registro de consultas en la máquina MAC:

Abra el siguiente archivo:

 vi /private/etc/my.cnf 

Establezca la url del registro de consultas en la sección ‘mysqld’ de la siguiente manera:

 [mysqld] general_log_file=/Users/kumanan/Documents/mysql_query.log 

Pocas máquinas no están registrando la consulta correctamente. Por lo tanto, puede habilitarla desde la consola MySQL.

 mysql> SET global general_log = 1; 

No es exactamente una respuesta a la pregunta porque la pregunta ya tiene excelentes respuestas. Esta es una información secundaria. Habilitar general_log realmente hace mella en el rendimiento de MySQL. Dejé general_log =1 accidentalmente en un servidor de producción y pasé horas averiguando por qué el rendimiento no era comparable a una configuración similar en otros servidores. Luego encontré esto que explica el impacto de habilitar el registro general. http://www.fromdual.com/general_query_log_vs_mysql_performance .

La esencia de la historia, no coloque general_log=1 en el archivo .cnf . En su lugar, use set global general_log =1 por una breve duración solo para iniciar sesión lo suficiente como para averiguar qué está tratando de descubrir y luego desactívelo.

En phpMyAdmin 4.0, vaya a Estado> Monitor. Allí puede habilitar el registro lento de consultas y el registro general, ver un monitor en vivo, seleccionar una parte del gráfico, ver las consultas relacionadas y analizarlas.

Tuve que soltar y volver a crear el registro general en un punto. Durante la recreación, los juegos de caracteres se estropearon y terminé teniendo este error en los registros:

[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'

Por lo tanto, si la respuesta estándar de “verificar para asegurarse de que el registro está activado” no le funciona, verifique que sus campos tengan el conjunto de caracteres correcto.