Startseite » wie man » Verfolgen Sie MySQL-Abfragen mit mysqlsniffer unter Ubuntu

    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.