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
Postar um comentário