우분투에서 mysqlsniffer로 MySQL 쿼리 추적하기
프로덕션 데이터베이스 서버가 있고 쿼리 로깅을 활성화 할 수 없습니다 ... 그래서 데이터베이스에 대해 실행되는 쿼리를 어떻게 보십니까??
대답 : 수정 된 네트워크 스니퍼를 사용하여 MySQL 패킷을 구문 분석하고 디코드하십시오. 약간의 컴파일 작업을해야하지만, 그만한 가치가있을 것입니다. 이 기능은 로컬 연결에 일반적으로 사용할 수는 없지만 시도해 볼 수는 있습니다..
먼저 libpcap-dev를 설치해야합니다. libpcap-dev는 응용 프로그램이 네트워크 패킷을 스니핑 할 수있게 해주는 개발 라이브러리입니다..
sudo apt-get install libpcap-dev
이제 디렉토리를 만들고 소스 코드를 다운로드하여 컴파일 해 봅시다.
mkdir mysqlsniffer
cd mysqlsniffer
wget hackmysql.com/code/mysqlsniffer.tgz
타르 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> 서버 : COM_QUERY : SELECT @@ sql_mode
192.168.73.1.2622> 서버 : COM_QUERY : 세션 설정 sql_mode = "
192.168.73.1.2622> 서버 : COM_QUERY : 집합 이름 utf8
192.168.73.1.1636> 서버 : COM_QUERY : SELECT @@ SQL_MODE
192.168.73.1.1636> 서버 : COM_QUERY : 'db2842_howto'에서 FULL COLUMNS을 (를) 표시하십시오. 'wp_users'
아, 이제 우리는 ... 모든 종류의 쿼리 정보를 MySQL을 다시 시작할 필요없이.
다음은 명령에 대한 전체 옵션입니다.
사용법 : mysqlsniffer [옵션] 인터페이스
옵션 :
-port N 포트 번호 N에서 MySQL 수신 대기 (기본값 3306)
-자세한 정보 추가 패킷 정보 표시
-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
개발 서버에서 실행중인 경우 쿼리 로깅을 설정하는 것이 더 쉽습니다..