Pulsa aquí si quieres saber como activar el log de MySQL en Windows con WAMP.
Vamos a activar el log de MySQL en un servidor Linux, concretamente en Ubuntu 16.04, para que queden registradas todas las consultas realizadas a las bases de datos en un archivo.
Contenidos
Activar log MySQL de forma permanente
Para activar el log de MySQL de manera que siga activado tras reiniciar el servidor, debemos hacerlo editando el fichero de configuración de la MySQL:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
En versiones anteriores el fichero puede ser /etc/mysql/my.cnf.
Buscaremos las siguientes líneas:
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
Y las descomentamos, borrando el # del principio.
Podemos cambiar la ruta y nombre del fichero de log en general_log_file, (si no indica ninguna ruta, sólo el nombre del fichero, lo guardará en /var/lib/mysql) pero si dejamos esa que viene por defecto, el sistema se encargará automaticamente de comprimirlo cada 24 horas y guardar una copia, que se borrará, por defecto, cada 7 días. Esto es muy importante porque el fichero puede llegar a ocupar mucho espacio en disco. Veremos más adelante como modificar este comportamiento.
Para que estos cambios surtan efecto debemos reiniciar el servicio de MySQL:
sudo /etc/init.d/mysql restart
Si queremos activar el log de MySQL sin necesidad de reiniciar el servicio, cosa importante si estamos en un entorno de producción, podemos hacerlo mediante las variables de sistema de MySQL.
Activar log MySQL sin reiniciar (no permanente)
Accedemos al cliente de MySQL:
mysql -u root -p
Mostramos las variables relacionadas con el log:
show variables like 'general_log%';
+------------------+--------------------------+
| Variable_name | Value |
+------------------+--------------------------+
| general_log | OFF |
| general_log_file | /var/log/mysql/mysql.log |
+------------------+--------------------------+
2 rows in set (0.00 sec)
Activamos con esta consulta:
set global general_log=1;
Si general_log_file indica sólo un nombre de archivo, sin ninguna ruta, el log se guardará en /var/lib/mysql/
A tener en cuenta, que de esta manera el log se desactivará al reiniciar el servidor, por lo que puede ser útil para usar de manera puntual.
Si necesitamos activar el log de manera permanente sin tener que reiniciar la MySQL, podemos activarlo primero con las variables de sistema y luego en el fichero de configuración.
Zona horaria de los logs
En los logs, queda registrada la hora en la que se realizó cada consulta. En nuestras pruebas, aparecía 1 hora de retraso porque, por defecto, MySQL utiliza para los logs la hora UTC y en España usamos UTC+1.
Para cambiar esto, le diremos a MySQL que utilice la hora del sistema con la variable log_timestamps:
mysql -u root -p
Comprobamos su valor actual:
show global variables like 'log_timestamps';
Lo cambiamos a system
SET GLOBAL log_timestamps = 'SYSTEM';
Para hacer el cambio de hora permanente, añadimos en /etc/mysql/mysql.conf.d/mysqld.cnf:
log_timestamps = SYSTEM
Modificar tiempo de guardado de logs
Como hemos dicho anteriormente, al guardar los logs en /var/log se comprimen automaticamente cada 24 horas y se eliminan los que tienen más de 7 días. Esto es posible gracias a logrotate.
Vamos a ver como configurar logrotate para que guarde los ficheros durante más tiempo.
Debemos editar el archivo /etc/logrotate.d/mysql-server, que en nuestro caso tiene este contenido:
daily
rotate 7
missingok
create 640 mysql adm
compress
sharedscripts
postrotate
test -x /usr/bin/mysqladmin || exit 0
# If this fails, check debian.conf!
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
# Really no mysqld or rather a missing debian-sys-maint user?
# If this occurs and is not a error please report a bug.
#if ps cax | grep -q mysqld; then
if killall -q -s0 -umysql mysqld; then
exit 1
fi
else
$MYADMIN flush-logs
fi
endscript
}
Vamos a fijarnos en estos dos parámetros:
- daily: por defecto crea un nuevo fichero de log diariamente. Podemos usar también weekly, monthly o yearly
- rotate: indica cuantos ficheros guardará antes de borrar los anteriores. En este caso guardará los 7 últimos.
Así, la configuración por defecto, daily - rotate 7, guarda los logs de los últimos 7 días, 1 log cada día. Si ponemos, por ejemplo, weekly - rotate 52, tendremos los logs del último año, divididos entre 52 logs que guarda cada uno información semanal.
Fuente: MySQL Reference Manual: The General Query Log
Más info: systemadmin
Deja una respuesta