Chciałbym zalogować wszystkie instrukcje SQL, które uzyskują dostęp do konkretnej lub listy konkretnych tabel, ale nie do wszystkich tabel.Jak włączyć logowanie tabeli SQL w mysql
Czy to możliwe w MySQL?
Chciałbym zalogować wszystkie instrukcje SQL, które uzyskują dostęp do konkretnej lub listy konkretnych tabel, ale nie do wszystkich tabel.Jak włączyć logowanie tabeli SQL w mysql
Czy to możliwe w MySQL?
Nie - general query log jest jedyną opcją dla zapytań rejestrowania - i to jest serwer szeroki ... chociaż można zalogować się do stolika, a następnie usunąć wyniki dont wymagają
Jest to możliwe przy użyciu Percona Toolkit pt-query-digest .
Jeśli chcesz monitorować wszystkie SELECT
s, UPDATE
s, a JOIN
s dotykania table_one
, table_two
i table_three
na my_database
, działa coś takiego na serwerze bazy danych rade:
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
Monitoruje cały przychodzący ruch bazy danych za pomocą tcpdump
i umieszcza go w narzędziu pt-query-digest
, które następnie próbuje odfiltrować je do zapytań w tych tabelach. Dane wyjściowe będą wyglądać jak wolny dziennik zapytań MySQL.
Musisz dopasować wyrażenie regularne w --filter
argumentu do swoich potrzeb. Tak jak w przypadku większości wyrażeń regularnych, pojawi się wiele skrajnych przypadków. Próbowałem objąć kilka z nich, ale w żadnym razie nie jestem ekspertem, jeśli chodzi o wyrażenia regularne.
Nie jest to idealne rozwiązanie, ale miało to załatwi dla mnie w niektórych sytuacjach, w których za pomocą rejestru ogólnego zapytanie jest zabronione.