Główna » jak » Śledzenie zapytań MySQL za pomocą mysqlsniffer na Ubuntu

    Śledzenie zapytań MySQL za pomocą mysqlsniffer na Ubuntu

    Masz serwer produkcyjnej bazy danych i nie możesz włączyć rejestrowania zapytań ... tak jak widzisz kwerendy wykonywane względem bazy danych?

    Odpowiedź: użyj zmodyfikowanego sniffera sieciowego, aby przetworzyć pakiety MySQL i je odkodować. Będziesz musiał trochę skompilować, ale będzie warto. Zauważ, że to zwykle nie działa w przypadku połączeń lokalnych, chociaż możesz spróbować.

    Najpierw należy zainstalować bibliotekę libpcap-dev, która umożliwia aplikacji wykrywanie pakietów sieciowych.

    sudo apt-get install libpcap-dev

    Teraz zróbmy katalog, pobierz kod źródłowy i skompiluj go

    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

    W tym momencie mamy nowy, błyszczący plik wykonywalny o nazwie mysqlsniffer w naszym katalogu źródłowym. Możesz go skopiować tam, gdzie chcesz (przydatne byłoby gdzieś na ścieżce)

    Aby uruchomić mysqlsniffer, musisz określić interfejs sieciowy, na którym nasłuchuje MySQL. Dla mnie jest to eth0.

    sudo / path / to / mysqlsniffer eth0

    Mnóstwo rzeczy zaczyna latać ... odfiltrujmy to trochę więcej, więc możemy po prostu uzyskać zapytania, a nie wszystkie nadmiarowe dane.

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

    192.168.73.1.2622> serwer: COM_QUERY: SELECT @@ sql_mode
    192.168.73.1.2622> serwer: COM_QUERY: SET SESSION sql_mode = "
    192.168.73.1.2622> serwer: COM_QUERY: SET NAMES utf8
    192.168.73.1.1636> serwer: COM_QUERY: SELECT @@ SQL_MODE
    192.168.73.1.1636> serwer: COM_QUERY: POKAŻ PEŁNE KOLUMNY Z 'db2842_howto'. 'Wp_users'

    Ach, teraz mamy ... różne rodzaje informacji o zapytaniach, bez konieczności restartowania MySQL.

    Oto pełne opcje polecenia:

    Użycie: mysqlsniffer [OPCJE] INTERFACE

    OPCJE:
    -port N Posłuchaj MySQL na porcie o numerze N (domyślnie 3306)
    -verbose Pokaż dodatkowe informacje o pakiecie
    -tcp-ctrl Pokaż pakiety sterujące TCP (SYN, FIN, RST, ACK)
    -net-hdrs Pokaż główne wartości nagłówków IP i TCP
    -no-mysql-hdrs Nie pokazuj nagłówka MySQL (identyfikator i długość pakietu)
    -stan Pokaż stan
    -v40 Serwer MySQL jest w wersji 4.0
    -dump Zrzuć wszystkie pakiety na hex
    -pomoc Wydrukuj to

    Oryginalny kod źródłowy i więcej informacji na:
    http://hackmysql.com/mysqlsniffer

    Jeśli korzystasz z serwera programistycznego, łatwiej byłoby włączyć rejestrowanie zapytań.