systemadmin.es > DBA > Query log de MySQL (general log)

Query log de MySQL (general log)

En MySQL podemos habilitar un log de queries ejecutadas en el servidor llamado “general log“. Aunque no es muy recomendable tenerlo habilitado normalmente, puede resultar útil en momentos puntuales. Vamos a ver su funcionamiento:

Las variables que controlan el general log son las siguientes:

  • general_log: Indicamos si queremos habilitar o no dicho log
  • general_log_file: Indicamos el path del fichero dónde queremos el log

Mediante SHOW VARIABLES podemos verlos:

mysql> show variables like 'general_log%';
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | OFF                      | 
| general_log_file | /var/log/mysql/query.log | 
+------------------+--------------------------+
2 rows in set (0.00 sec)

También a partir de MySQL 5.1 tenemos que tener en cuenta el valor de “log_output“, ya que podemos indicar que en lugar de un fichero se guarde en una tabla:

mysql> show variables like 'log_out%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  | 
+---------------+-------+
1 row in set (0.00 sec)

Mediante SET GLOBAL podemos habilitar el general log:

mysql> set global general_log=1;
Query OK, 0 rows affected (0.10 sec)

En el fichero veremos como se guardan tanto las queries como las conexiones:

100925 19:19:53	46223 Query	select version()
100925 19:19:57	46223 Quit	
100925 19:20:14	46224 Connect	root@localhost on 
		46224 Query	select @@version_comment limit 1
100925 19:20:16	46224 Query	select version()
100925 19:20:17	46224 Query	select version()
		46224 Query	select version()
100925 19:20:18	46224 Quit	

Por otro lado, tenemos también la variable de sessión sql_log_off, la cual tenemos por defecto a OFF indicando que no deshabilita por defecto el log. Podemos ver su funcionamiento con la siguiente sesión de ejemplo:

mysql> select "sql_log_off en off";
+--------------------+
| sql_log_off en off |
+--------------------+
| sql_log_off en off |
+--------------------+
1 row in set (0.00 sec)

mysql> set session sql_log_off=1;
Query OK, 0 rows affected (0.00 sec)

mysql> select "sql_log_off en on";
+-------------------+
| sql_log_off en on |
+-------------------+
| sql_log_off en on |
+-------------------+
1 row in set (0.00 sec)

En el log quedaría:

100925 19:21:41	46226 Query	select "sql_log_off en off"
100925 19:21:54	46226 Query	set session sql_log_off=1

Por lo que veríamos que se deshabilita el log, pero no las queries que se ejecuten a posteriori. No resulta muy problemática, ya que esta variable únicamente se puede modificar si el usuario tiene el privilegio SUPER.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>