Registrar todas las consultas en mysql

Resuelto public static asked hace 15 años • 8 respuestas

¿Puedo activar el registro de auditoría en mi base de datos MySQL?

Básicamente quiero monitorear todas las consultas durante una hora y volcar el registro en un archivo.

public static avatar Nov 20 '08 07:11 public static
Aceptado

Además de lo que encontré aquí, ejecutar lo siguiente fue la forma más sencilla de volcar consultas a un archivo de registro sin reiniciar

SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;

se puede apagar con

SET global general_log = 0;
Ram avatar Dec 10 '2013 04:12 Ram

( Nota : para mysql-5.6+ esto no funcionará. Hay una solución que se aplica a mysql-5.6+ si se desplaza hacia abajo o hace clic aquí ).

Si no desea o no puede reiniciar el servidor MySQL, puede proceder así en su servidor en ejecución:

  • Cree sus tablas de registro en la mysqlbase de datos
  CREATE TABLE `slow_log` (
   `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `query_time` time NOT NULL,
   `lock_time` time NOT NULL,
   `rows_sent` int(11) NOT NULL,
   `rows_examined` int(11) NOT NULL,
   `db` varchar(512) NOT NULL,
   `last_insert_id` int(11) NOT NULL,
   `insert_id` int(11) NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `sql_text` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
  CREATE TABLE `general_log` (
   `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
                          ON UPDATE CURRENT_TIMESTAMP,
   `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'
  • Habilitar el registro de consultas en la base de datos
SET global general_log = 1;
SET global log_output = 'table';
  • Ver el registro
select * from mysql.general_log
  • Deshabilitar el registro de consultas en la base de datos
SET global general_log = 0;
Alexandre Marcondes avatar Jan 18 '2013 17:01 Alexandre Marcondes

ACTUALIZACIÓN: YA NO ES VÁLIDA PARA MYSQL 5.6+

Inicie mysql con la opción --log:

mysqld --log=log_file_name

o coloque lo siguiente en su my.cnfarchivo:

log = log_file_name

Cualquiera de los dos registrará todas las consultas en log_file_name.

También puede registrar solo consultas lentas usando la --log-slow-queriesopción en lugar de --log. De forma predeterminada, las consultas que tardan 10 segundos o más se consideran lentas; puede cambiar esto estableciendo long_query_timela cantidad de segundos que una consulta debe tardar en ejecutarse antes de registrarse.

Robert Gamble avatar Nov 20 '2008 00:11 Robert Gamble