Menú:
General Query Log es un log que almacena información sobre:
- Cada conexión y desconexión de clientes.
- Cada consulta es ejecutada en el servidor, incluso las consultas que fallan.
- Información de cómo se maneja cada consulta (entrada y salida de datos).
La información se puede guardar en una tabla de la base de datos mysql llamada generla_log o en un fichero de texto.
Activar registro de logs
Por defecto no viene habilitado este registro pero es muy sencillo activarlo desde el fichero de configuración de MySql.Para ello vamos al fichero de configuración normalmente en /etc/mysql/mysql.conf.d/mysqld.cnf en sistemas basados en Debian, en otros sitios podéis encontrarlo como my.cnf o my.ini en Windows
Hay que poner en el fichero de configuración lo siguiente, es posible que estos parámetros estén desactivados.
[mysqld]
general_log_file = /var/log/mysql/query.log
general_log = 1
log_output = FILE,TABLE
Si no queréis activarlo de forma general o no tenéis acceso al log se puede activar de forma temporal en la sesión actual desde el administrador que utilicéis de la siguiente forma.
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE';
Para ver la configuración que tenemos utilizamos las siguientes consultas:
SHOW VARIABLES LIKE 'log_output';
SHOW VARIABLES LIKE 'general_log';
Cómo ver los que guarda el log
Tanto el fichero como la tabla guardan la misma información pero estructura de forma diferente.También se accede de forma diferente, la tabla es mas comoda para ver, filtrar y buscar pero puede ser mas pesada en rendimiento
Estructura de la tabla:
CREATE TABLE `general_log` (
`event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';
Donde:
- event_time: Fecha y hora exacta en que ocurrió el evento.
- user_host: Información sobre el usuario y la máquina que ejecutó la consulta (en el formato usuario@host).
- thread_id: El ID del hilo en el que se ejecutó la consulta, útil para correlacionar eventos.
- server_id: ID del servidor MySQL (importante en configuraciones de replicación).
- command_type: El tipo de comando que fue ejecutado (como Connect, Query, etc.).
- argument: El comando SQL que fue ejecutado o el texto del evento relacionado.
En la tabla con la siguiente consulta podemos ver y buscar información:
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10;
En el fichero se tiene que buscar desde el terminal del servidor con un tail -f fichero.log y utilizando filtros con grep
Cómo funciona el registro de datos
Una vez está activado el log el sistema registra todo lo que pasa por la base de datos de datos ya sean consultas del sistema o externas que acceden a alguna base de datos.El formato del fichero es de texto plano donde se almacena
Fecha del evento, identificador, tipo de consulta, consulta
Y para la tabla se ve así:
Cómo identificar la base de datos
No existe un identificador de base de datos como tal pero se puede llegar a saber por command_type cuando está identificado por Init DB en la parte del argumento pondrá el nombre de la base de datos a la que se ha accedidoCada vez que se inicializa una base de datos y se establece una conexión se le asigna un id en thead_id y con este podemos buscar las consultas relacionadas a esa base de datos.
Otra opción es buscar la base de datos en el campo argument con ‘USE netveloper’ y lo mismo que antes asigna un thead_id
El thead_id no es por base de datos sino por conexión al servidor.
Resumen
- Tanto el archivo como la tabla general_log almacenan la misma información básica: conexiones, consultas, desconexiones, etc.
- El archivo es un formato de texto y, aunque más rápido y más eficiente en términos de rendimiento, es más difícil de consultar y analizar.
- La tabla es un formato estructurado y permite realizar consultas SQL para análisis más complejos, pero tiene un mayor impacto en el rendimiento y requiere gestión en cuanto al tamaño de la tabla.
Aquí cada uno a de ver que es mas optimo para registrar los log o a que se tiene acceso porque a lo mejor no se puede acceder a la configuración de MySql y se tiene que activar los logs por sesión para encontrar y solucionar los problemas.
Y esto es todo, feliz programming
Saludos
Alex
/ :-)