MySQL-query's volgen met mysqlsniffer op Ubuntu
U hebt een productiedatabaseserver en u kunt query-logboeken niet inschakelen ... dus hoe ziet u de query's die tegen de database worden uitgevoerd??
Het antwoord: gebruik een aangepaste netwerksniffer om de MySQL-pakketten te ontleden en te decoderen. Je zult een beetje moeten compileren, maar het is het waard. Merk op dat dit meestal niet zal werken voor lokale verbindingen, hoewel u van harte welkom bent om het te proberen.
Eerst moet u libpcap-dev installeren, wat de ontwikkelingsbibliotheek is waarmee een toepassing netwerkpakketten kan ruiken.
sudo apt-get install libpcap-dev
Laten we nu een map maken, de broncode downloaden en compileren
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
Op dit punt hebben we een glanzend nieuw uitvoerbaar bestand genaamd mysqlsniffer in onze brondirectory. Je kunt het kopiëren waar je maar wilt (ergens in het pad zou handig zijn)
Als u mysqlsniffer wilt uitvoeren, moet u de netwerkinterface opgeven waarnaar MySQL luistert. Voor mij is het eth0.
sudo / path / to / mysqlsniffer eth0
Heel veel dingen vliegen voorbij ... laten we het wat meer filteren, zodat we alleen de zoekopdrachten kunnen krijgen en niet alle overtollige gegevens.
$ sudo / path / to / mysqlsniffer -no-mysql-hdrs eth0 | grep COM_QUERY
192.168.73.1.2622> server: COM_QUERY: SELECT @@ sql_mode
192.168.73.1.2622> server: COM_QUERY: SET SESSION sql_mode = "
192.168.73.1.2622> server: COM_QUERY: SET NAMES utf8
192.168.73.1.1636> server: COM_QUERY: SELECT @@ SQL_MODE
192.168.73.1.1636> server: COM_QUERY: LAAT VOLLEDIGE KOLOMMEN VAN 'db2842_howto'. 'Wp_users'
Ah, nu zijn we ... allerlei soorten query-informatie, zonder MySQL opnieuw te hoeven opstarten.
Hier zijn de volledige opties voor de opdracht:
Gebruik: mysqlsniffer [OPTIONS] INTERFACE
OPTIES:
-poort N Luister naar MySQL op poortnummer N (standaard 3306)
-uitgebreid Toon extra pakketinformatie
-tcp-ctrl TCP-controlepakketten weergeven (SYN, FIN, RST, ACK)
-net-hdrs Toon belangrijkste IP- en TCP-headerwaarden
-no-mysql-hdrs Geen MySQL-header (pakket-ID en lengte)
-staat Toon staat
-v40 MySQL-server is versie 4.0
-dump Dump alle pakketten in hex
-help Print dit
Originele broncode en meer informatie op:
http://hackmysql.com/mysqlsniffer
Als u op een ontwikkelserver werkt, is het eenvoudiger om logboeken voor query's in te schakelen.