Publicidad

General Log de MySql - como habilitar el registro de logs


Por Alex el 14/10/2024, Comentar el artículo

Comparte este artículo:      




MySql dispone de mecanismos para registrar lo que pasa por el servidor, registrar todas las consultas que se ejecutan en el servidor MySql.


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).
Un registro sobre todo lo que pasa en nuestro servidor que aporta información muy útil a la hora de depurar y monitorear el comportamiento de MySQL y encontrar posibles problemas.

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

log_output puede tener los valores FILE, TABLE o como en el ejemplo 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';

En este caso el output los mismos valores que arriba.

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

Formato fichero de log de MySql

Fecha del evento, identificador, tipo de consulta, consulta

Y para la tabla se ve así:

Formato de la tabla de log de MySql



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 accedido

Como identificar la base de datos en el log de MySql

Cada 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
/ :-)


Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.