Tutorial: Como reiniciar o serviço MySQL automaticamente no Linux usando o Cron

Este artigo é tanto uma anotação para mim mesmo, como uma tradução de um post em inglês que deu essa dica. Já aconteceu de seu blog Wordpress exibir um "Erro de conexão com o banco de dados" sem motivo aparente, e ao reiniciar o servidor o Wordpress volta ao normal? Em um servidor Linux que não tem muitos recursos, o MySQL (que controla o banco de dados) às vezes pode crashar por falta de memória, e o problema pode ser resolvido geralmente apenas reiniciando o serviço, ao invés de reiniciar o servidor como um todo. Mas como fazer isso automaticamente? É isso que veremos.


Para ver se o MySQL está rodando ou não, use o seguinte comando:

sudo service mysql status

E para reiniciar, o comando é basicamente:

sudo service mysql restart

Mas, e se você estiver de férias na hora que seu site cair? Existe uma forma de tornar esse processo automático no Linux. Para isso pode ser usado o cron, um agendador de tarefas que pode rodar scripts.

Crie um script para auto reiniciar o MySQL

É possível configurar o cron para automaticamente checar o status do MySQL e reiniciar o serviço caso ele crashar. Isso não é uma solução definitiva se a causa do problema for um servidor muito limitado ou o site está sofrendo com algum ataque que esteja fazendo o consumo de memória subir, mas pode te dar tempo para investigar mais a fundo o problema.

Primeiro precisamos criar um bash script simples e guardar na pasta home (ou qualquer outro lugar), e então instruir o cron a rodar esse script uma vez por minuto.

Você pode colocar o script onde quiser, mas neste exemplo, colocaremos na pasta home.

Mude o diretório para a pasta home:

cd /home/

Crie uma nova pasta chamada scripts:

sudo mkdir scripts

E entre na pasta:

cd scripts

Crie um novo arquivo nesta pasta chamado voltamysql.sh usando o editor de texto nano:

sudo nano voltamysql.sh

Cole o seguinte script:

#!/bin/bash

# Checa se o MySQL esta funcionando.
sudo service mysql status > /dev/null 2>&1

# Reinicia o MySQL se nao estiver rodando.
if [ $? != 0 ]; then
    echo -e "O serviço MySQL caiu. Reiniciando agora...\n"
    sudo service mysql restart
else
    echo -e "O serviço MySQL está ativo. Não há nada a fazer.\n"
fi

Salve e saia (CTRL+X, aperte Y e então ENTER).

Torne o script um arquivo executável:

sudo chmod +x voltamysql.sh

Hora de testar o script

Teste usando o comando:

sudo ./voltamysql.sh

Se o MySQL já estiver online e funcionando, você verá a mensagem:

O serviço MySQL está ativo. Não há nada a fazer.

Se quiser ver o que acontece se o script detectar uma queda no MySQL, interrompa o serviço MySQL, mas lembre-se que fazer isso num site ativo vai derrubá-lo momentaneamente também. Prefira fazer num horário com pouco movimento. Interromper e reativar o MySQL não é um processo demorado no entanto, leva apenas alguns segundos.

sudo service mysql stop

Agora teste o scrip novamente:

sudo ./voltamysql.sh

Dessa vez, a saída do comando deve ser:

O serviço MySQL caiu. Reiniciando agora...

E o MySQL deve estar online novamente. Você pode checar se o site voltou ou usar o comando:

sudo service mysql status

Adicione o script no Crontab

Adicionando o script no crontab, o servidor checará o status do MySQL a cada minuto, e se detectar alguma queda, reiniciará o serviço.

Abra o crontab (se ele perguntar o editor de texto a ser usado, escolha o nano):

sudo crontab -e

No crontab, adicione a seguinte linha no final do arquivo:

* * * * * /home/scripts/voltamysql.sh > /dev/null 2>&1

Salve e saia (CTRL+X, depois Y e ENTER)

Testando o Crontab

Para testar se o crontab está rodando o script a cada minuto, você terá que interromper o MySQL temporariamente.

sudo service mysql stop

Logo na sequência cheque se o status dele está offline:

sudo service mysql status

Agora aguarde pelo menos 1 minuto até o crontab rodar. Se depois de dois minutos o MySQL continuar offline, algo deu errado com seu script. Inicie o MySQL novamente usando o comando sudo service mysql start, e cheque os passos anteriores novamente.

Se a dica funcionou, por favor deixe um comentário! E se quiser me siga no Twitter, onde provavelmente só vou falar de animes que estou assistindo. xD

Toda esta dica é uma tradução/adaptação desta página: How To Auto Restart a Crashed MySQL Service with Cron - DevAnswers.co

Comentários

Postagens mais visitadas deste blog

How was bringing Hengen Jizai into Portuguese?

Não estou mais aqui...

VTuber News: Audições abertas no Prism Project inclusive pro Brasil, estreia da terceira geração do VEE e Production Kawaii (Bônus: cover de Wareta Ringo)