Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Criar script bash de monitoramento de consulta MySQL


Neste artigo, discutiremos como você pode configurar um script bash simples para verificar sua atividade de consulta do MySQL para garantir que consultas longas não fiquem suspensas em seu servidor. Esse script também poderá enviar um aviso por e-mail quando encontrar uma consulta de longa duração.

Na maioria dos casos, uma consulta de banco de dados MySQL deve ser capaz de ser executada em alguns segundos, se por algum motivo demorar mais do que isso, pode haver a possibilidade de uma consulta MySQL de longa execução fazendo backup dessa fila de banco de dados e levando seu servidor a ficar mais lento , e possivelmente tornando-se instável.

Para obter mais informações sobre os tipos de problemas de uso do MySQL, você pode ler sobre atividade excessiva do MySQL.

Este script só pode ser configurado em um VPS ou plano de hospedagem de servidor dedicado ao qual você tenha acesso root.

Criar script de monitoramento de consulta MySQL

  1. Dependendo da complexidade do seu banco de dados, quantos sites você executa e quanto tráfego você recebe, a quantidade máxima de tempo que você deseja permitir que uma consulta seja executada pode ser diferente. Eu recomendaria começar com algo conservador em torno de 120 segundos ou 2 minutos, e se você estiver fazendo login no seu servidor depois de ser alertado e parecer ainda estar funcionando estável, você provavelmente poderá aumentar o nível de disparo para algo mais alto. um novo arquivo para o script de alerta de consulta bash MySQL, neste caso eu estarei usando o vim editor de texto e criando um novo arquivo chamado MySQLMon no diretório inicial do meu usuário com o seguinte comando:vim /home/userna1/MySQLMon Então você vai querer clicar em i para inserir Inserir mode quando o vim for carregado e digite o seguinte 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

    Esse código pode parecer um pouco esmagador no começo, mas, detalhado, é realmente muito simples. Primeiro, estamos declarando um gatilho variável e definindo-a como 120 segundos. Então estamos definindo um activeQcount variável para basicamente manter todas as consultas que são mais longas que nosso trigger valor.

    Em seguida, usamos um bash if para verificar se nosso activeQcount o valor está acima de zero, mostrando que há consultas em execução por mais tempo do que nosso gatilho definido valor. Em seguida, simplesmente começamos a echo’ing texto em um arquivo de espaço reservado chamado /tmp/MySQLMon , então, finalmente, gato aquele arquivo de espaço reservado que apenas o lê e então o canalizamos | para o e-mail função seguida por um assunto que gostaríamos de usar, o endereço do destinatário, então você pode digitar — -r seguido pelo endereço de e-mail de onde você gostaria de receber a mensagem.
  2. Quando você receber um alerta por e-mail, ele se parecerá muito com este exemplo:

    ======================================================================================
    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 cron job para executar o script MySQLMon

  1. Agora você deve ter sua configuração de script bash de monitoramento de consulta MySQL, em seguida, você desejará criar um cron job para executar esta tarefa. Se você não tem familiaridade com cron jobs, pode ler sobre como executar um cron job. Você pode usar o menu suspenso cPanel a cada 5 minutos, o que deve fazer com que o cron job final fique parecido com:*/5 * * * * bash /home/userna1/MySQLMon

Agora você deve ter configurado com sucesso um script bash para monitorar suas consultas MySQL para capturar quaisquer consultas de longa duração e para alertá-lo por e-mail quando capturar alguma. Você também deve saber como configurar um cron job para executar esse script em um intervalo definido, para que ele seja executado constantemente sem intervenção manual adicional de você.