Spor MySQL forespørgsler med mysqlsniffer på Ubuntu
Du har en produktionsdatabase-server, og du kan ikke aktivere forespørgselslogning ... så hvordan ser du, at forespørgsler udføres mod databasen?
Svaret: Brug et modificeret netværkssniffer til at analysere MySQL-pakkerne og afkode dem. Du bliver nødt til at lave lidt kompilering, men det vil være det værd. Bemærk, at dette normalt ikke fungerer for lokale forbindelser, selvom du er velkommen til at prøve.
For det første skal du installere libpcap-dev, som er udviklingsbiblioteket, der gør det muligt for en applikation at snuse netværkspakker.
sudo apt-get install libpcap-dev
Lad os nu lave en mappe, downloade kildekoden og kompilere den
mkdir mysqlsniffer
cd mysqlsniffer
wget hackmysql.com/code/mysqlsniffer.tgz
tjære xvfz mysqlsniffer.tgz
gcc-O2-lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c
På dette tidspunkt har vi en skinnende ny eksekverbar navngivet mysqlsniffer i vores kilde bibliotek. Du kan kopiere den, uanset hvor du vil (et sted i stien ville være nyttigt)
For at køre mysqlsniffer skal du angive den netværksinterface, MySQL lytter til. For mig er det eth0.
sudo / path / til / mysqlsniffer eth0
Masser af ting begynder at flyve ved ... lad os filtrere det lidt mere, så vi kan bare få forespørgsler og ikke alle de overskydende data.
$ sudo / path / til / 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: Vis FULL COLUMNS FROM 'db2842_howto'. 'Wp_users'
Åh, nu er vi ... alle slags forespørgselsoplysninger, uden at skulle genstarte MySQL.
Her er de fulde muligheder for kommandoen:
Anvendelse: mysqlsniffer [OPTIONS] INTERFACE
MULIGHEDER:
-port N Lyt til MySQL på portnummer N (standard 3306)
-verbose Vis ekstra pakkeoplysninger
-tcp-ctrl Vis TCP-kontrolpakker (SYN, FIN, RST, ACK)
-net-hdrs Vis større IP og TCP header værdier
-no-mysql-hdrs Vis ikke MySQL-overskrift (pakke ID og længde)
-tilstand Vis tilstand
-v40 MySQL-serveren er version 4.0
-dump Dump alle pakker i hex
-hjælp Print dette
Original kildekode og flere oplysninger på:
http://hackmysql.com/mysqlsniffer
Hvis du kører på en udviklingsserver, ville det være nemmere at bare aktivere forespørgselslogning.