¿Cómo habilitar el registro de consultas de MySQL?
¿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?
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.cnf
la [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 log
opció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.
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
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;
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_log
tabla para recuperar consultas recientes.
Luego puedo hacer algo similar tail -f
a 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.
Puede deshabilitar o habilitar el registro de consultas general (que registra todas las consultas) con
SET GLOBAL general_log = 1 # (or 0 to disable)