Verfolgen Sie MySQL-Abfragen mit mysqlsniffer unter Ubuntu
Sie haben einen Produktionsdatenbankserver und können die Abfrageprotokollierung nicht aktivieren. Wie sehen Sie also, dass die Abfragen für die Datenbank ausgeführt werden?
Die Antwort: Verwenden Sie einen modifizierten Netzwerk-Sniffer, um die MySQL-Pakete zu analysieren und zu dekodieren. Sie müssen ein wenig kompilieren, aber es lohnt sich. Beachten Sie, dass dies normalerweise nicht für lokale Verbindungen funktioniert, obwohl Sie dies gerne tun können.
Zunächst müssen Sie libpcap-dev installieren. Hierbei handelt es sich um die Entwicklungsbibliothek, mit der eine Anwendung nach Netzwerkpaketen schnüffeln kann.
sudo apt-get install libpcap-dev
Nun machen wir ein Verzeichnis, laden den Quellcode herunter und kompilieren ihn
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
Zu diesem Zeitpunkt haben wir eine glänzende neue ausführbare Datei namens mysqlsniffer in unserem Quellverzeichnis. Sie können es kopieren, wo immer Sie möchten (irgendwo im Pfad wäre nützlich)
Um mysqlsniffer auszuführen, müssen Sie die Netzwerkschnittstelle angeben, auf der MySQL überwacht. Für mich ist es eth0.
Sudo / Pfad / zu / mysqlsniffer eth0
Eine Menge Zeug fliegt vorbei… lassen Sie uns etwas mehr herausfiltern, damit wir nur die Abfragen und nicht alle überschüssigen Daten erhalten können.
$ sudo / Pfad / zu / 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: VOLLSTÄNDIGE SPALTEN VON 'db2842_howto' anzeigen. 'Wp_users'
Ah, jetzt sind wir… alle Arten von Abfrageinformationen, ohne MySQL neu starten zu müssen.
Hier sind die vollständigen Optionen für den Befehl:
Verwendung: mysqlsniffer [OPTIONEN] SCHNITTSTELLE
OPTIONEN:
-Port N Hören Sie auf MySQL an Portnummer N (Standard 3306).
-verbose Zusätzliche Paketinformationen anzeigen
-tcp-ctrl TCP-Steuerpakete anzeigen (SYN, FIN, RST, ACK)
-net-hdrs Zeigt die wichtigsten IP- und TCP-Header-Werte an
-no-mysql-hdrs MySQL-Header nicht anzeigen (Paket-ID und Länge)
-state Zeigt den Status an
-v40 MySQL Server ist Version 4.0
-dump Alle Pakete in Hex ablegen
-Hilfe Drucken Sie diese
Original-Quellcode und weitere Informationen unter:
http://hackmysql.com/mysqlsniffer
Wenn Sie auf einem Entwicklungsserver laufen, ist es einfacher, die Abfrageprotokollierung zu aktivieren.