2012-03-13 20 views

Respuesta

6

n - la general query log es su única opción para las consultas de registro - y esto es a nivel de servidor ... aunque se podría registrar en una tabla y luego eliminar los resultados que no requieren

2

Esto es posible utilizando el Kit de herramientas Percona pt-query-digest .

Si desea supervisar todos los SELECT s, UPDATE s, y JOIN s tocar table_one, table_two y table_three en my_database, correr algo como esto en el servidor de base de datos va a hacer el truco:

tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 | 
pt-query-digest --type tcpdump \ 
       --run-time 5s \ 
       --iterations 0 \ 
       --filter '$event->{fingerprint} =~ m/\b(from|join|into)\s+(`?my_database`?\.)`?(table_one|table_two|table_three)`?\b/' \ 
       --output slowlog \ 
       --no-report 

Esto supervisa todo el tráfico de la base de datos entrante utilizando tcpdump y lo canaliza a la herramienta pt-query-digest, que luego intenta filtrarlo a las consultas en esas tablas. La salida se verá algo así como el registro lento de consultas de MySQL.

Deberá ajustar la expresión regular en el argumento --filter para que se ajuste a sus necesidades. Como es el caso con la mayoría de las expresiones regulares, habrá muchos casos extremos. Traté de cubrir algunos de ellos, pero de ninguna manera soy un experto cuando se trata de expresiones regulares.

Esta no es una solución perfecta, pero me ha servido de solución en ciertas situaciones en las que está prohibido el uso del registro general de consultas.

Cuestiones relacionadas