홈페이지 » 어떻게 » 우분투에서 mysqlsniffer로 MySQL 쿼리 추적하기

    우분투에서 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

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