If-Koubou

Śledzenie zapytań MySQL za pomocą mysqlsniffer na Ubuntu

Śledzenie zapytań MySQL za pomocą mysqlsniffer na Ubuntu (Jak)

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 przeanalizować pakiety MySQL i je odkodować. Będziesz musiał trochę skompilować, ale warto. Zauważ, że nie będzie to zazwyczaj działać dla połączeń lokalnych, chociaż możesz spróbować.

Najpierw należy zainstalować libpcap-dev, która jest biblioteką programistyczną, która pozwala aplikacji na węszenie 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 nieco, abyśmy mogli 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 sterowania TCP (SYN, FIN, RST, ACK)
-net-hdrs Wyświetla główne wartości nagłówków IP i TCP
-no-mysql-hdrs Nie wyświetlaj nagłówka MySQL (identyfikator i długość pakietu)
-state Pokaż stan
-v40 Serwer MySQL jest w wersji 4.0
-dump Zrzuć wszystkie pakiety na hex
-help 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ń.