sábado, abril 05, 2014

Controlar el registro de consultas de MySQL (II)

En la primera entrada sobre el control del registro de consultas de MySQL describía las variables que controlan la configuración del mismo.Ahora voy a explicar como consultarlas y modificarlas para configurar el registro de consultas según queramos.

Una vez conectado a través de la herramienta de línea de comandos a un servidor MySQL se puede ver cual es la configuración actual del registro de consultas a través de la siguiente consulta:

mysql> select @@general_log,@@general_log_file,@@Log_output;
+---------------+--------------------+--------------+
| @@general_log | @@general_log_file | @@Log_output |
+---------------+--------------------+--------------+
|             0 | /tmp/mysql.log     | FILE         |
+---------------+--------------------+--------------+
1 row in set (0.00 sec)
En este caso:
  • El registro general está desactivado.
  • El fichero de registro es /tmp/mysql.log.
  • La salida de los registros es un fichero FILE.

Si se quiere activar el log general, en una configuración com la anterior, bastaría con introducir la orden:

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

Se puede configurar el registro de consultas para que almacene la información en una tabla de la base de datos. Esta tabla es fija , se llama general_log y está en la base de datos mysql. La estructura de la misma puede consultarse con la siguiente orden:

mysql> desc mysql.general_log;
+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
--------------+------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext       | NO   |     | NULL              |                             |
| thread_id    | int(11)          | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned | NO   |     | NULL              |                             |
| command_type | varchar(64)      | NO   |     | NULL              |                             |
| argument     | mediumtext       | NO   |     | NULL              |                             |
+--------------+------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)

Las siguientes órdenes activarían el registro a la tabla mysql.general_log
mysql> set global general_log=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
mysql> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)
Ahora con la siguiente orden se puede ver los resultados almacenados en dicha tabla de registros:
mysql> select * from mysql.general_log;
+---------------------+---------------------------+-----------+-----------+--------------+----------------------------------------------------------------------------------------------------------------------+
| event_time          | user_host                 | thread_id | server_id | command_type | argument                                                                                                             |
+---------------------+---------------------------+-----------+-----------+--------------+----------------------------------------------------------------------------------------------------------------------+
| 2014-04-05 00:43:14 | root[root] @  [127.0.0.1] |    109942 |         0 | Query        | select @@version                                                                                                     |
| 2014-04-05 00:43:16 | root[root] @  [127.0.0.1] |    109942 |         0 | Query        | set global general_log=0
+---------------------+---------------------------+-----------+-----------+--------------+----------------------------------------------------------------------------------------------------------------------+

Todas estas operaciones suponen que la versión del servidor MySQL que se está usando es al menos la 5.1.12

Referencias

No hay comentarios: