Página principal » cómo » Rastrea las consultas de MySQL con mysqlsniffer en Ubuntu

    Rastrea las consultas de MySQL con mysqlsniffer en Ubuntu

    Tiene un servidor de base de datos de producción y no puede habilitar el registro de consultas ... así que, ¿cómo ve las consultas que se ejecutan en la base de datos??

    La respuesta: use un rastreador de red modificado para analizar los paquetes MySQL y decodificarlos. Tendrás que hacer un poco de compilación, pero valdrá la pena. Tenga en cuenta que esto no suele funcionar para las conexiones locales, aunque puede intentarlo.

    Primero, necesita instalar libpcap-dev, que es la biblioteca de desarrollo que permite que una aplicación detecte paquetes de red.

    sudo apt-get install libpcap-dev

    Ahora vamos a hacer un directorio, descargar el código fuente y compilarlo

    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

    En este punto, tenemos un nuevo y brillante ejecutable llamado mysqlsniffer en nuestro directorio de origen. Puedes copiarlo donde quieras (en algún lugar del camino sería útil)

    Para ejecutar mysqlsniffer, debe especificar la interfaz de red en la que MySQL está escuchando. Para mi es eth0.

    sudo / ruta / a / mysqlsniffer eth0

    Un montón de cosas empiezan a volar ... vamos a filtrarlo un poco más para que podamos obtener las consultas y no todo el exceso de datos.

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

    192.168.73.1.2622> servidor: COM_QUERY: SELECT @@ sql_mode
    192.168.73.1.2622> servidor: COM_QUERY: SET SESSION sql_mode = ”
    192.168.73.1.2622> server: COM_QUERY: SET NAMES utf8
    192.168.73.1.1636> servidor: COM_QUERY: SELECT @@ SQL_MODE
    192.168.73.1.1636> servidor: COM_QUERY: MOSTRAR COLUMNAS COMPLETAS DE 'db2842_howto'. 'Wp_users'

    Ah, ahora estamos ... todo tipo de información de consulta, sin tener que reiniciar MySQL.

    Aquí están las opciones completas para el comando:

    Uso: mysqlsniffer [OPCIONES] INTERFAZ

    OPCIONES:
    -puerto N Escuche MySQL en el número de puerto N (predeterminado 3306)
    -detallado Mostrar información adicional del paquete
    -tcp-ctrl Mostrar paquetes de control TCP (SYN, FIN, RST, ACK)
    -net-hdrs Mostrar los principales valores de encabezado IP y TCP
    -no-mysql-hdrs No mostrar el encabezado de MySQL (ID de paquete y longitud)
    -estado mostrar estado
    -El servidor MySQL v40 es la versión 4.0
    -volcar Volcar todos los paquetes en hexadecimal
    -ayuda Imprimir esto

    Código fuente original y más información en:
    http://hackmysql.com/mysqlsniffer

    Si está ejecutando en un servidor de desarrollo, sería más fácil simplemente activar el registro de consultas.