Page d'accueil » comment » Suivre les requêtes MySQL avec mysqlsniffer sur Ubuntu

    Suivre les requêtes MySQL avec mysqlsniffer sur Ubuntu

    Vous avez un serveur de base de données de production et vous ne pouvez pas activer la journalisation des requêtes… Alors, comment voyez-vous les requêtes en cours d'exécution sur la base de données?

    La réponse: utilisez un sniffer de réseau modifié pour analyser les paquets MySQL et les décoder. Vous devrez faire un peu de compilation, mais ça en vaudra la peine. Notez que cela ne fonctionnera généralement pas pour les connexions locales, même si vous pouvez essayer.

    Tout d’abord, vous devez installer libpcap-dev, qui est la bibliothèque de développement qui permet à une application de détecter les paquets réseau..

    sudo apt-get installez libpcap-dev

    Créons maintenant un répertoire, téléchargez le code source et compilez-le.

    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

    À ce stade, nous avons un nouvel exécutable nommé mysqlsniffer dans notre répertoire source. Vous pouvez le copier où vous voulez (quelque part dans le chemin serait utile)

    Pour exécuter mysqlsniffer, vous devez spécifier l'interface réseau sur laquelle MySQL écoute. Pour moi, c'est eth0.

    sudo / chemin / vers / mysqlsniffer eth0

    Des tas de choses commencent à filer… filtrons-le un peu plus afin que nous puissions simplement obtenir les requêtes et non toutes les données excédentaires.

    $ sudo / chemin / vers / mysqlsniffer -no-mysql-hdrs eth0 | grep COM_QUERY

    192.168.73.1.2622> serveur: COM_QUERY: SELECT @@ sql_mode
    192.168.73.1.2622> serveur: COM_QUERY: SET SESSION sql_mode = ”
    192.168.73.1.2622> serveur: COM_QUERY: SET NAMES utf8
    192.168.73.1.1636> serveur: COM_QUERY: SELECT @@ SQL_MODE
    192.168.73.1.1636> serveur: COM_QUERY: AFFICHER LES COLONNES COMPLETES A PARTIR DE 'db2842_howto'. 'Wp_users'

    Ah, maintenant nous y sommes… toutes sortes d'informations sur les requêtes, sans avoir à redémarrer MySQL.

    Voici les options complètes pour la commande:

    Utilisation: mysqlsniffer [OPTIONS] INTERFACE

    OPTIONS:
    -port N Écoutez MySQL sur le numéro de port N (par défaut, 3306).
    -Afficher les informations sur les paquets supplémentaires
    -tcp-ctrl Afficher les paquets de contrôle TCP (SYN, FIN, RST, ACK)
    -net-hdrs Affiche les principales valeurs des en-têtes IP et TCP
    -no-mysql-hdrs Ne montre pas l'en-tête MySQL (identifiant et longueur du paquet)
    -state Afficher l'état
    -v40 MySQL Server est la version 4.0
    -dump Décharge tous les paquets en hexadécimal
    -help Imprimer ceci

    Code source original et plus d'informations sur:
    http://hackmysql.com/mysqlsniffer

    Si vous utilisez un serveur de développement, il serait plus facile d'activer simplement la journalisation des requêtes..