Problema con Base de Datos

Alkatelmo

Actualmente me encuentro desarrollando una base de datos en mysql, necesito almacenar en una base de datos LOG todas las acciones sobre la BD, esto lo he conseguido mediante el uso de triggers. Necesitaría también almacenar en dicha tabla todas las consultas SELECT que le haga a la BD, con trigger ya se que es imposible ya que solo se disparan sobre INSERT, UPDATE y DELETE. ¿Alguien sabe como podría solucionar esto?

Muchas gracias

Josepanaero

¿No sería más sencillo usar los propios logs que te genera la base de datos? Me refiero a que puedes configurar MySQL para que te genere logs automáticamente. Hasta donde yo sé, te los genera en archivos de texto, pero supongo que si necesitas guardarlos en una tabla o base de datos siempre puedes programar un parser que lea los logs y los inserte en la base de datos.

Un saludo.

Alkatelmo

si, pero eso me genera en el log muchisimas más cosas a parte de la consulta que he realizado...

1 respuesta
Kaoticbcn

#3 Puedes filtrarlo, te pongo un ejemplo:

select * from mysql.general_log 
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> "" 
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
and command_type = "Query" and argument <> "SET PROFILING=1"
Alkatelmo

he conseguido filtrarlo! ahora el problema lo tengo en que necesito llevarme lo filtrado a otra tabla... pero tengo un cacho problema! No puedo hacer un trigger en la tabla general_log! Quiero que cada vez que haya una inserción en general_log compruebe si cumple la condición y se lo lleve pero me dice que no puedo hacer un trigger en base de datos del sistema!

Edit: Lo he conseguido creando un evento que se ejecuta cada minuto que compruebe lo que haya y ne haga el volcado! no se si es muy correcto, pero funciona!

Usuarios habituales

  • Alkatelmo
  • Kaoticbcn
  • Josepanaero