Me gustaría registrar todas las sentencias SQL que acceden a una tabla específica o una lista de tablas específicas, pero no TODAS las tablas.Cómo habilitar el registro de sentencias de sql de tabla en mysql
¿Esto es posible incluso en MySQL?
Me gustaría registrar todas las sentencias SQL que acceden a una tabla específica o una lista de tablas específicas, pero no TODAS las tablas.Cómo habilitar el registro de sentencias de sql de tabla en mysql
¿Esto es posible incluso en MySQL?
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
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.