Cómo activar y visualizar el log de MySQL

En ocasiones no sabemos lo que MySQL hace por debajo. No sabemos si ha llegado a lanzarse la consulta  o qué error está dando porque no estamos capturando la excepción en la aplicación que estamos desarrollando.

La alternativa: activar y visualizar el log de MySQL.

Escribe las siguientes secuencias entrando en mysql desde consola.

Primero entra en mysql:

mysql -p

Luego activa la tabla de log de mysql:

set global general_log=ON

Pasos básicos: veamos la tabla general_log:

mysql> describe 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.07 sec)

Así que esta tabla la puedes utilizar como una tabla común del esquema «mysql». Ejemplos:

Si deseamos encontrar las últimas llamadas a mysql. 

select * from mysql.general_log order by event_time desc limit 5;

Si deseamos buscar por una IP concreto que ha lanzado la llamada a esa base de datos:


select * from mysql.general_log where user_host like '%192.168.%' order by event_time desc limit 5;

OJO! Esta tabla crece y crece sin parar. Es recomendable desactivarla


set global general_log=OFF

y de vez en cuando limpiarla:


truncate table mysql.general_log;

Toda ayuda para ver los errores es poca! Espero os sea de utilidad

Agradecimientos a @rcasas

mysqldump: Got error: 1045: Access denied for user »@’%’ (using password: YES) when using LOCK TABLES

Este error puede dar en caso de volcados de datos de mysql con el comando desde consola mysldump. En concreto:

mysqldump   -u <nombreDelUsuario> -h <IPDelServidor> -p <nombreDeLaBaseDeDatosAVolcar> backups/2012_11_30/<NombreDelFicheroDondeQuedanLosDatos>.sql

Resultado por pantalla:

mysqldump: Got error: 1045: Access denied for user ‘asist’@’%’ (using password: YES) when using LOCK TABLES

Más datos: el usuario ‘asist’ ya estaba dado de alta y con permisos. grant all….

¿Entonces?

En foros no conseguí solucionar el error. En uno comentaba apagar mysql y reiniciar, cosa que seguía sin funcionar.

Solución encontrada!

Añadir a mysqldump –single-transaction

mysqldump  –single-transaction  -u <nombreDelUsuario> -h <IPDelServidor> -p <nombreDeLaBaseDeDatosAVolcar> backups/2012_11_30/<NombreDelFicheroDondeQuedanLosDatos>.sql

Si la base de datos está en producción. Esta no es una buena solución. Se perderán todos los datos que en el momento del volcado se estén manipulando.

Cualquier comentario/sugerencia/mejora será de agradecer!! saludos!!

** Esta entrada tiene muchas visitas, por favor si no comentáis no sé si os ha servido, si está obsoleto, si funciona o qué, gracias!! **