28Jun

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 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 fonctionne généralement pas pour les connexions locales, mais 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 install libpcap-dev

Faisons maintenant un répertoire, téléchargeons le code source et le compilons

mkdir mysqlsniffer

cd mysqlsniffer

wget hackmysql.com /code/ mysqlsniffer.tgz

tar xvfz mysqlsniffer.tgz

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

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

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

sudo /path/to/ mysqlsniffer eth0

Des tas de choses commencent à voler. .. filtrons un peu plus afin que nous puissions simplement obtenir les requêtes et pas toutes les données en excès.

$ sudo /path/to/ mysqlsniffer -no-mysql-hdrs eth0 |grep COM_QUERY

192.168.73.1.2622 & gt;serveur: COM_QUERY: SELECT @@ sql_mode
192.168.73.1.2622 & gt;serveur: COM_QUERY: SET SESSION sql_mode = "
192.168.73.1.2622 & gt;serveur: COM_QUERY: SET NAMES utf8
192.168.73.1.1636 & gt;serveur: COM_QUERY: SELECT @@ SQL_MODE
192.168.73.1.1636 & gt;serveur: COM_QUERY: SHOW PLEINS COLONNES DE `db2842_howto`.`wp_users`

Ah, maintenant nous sommes. .. toutes sortes d'informations de requête, sans avoir à redémarrer MySQL.

Voici les options complètes pour la commande:

Utilisation: mysqlsniffer [OPTIONS] INTERFACE OPTIONS

:
-port N Écouter MySQL sur le numéro de port N( par défaut 3306)
-verbose Afficher des informations supplémentaires sur les paquets
-tcp-ctrl Afficher TCPpaquets de contrôle( SYN, FIN, RST, ACK)
-net-hdrs Afficher les valeurs d'en-tête IP et TCP
-no-mysql-hdrs Ne pas afficher l'en-tête MySQL( ID et longueur du paquet)
-state Afficher l'état
-v40 MySQLserveur est la version 4.0
-dump Dump tous les paquets dans l'hex
-help Imprimer ce

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

Si vous exécutez sur un serveur de développement, il serait plus facile d'activer simplement la requêteenregistrement.