¿Cómo habilito la función MySQL que registra cada declaración de consulta SQL recibida de los clientes y el momento en que se envió esa declaración de consulta? ¿Puedo hacer eso en phpmyadmin o NaviCat? ¿Cómo analizo el registro?
¿Cómo habilito la función MySQL que registra cada declaración de consulta SQL recibida de los clientes y el momento en que se envió esa declaración de consulta? ¿Puedo hacer eso en phpmyadmin o NaviCat? ¿Cómo analizo el registro?
Respuestas:
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 /etc/my.cnf
en 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 de 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 hay opciones adicionales para registrar solo consultas lentas, o aquellas que no usan índices.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
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';
select * from mysql.general_log;
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';
Luego puede seleccionar de mi mysql.general_log
tabla para recuperar consultas recientes.
Entonces puedo hacer algo similar tail -f
en 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 que puedo tratar de recortar. Utilizo un intervalo de 8 segundos para buscar solo 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, do
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
No olvide apagarlo después:
SET global general_log = off;
/tmp/
, puede terminar en algún lugar como/tmp/systemd-private-...-mariadb.service-.../tmp/
Puede deshabilitar o habilitar el registro de consultas generales (que registra todas las consultas) con
SET GLOBAL general_log = 1 # (or 0 to disable)
También quería habilitar el archivo de registro de MySQL para ver las consultas y lo resolví con las instrucciones a continuación.
/etc/mysql/mysql.conf.d
y habilite las siguientes líneas
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
y revisa los registros// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
En Windows simplemente puedes ir a
C:\wamp\bin\mysql\mysql5.1.53\my.ini
Inserte 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
...
...
...
...
Hay un error en la versión 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
Realmente la configuración se lee 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
Verifique el archivo: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Espero que ayude a alguien.
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:
Abre el siguiente archivo:
vi /private/etc/my.cnf
Establezca la URL de registro de consulta 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 que 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 lateral. Habilitar general_log realmente afecta el rendimiento de MySQL. Me fui general_log =1
accidentalmente a un servidor de producción y pasé horas descubriendo 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 poner general_log=1
en el .cnf
archivo. En su lugar, utilice set global general_log =1
durante un breve período de tiempo solo para iniciar sesión lo suficiente como para descubrir lo que está tratando de averiguar y luego apagarlo.
En phpMyAdmin 4.0, vas 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'
Entonces, si la respuesta estándar de "verificar para asegurarse de que el registro está activado" no funciona para usted, verifique que sus campos tengan el conjunto de caracteres correcto.