특정 테이블의 목록이나 특정 테이블에 액세스하는 모든 SQL 문을 기록하려고하지만 모든 테이블을 기록하지 않습니다.mysql에서 테이블 당 sql 문 로깅을 활성화하는 방법
MySQL에서도 가능합니까?
특정 테이블의 목록이나 특정 테이블에 액세스하는 모든 SQL 문을 기록하려고하지만 모든 테이블을 기록하지 않습니다.mysql에서 테이블 당 sql 문 로깅을 활성화하는 방법
MySQL에서도 가능합니까?
없음 일 - general query log 로깅 쿼리에 대한 유일한 옵션입니다 - 당신이 테이블에 로그인 한 다음 해달라고 결과가 Percona 툴킷의 pt-query-digest 사용이 가능
필요 삭제할 수 있지만,이 ... 전체 서버입니다 .
모든 SELECT
의, UPDATE
의를 모니터링하려는 경우와 JOIN
의 감동 table_one
, 트릭 할 것입니다 데이터베이스 서버에서이 같은 것을 실행 table_two
및 my_database
에 table_three
:
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
인수의 정규 표현식을 조정해야합니다. 대부분의 정규 표현식의 경우와 마찬가지로 많은 경우가 발생합니다. 나는 그들 중 몇 가지를 다루려고했지만 정규 표현식에 관해서는 전문가가 아니다.
이것은 완벽한 해결책은 아니지만 일반적인 쿼리 로그 사용이 금지되는 특정 상황에서 저를 위해 속임수를 사용했습니다.