sql >> Base de Datos >  >> RDS >> Mysql

Crear secuencia de comandos bash de monitoreo de consultas MySQL

En este artículo, discutiremos cómo puede configurar un script bash simple para verificar la actividad de su consulta MySQL y asegurarse de que las consultas largas no se queden bloqueadas en su servidor. Este script también podrá enviarle un correo electrónico con un aviso cuando haya encontrado una consulta de larga ejecución.

En la mayoría de los casos, una consulta de la base de datos MySQL debería poder ejecutarse en unos pocos segundos, si por alguna razón lleva más tiempo, podría existir la posibilidad de que una consulta MySQL de larga ejecución respalde esa cola de la base de datos y haga que su servidor se ralentice. , y posiblemente se vuelva inestable.

Para obtener más información sobre los tipos de problemas de uso de MySQL, puede leer sobre la actividad excesiva de MySQL.

Este script solo se puede configurar en un VPS o en un plan de alojamiento de servidor dedicado al que tenga acceso de root.

Crear secuencia de comandos de seguimiento de consultas MySQL

  1. Dependiendo de la complejidad de su base de datos, la cantidad de sitios web que ejecute y la cantidad de tráfico que obtenga, la cantidad máxima de tiempo que le gustaría permitir que se ejecute una consulta podría ser diferente. Recomendaría comenzar con algo conservador de alrededor de 120 segundos o 2 minutos, y si está iniciando sesión en su servidor después de recibir una alerta y parece que aún funciona de manera estable, probablemente podría aumentar el nivel de activación a algo más alto. Comience a editar un nuevo archivo para el script de alerta de consulta bash MySQL, en este caso usaré el vim editor de texto y creando un nuevo archivo llamado MySQLMon en el directorio de inicio de mi usuario con el siguiente comando:vim /home/userna1/MySQLMon Entonces querrás presionar i para ingresar Insertar mode una vez que vim esté cargado e ingrese el siguiente código:
    #!/bin/bash trigger=120 activeQcount=`mysql -e "show full processlist;" |
    egrep -v "leechprotect|root|Time" | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
    wc -l` if [ $activeQcount -gt 0 ] then echo
    "=====================================================================================" >
    /tmp/MySQLMon echo "= MySQLMon has found a new query running for longer than 120 seconds (2 mins)"
    >> /tmp/MySQLMon echo
    "=====================================================================================" >>
    /tmp/MySQLMon date >> /tmp/MySQLMon echo "" >> /tmp/MySQLMon mysql -e "show full processlist;"
    >> /tmp/MySQLMon echo
    "=====================================================================================">>
    /tmp/MySQLMon cat /tmp/MySQLMon | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
    mail -s"Caught query running longer than $trigger seconds" [email protected] -- -r
    "[email protected]" fi

    Este código puede parecer un poco abrumador al principio, pero desglosado es bastante simple. Primero estamos declarando un disparador variable y estableciéndola en 120 segundos. Entonces estamos configurando un activeQcount variable para contener básicamente cualquier consulta que sea más larga que nuestro activador valor.

    Luego usamos un bash if declaración para verificar si nuestro activeQcount el valor está por encima de cero, lo que muestra que hay consultas que duran más que nuestro activador establecido valor. A continuación, simplemente empezamos a hacer eco texto en un archivo de marcador de posición llamado /tmp/MySQLMon , entonces finalmente cat ese archivo de marcador de posición que simplemente lo lee y luego lo canalizamos | al correo seguido del asunto que nos gustaría usar, la dirección del destinatario, luego puede ingresar — -r seguido de la dirección de correo electrónico de la que desea que provenga el mensaje.

  2. Cuando reciba una alerta por correo electrónico, se parecerá mucho a este ejemplo:

    ======================================================================================
    MySQLMon has found a new query running for longer than 120 seconds (2 mins)
    =====================================================================================
    Tue Dec 4 15:07:42 EST 2012 40901 userna1_phpb1 localhost userna1_phpb1 Query 342
    Sending data
    INSERT INTO users (userID, name, base64_decode)
    =====================================================================================

Configurar el trabajo cron para ejecutar el script MySQLMon

  1. Ahora debe tener configurado el script bash de monitoreo de consultas de MySQL, luego querrá crear un trabajo cron para ejecutar esta tarea. Si no está familiarizado con los trabajos cron, puede leer sobre cómo ejecutar un trabajo cron. Puede usar el menú desplegable de cPanel cada 5 minutos, lo que debería hacer que el trabajo cron final se vea así:*/5 * * * * bash /home/userna1/MySQLMon

Ahora debería haber configurado con éxito un script bash para monitorear sus consultas de MySQL para detectar las de ejecución prolongada y para alertarlo por correo electrónico cuando detecte alguna. También debe saber cómo configurar un trabajo cron para ejecutar ese script en un intervalo establecido para que se ejecute constantemente sin más intervención manual de su parte.