log_output - mysql logging queries
¿Cómo mostrar las últimas consultas ejecutadas en MySQL? (10)
¿Hay alguna consulta / forma de mostrar las últimas consultas ejecutadas en TODOS los servidores?
1) Si el registro de mysql general está habilitado, podemos verificar las consultas en el archivo de registro o en la tabla según lo que hemos mencionado en la configuración. Compruebe lo que está habilitado con el siguiente comando
mysql> show variables like ''general_log%'';
mysql> show variables like ''log_output%'';
Si necesitamos consultar el historial en la tabla entonces
Execute SET GLOBAL log_output = ''TABLE'';
Execute SET GLOBAL general_log = ''ON'';
Echa un vistazo a la tabla mysql.general_log
Si prefieres dar salida a un archivo:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = ''ON'';
2) También podemos verificar las consultas en el archivo .mysql_history cat ~ / .mysql_history
Después de leer la respuesta de Paul, seguí buscando más información en https://dev.mysql.com/doc/refman/5.7/en/query-log.html
Encontré un código realmente útil por una persona. Aquí está el resumen del contexto.
(Nota: el siguiente código no es mío)
Este script es un ejemplo para mantener la tabla limpia, lo que le ayudará a reducir el tamaño de la tabla. Como después de un día, habrá alrededor de 180k consultas de registro. (en un archivo, sería 30MB por día)
Debe agregar una columna adicional (event_unix) y luego puede usar este script para mantener limpio el registro ... actualizará la marca de tiempo en una marca de tiempo de Unix, eliminará los registros anteriores a 1 día y luego actualizará la hora de evento en la marca de tiempo de event_unix ... suena un poco confuso, pero está funcionando muy bien.
Comandos para la nueva columna:
SET GLOBAL general_log = ''OFF'';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = ''ON'';
Script de limpieza:
SET GLOBAL general_log = ''OFF'';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = ''ON'';
El crédito es para Sebastian Kaiser (escritor original del código).
Espero que alguien lo encuentre útil como yo lo hice.
Para aquellos bendecidos con MySQL> = 5.1.12, puede controlar esta opción globalmente en tiempo de ejecución:
- Ejecute
SET GLOBAL log_output = ''TABLE'';
- Ejecute
SET GLOBAL general_log = ''ON'';
- Echa un vistazo a la tabla
mysql.general_log
Si prefiere generar un archivo en lugar de una tabla:
-
SET GLOBAL log_output = "FILE";
el predeterminado -
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
-
SET GLOBAL general_log = ''ON'';
Prefiero este método a editar archivos .cnf porque:
- no estás editando el archivo
my.cnf
y potencialmente activando permanentemente el registro - no está buscando el sistema de archivos buscando el registro de consultas, o lo que es peor, distraído por la necesidad del destino perfecto.
/var/log /var/data/log
/opt /home/mysql_savior/var
- No es necesario reiniciar el servidor e interrumpir las conexiones actuales con él.
- reiniciar el servidor te deja donde empezaste (el registro está desactivado por defecto)
Para obtener más información, consulte el Manual de referencia de MySQL 5.1 - Variables del sistema del servidor - general_log
Puede habilitar un registro de consulta general para ese tipo de diagnóstico. En general, no registra todas las consultas SELECT en un servidor de producción, sin embargo, es un asesino de rendimiento.
Edite su configuración de MySQL, por ejemplo, /etc/mysql/my.cnf - busque, o agregue, una línea como esta
[mysqld]
log = /var/log/mysql/mysql.log
Reinicie mysql para recoger ese cambio, ahora puede
tail -f /var/log/mysql/mysql.log
Hey presto, puedes ver las consultas a medida que entran.
Puedes hacer lo que sea necesario para monitorear los registros de consultas de mysql.
Abra el archivo de configuración mysql my.cnf
sudo nano /etc/mysql/my.cnf
Busque las siguientes líneas bajo el encabezado [mysqld]
y descomente estas líneas para habilitar el registro
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Reinicie su servidor mysql para reflejar cambios
sudo service mysql start
Supervisar el registro del servidor mysql con el siguiente comando en la terminal
tail -f /var/log/mysql/mysql.log
Puedes mirar lo siguiente en linux.
cd /root
ls -al
vi .mysql_history
puede ayudar
Si mysql binlog está habilitado, puede verificar los comandos ejecutados por el usuario ejecutando el siguiente comando en la consola de linux navegando al directorio mysql binlog
mysqlbinlog binlog.000001 > /tmp/statements.sql
habilitando
[mysqld]
log = /var/log/mysql/mysql.log
o el registro general tendrá un efecto en el rendimiento de mysql
Si no tiene ganas de cambiar la configuración de MySQL, puede usar un generador de perfiles SQL como "Neor Profile SQL" http://www.profilesql.com .
Tal vez podría descubrirlo mirando el registro de consultas .
SELECT * FROM mysql.general_log WHERE command_type =''Query'' LIMIT total;