VPS OVH : redémarrer automatiquement MYSQL quand MYSQL s’arrête

A l’heure ou j’écris cet article, le blog est hébergé sur un VPS OVH.

Quand on achète un VPS chez OVH, il y a certains OS et applications déjà pré-installées comme WordPress. Ainsi, WordPress est automatiquement installé, pas besoin de perdre du temps à trouver comment l’installer.

Donc une fois le VPS acheté, WordPress est déjà installé, et tout fonctionne.

Sauf que parfois, la base de données MYSQL peut se crasher, et du coup, le blog est inaccessible.
Ce qui est « vicieux » dans ces cas la, c’est qu’un service de monitoring de site (comme uptime robot) ne peut pas le détecter, car le site est encore en ligne, c’est juste un problème applicatif (accès à la base de données MYSQL impossible).

Du coup, jusqu’à présent, j’allais bêtement vérifier très souvent le blog pour savoir si tout se passe bien. Et quand je vois un erreur wordpress « erreur de connexion à la base de données », je redémarré le VPS via le tableau de de bord d’OVH.

A vrai dire, j’était un peu flemmard. Ainsi, un jour, après avoir constaté que la base de données était encore arrêtée sans raison particulière, et après avoir vu les logs montrant rien d’extraordinairement anormale, j’ai décidé, ENFIN, de lancer un script bash qui relance automatiquement la base de données MYSQL quand la base de données s’arrête brutalement.

Ainsi, ce petit bout de script permet de :

  1. détecter si la base de données MYSQL est arretée
  2. si MYSQL est arreté, relancer MYSQL automatiquement.

Et vu que pas besoin de réinventer un script qui doit déjà exister ailleurs, j’ai trouvé ce petit bout de script qui marche parfaitement bien dans mon cas. Si cela ne marche pas dans votre cas, il y a d’autres script bash dans cette même page

Voici la page dont ce code source est extrait

Je copie/colle le script ici (au cas ou la page devient inaccessible)

#!/bin/bash
UP=$(pgrep mysql | wc -l);
if [ « $UP » -ne 1 ];
then
echo « MySQL is down. »;
sudo service mysql start

else
echo « All is well. »;
fi

Depuis, je n’ai plus d’erreur.

Voici les quelques étapes pour installer et lancer automatiquement ce script sur votre propre VPS/Serveur d’OVH

  1. copiez/collez le code du script dans un fichier appelé (par exemple) monitor.sh
  2. se connecter avec fillezilla en FTP (ou sFTP), puis déposez le fichier monitor.sh dans le répertoire /root
  3. donnez les droits (chmod) à ce fichier pour permettre l’exécution. Pour cela, connectez vous en ssh (avec putty ou autre), puis allez dans le dossier /root, et entrez sudo chmod +x monitor.sh
  4. Lancez le script manuellement pour voir si tout se passe bien. Entrez en ssh : ./monitor.sh. Si vous voyez écrit « All is well », ce que tout est bon
  5. si vous avez une erreur, comme par exemple  bad interpreter: No such file or directory, juste entrez en ssh : sed -i -e ‘s/\r$//’ monitor.sh . Testez à nouveau, cela devrait marcher.
  6. Conseil : Pour tester si le script marche vraiment et redemarre vraiment MYSQL, il faudrait arreter manuellement MYSQL, puis lancer le script pour voir si ca remarche. Faites le quand vous n’avez pas (ou le moins) de traffic sur votre site. Entrez
    1. sudo service mysql stop (la base de données s’arrete)
    2. sudo service mysql status (vérifier que la base de données est vraiment arretée)
    3. ./monitor.sh (lancer le script). vous devez lire MySQL is down.
    4. sudo service mysql status (vérifier que la base de données est redemarrée)
    5. ./monitor.sh (lancea le script). vous devez lire All is well. (l’étape 4 et 5 sont en faites presque pareil et aboutissent au même résultat : le script fonctionne)
    6. si vous avez une erreur, vous pouvez relancer manuellement MYSQL à tout moment en écrivant sudo service mysql start . Dans ce cas ou le script ne marche pas, essayez un autre script, et repetez ce process de vérification.
  7. écrivez un cron job qui s’exécute toutes les minutes afin que le script se lance toutes les minutes et vérifie l’état de MYSQL. Ecrivez et sauvegardez le crontab. Pensez à le faire directement en ssh, car même si vous avez un panneau de contrôle de type cPanel, et si vous entrez ce cron job via cPanel, cela risque de ne pas marcher
    1. crontab -e
    2. * * * * * /root/monitor.sh > /dev/null 2>&1

Comme j’aime bien tout vérifier plusieurs fois, je fais replanter manuellement ma base de donnée MYSQL , et je vérifie si après une minute, elle est bien redémarrée

  1. sudo service mysql stop (la base de données s’arrete)
  2. sudo service mysql status (vérifiez que la base de données est vraiment arreté)
  3. —j’attends une minute–
  4. sudo service mysql status (vérifiez que la base de données a été redemarrée automatiquement)

 

A vous de jouer 😉

PARTAGER