Ś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ń.