프로덕션 데이터베이스 서버가 있고 쿼리 로깅을 활성화 할 수 없으므로 데이터베이스에 대해 실행되는 쿼리를 어떻게 보십니까?

대답 : 수정 된 네트워크 스니퍼를 사용하여 MySQL 패킷을 구문 분석하고 디코드하십시오. 약간의 컴파일 작업을 수행해야하지만, 그만한 가치가 있습니다. 시도해도되지만 로컬 연결에는 일반적으로 작동하지 않습니다.

먼저, 응용 프로그램이 네트워크 패킷을 스니핑 할 수있게하는 개발 라이브러리 인 libpcap-dev를 설치해야합니다.

sudo apt-get install libpcap-dev

이제 디렉토리를 만들고 소스 코드를 다운로드하여 컴파일 해 봅시다.

mkdir mysqlsniffer

cd mysqlsniffer

wget hackmysql.com/code/mysqlsniffer.tgz

tar xvfz mysqlsniffer.tgz

gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c

이 시점에서 소스 디렉토리에 mysqlsniffer라는 새로운 실행 파일이 생깁니다. 원하는 위치에 복사 할 수 있습니다 (경로 어딘가에 유용 할 것입니다).

mysqlsniffer를 실행하려면, MySQL이 청취하고있는 네트워크 인터페이스를 지정해야한다. 나를 위해 그것은 eth0입니다.

sudo /path/to/mysqlsniffer eth0

많은 양의 물건이 날아 오기 시작합니다. 필터를 조금 더 필터링하여 초과 데이터가 아닌 쿼리를 얻을 수 있습니다.

$ sudo /path/to/mysqlsniffer –no-mysql-hdrs eth0 | grep COM_QUERY

192.168.73.1.2622 > server: COM_QUERY: SELECT @@sql_mode192.168.73.1.2622 > server: COM_QUERY: SET SESSION sql_mode=”192.168.73.1.2622 > server: COM_QUERY: SET NAMES utf8192.168.73.1.1636 > server: COM_QUERY: SELECT @@SQL_MODE192.168.73.1.1636 > server: COM_QUERY: SHOW FULL COLUMNS FROM `db2842_howto`.`wp_users`

아, 이제 우리는 ... 모든 종류의 쿼리 정보를 MySQL을 다시 시작할 필요없이 있습니다.

다음은 명령에 대한 전체 옵션입니다.

사용법 : mysqlsniffer [옵션] 인터페이스

옵션 :-port N 포트 번호 N에서 MySQL 수신 대기 (기본값 3306)-verbose 추가 패킷 정보 표시-tcp-ctrl TCP 제어 패킷 표시 (SYN, FIN, RST, ACK)-net-hdrs 주요 IP 및 TCP 헤더 값 표시-no-mysql-hdrs MySQL 헤더 (패킷 ID 및 길이)를 표시하지 않습니다.상태 표시-v40 MySQL 서버 버전 4.0-dump 모든 패킷을 16 진수로 덤프합니다.-help 이것을 인쇄하십시오

원본 소스 코드 및 추가 정보 :http://hackmysql.com/mysqlsniffer

개발 서버에서 실행중인 경우 쿼리 로깅을 설정하는 것이 더 쉬울 것입니다.

탑 팁 :
댓글 :