28Jun

Śledzenie zapytań MySQL za pomocą sniffera mysql w systemie 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 do przeanalizowania pakietów MySQL i ich odkodowania. 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 musisz 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 skompilujmy 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ć w dowolne miejsce( gdzieś na ścieżce byłoby użyteczne)

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ć po. .. odfiltrujmy je trochę bardziej, abyśmy mogli uzyskać tylko zapytania, a nie wszystkie nadmiarowe dane.

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

192.168.73.1.2622 & gt;serwer: COM_QUERY: SELECT @@ sql_mode
192.168.73.1.2622 & gt;serwer: COM_QUERY: SET SESSION sql_mode = "
192.168.73.1.2622 & gt;serwer: COM_QUERY: SET NAMES utf8
192.168.73.1.1636 & gt;serwer: COM_QUERY: SELECT @@ SQL_MODE
192.168.73.1.1636 & gt;server: COM_QUERY: POKAŻ PEŁNE KOLUMNY Z `db2842_howto``wp_users`

Ah, teraz mamy. .. różnego rodzaju informacje o zapytaniach, bez konieczności restartowania MySQL.

Oto pełne opcje polecenia:

Zastosowanie: mysqlsniffer [OPCJE] INTERFEJS

OPCJE:
-port N Słuchaj MySQL na porcie numer N( domyślnie 3306)
-verbose Pokaż dodatkowe informacje o pakiecie
-tcp-ctrl Pokaż TCPpakiety kontrolne( 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 pakietu i długość)
-state Wyświetl stan
-v40 MySQLserwer jest wersją 4.0
-dump Zrzuć wszystkie pakiety w formacie
w formacie szesnastkowym -help Wydrukuj ten

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

Jeśli korzystasz z serwera programistycznego, łatwiej byłoby po prostu włączyć zapytaniewycięcie lasu.