Это возможно, используя Percona Toolkit pt-query-digest .
Если вы хотите отслеживать все SELECT
с, UPDATE
с и JOIN
с, касаясь table_one
, table_two
и table_three
на my_database
, запустите что-то подобное на своем сервер базы данных сделает свое дело:
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
Он отслеживает весь ваш входящий трафик базы данных, используя tcpdump
, и направляет его в инструмент pt-query-digest
, который затем пытается отфильтровать его до запросов к этим таблицам. Вывод будет выглядеть как медленный журнал запросов MySQL.
Вам необходимо настроить регулярное выражение в аргументе --filter
в соответствии с вашими потребностями. Как и в случае большинства регулярных выражений, будет много крайних случаев. Я попытался охватить некоторые из них, но я ни в коем случае не эксперт, когда дело доходит до регулярных выражений.
Это не идеальное решение, но оно помогло мне в определенных ситуациях, когда использование общего журнала запросов запрещено.