Hemsida » hur » Spåra MySQL-frågor med mysqlsniffer på Ubuntu

    Spåra MySQL-frågor med mysqlsniffer på Ubuntu

    Du har en databassserver för produktion, och du kan inte aktivera sökloggning ... så hur ser du frågorna som körs mot databasen?

    Svaret: Använd ett modifierat nätverkssniffer för att parsa ut MySQL-paketen och avkoda dem. Du måste göra lite kompilering, men det kommer att vara värt det. Observera att det inte brukar fungera för lokala anslutningar, men du är välkommen att försöka.

    Först måste du installera libpcap-dev, vilket är utvecklingsbiblioteket som tillåter en applikation att snyta nätverkspaket.

    sudo apt-get installera libpcap-dev

    Låt oss nu göra en katalog, ladda ner källkoden och kompilera den

    mkdir mysqlsniffer

    cd mysqlsniffer

    wget hackmysql.com/code/mysqlsniffer.tgz

    tjära xvfz mysqlsniffer.tgz

    gcc-O2-lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c

    Vid denna tidpunkt har vi en glänsande ny körbar heter mysqlsniffer i vår källkatalog. Du kan kopiera det var du vill (någonstans i vägen skulle vara användbar)

    För att köra mysqlsniffer måste du ange det nätverksgränssnitt som MySQL lyssnar på. För mig är det et0.

    sudo / väg / till / mysqlsniffer eth0

    Massor av saker börjar flyga med ... låt oss filtrera ut lite mer så att vi bara kan få frågorna och inte alla överflödiga data.

    $ sudo / sökväg / till / 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: Visa fullständiga kolumner från 'db2842_howto'. 'Wp_users'

    Åh, nu är vi ... alla slags frågeinformation, utan att behöva starta om MySQL.

    Här är de fullständiga alternativen för kommandot:

    Användning: mysqlsniffer [OPTIONS] INTERFACE

    ALTERNATIV:
    -port N Lyssna på MySQL på portnummer N (standard 3306)
    -verbose Visa extra paketinformation
    -tcp-ctrl Visa TCP-kontrollpaket (SYN, FIN, RST, ACK)
    -net-hdrs Visa stora IP- och TCP-huvudvärden
    -no-mysql-hdrs Visa inte MySQL-rubrik (paketets ID och längd)
    -state Show state
    -v40 MySQL-servern är version 4.0
    -dump Dump alla paket i hex
    -hjälp Skriv ut detta

    Original källkod och mer information på:
    http://hackmysql.com/mysqlsniffer

    Om du kör på en utvecklingsserver skulle det vara lättare att bara aktivera frågehantering.