Pregunta

Recientemente actualicé a MySQL 5.1.6 para aprovechar la capacidad de guardar el registro general en una tabla -> es decir, mysql.general_log. Una vez que hice esto, me sorprendió de inmediato cuántas consultas realmente están llegando a nuestro sistema. Tengo alrededor de 40,000 filas en esta tabla de registro general desde la primera hora. No lo he encontrado escrito en los documentos de MySQL sobre si hay un límite de tamaño de tabla de registro general.

¿Hay algún problema para dejar que este registro general crezca a esta tasa?

Si hay un problema de tamaño, ¿cómo lidiar con él?

¿Hay algunas prácticas aceptadas sobre cómo lidiar con un problema de tamaño si hay una?

¿Debo hacer un evento para purgar la tabla y guardar los datos en un archivo de vez en cuando?

¡Muchas gracias por la ayuda!

¿Fue útil?

Solución

La tabla General_Log de forma predeterminada usa el motor CSV, que es literalmente solo un archivo CSV completo en su unidad, pero se puede acceder a través de SQL. Esto significa que su límite de tamaño es el límite de tamaño de los archivos en su sistema de archivos.

Otros consejos

Hago algo como esto para mi archivo de registro. Solo estoy interesado en mantener las últimas 24 horas, pero podría ajustar el evento para crear tablas de archivo, etc. No registrará durante los pocos segundos que lleva el evento ejecutar, pero no me importa.

CREATE EVENT `prune_general_log` ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-18'
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT 'This will trim the general_log table to contain only the past 24 hours of logs.'
DO BEGIN
  SET GLOBAL general_log = 'OFF';
  RENAME TABLE mysql.general_log TO mysql.general_log2;
  DELETE FROM mysql.general_log2 WHERE event_time <= NOW()-INTERVAL 24 HOUR;
  OPTIMIZE TABLE general_log2;
  RENAME TABLE mysql.general_log2 TO mysql.general_log;
  SET GLOBAL general_log = 'ON';
END

Deberías usar una utilidad como mysql-log-rotate http://dev.mysql.com/doc/refman/5.0/en/log-file-maintenance.html Para el archivo de registro giratorio.

No estoy seguro de si esta es la mejor práctica, pero esta fue mi solución:

DATE=$(date +"%Y%m%d%H%M")
mv general_log.CSV general_log.${DATE}.csv  # move the log table file
sudo -u mysql -g mysql touch general_log.CSV  # create a new log table file with correct owner and group
mysql -u root -e "FLUSH TABLE mysql.general_log"  # flush the log table
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top