Petit script de surveillance MySQL

Depuis quelques temps, mon serveur MySQL tombait régulièrement, sans que je sache vraiment pourquoi (et je n’ai en ce moment pas trop le temps d’aller me plonger dans les logs pour essayer de comprendre ce qu’il se passe…). En attendant de résoudre le problème, j’ai donc écrit un petit script qui va aller vérifier à intervalles régulier si le serveur est joignable, et le relancer si ce n’est pas le cas.

Au passage, le script m’envoie également le fichier log par mail, ce qui me permettra peut-être de cerner le problème 🙂

Voici le script en question, pour ceux qui en auraient l’utilité :

#!/bin/bash
if [ -f /tmp/watchdog-mysql ]; then
    date | mail -s "MySQL en cours de redémarrage" ping@pong.com
else
    echo "" > /tmp/watchdog-mysql
    mysql -uping -ppong -e "SELECT NOW()"
    if [ $? -ne 0 ]; then
        /etc/init.d/mysql stop
        date | mail -s "Fichier log MySQL" -a /var/log/mysql/error.log ping@pong.com
        mv /var/log/mysql/error.log /var/log/mysql/error.log.`date +%Y%m%d%H%M%S`
        /etc/init.d/mysql start 
        date | mail -s "MySQL a été redémarré" ping@pong.com
    fi
    rm -f /tmp/watchdog-mysql
fi

Le principe est tout simple : on essaye d’exécuter une requête basique sur le serveur, si elle ne passe pas, on arrête le serveur (au cas où…), on envoie le fichier log par mail, on l’archive, puis on relance le serveur.

Le fichier /tmp/watchdog-mysql permet de vérifier que le script n’est pas déjà en train d’essayer de redémarrer MySQL.

Sur le même principe, on peut aussi monitorer Apache :

#!/bin/bash
if [ -f /tmp/watchdog-apache ]; then
    date | mail -s "Apache en cours de redémarrage" ping@pong.com
else
    echo "" > /tmp/watchdog-apache
    wget --spider -T 2 -t 2 http://localhost/
    if [ $? -ne 0 ]; then
        /etc/init.d/apache2 stop
        date | mail -s "Fichier log Apache" -a /var/log/apache2/error.log ping@pong.com 
        date | mail -s "Fichier access Apache" -a /var/log/apache2/other_vhosts_access.log ping@pong.com
        mv /var/log/apache2/error.log /var/log/apache2/error.log.`date +%Y%m%d%H%M%S`
        mv /var/log/apache2/other_vhosts_access.log /var/log/apache2/other_vhosts_access.log.`date +%Y%m%d%H%M%S`
        /etc/init.d/apache2 start
        date | mail -s "Apache a été redémarré" ping@pong.com
    fi
    rm -f /tmp/watchdog-apache
fi

Il n’y a plus qu’à croner le tout pour ne plus avoir à relancer les services manuellement en cas de plantage et recevoir les logs par mail.

4 réflexions sur « Petit script de surveillance MySQL »

    1. J’ai dû changer de serveurs quelques semaines plus tard parce que le disque dur était mourant, les problèmes de MySQL venaient peut-être de là. Depuis je n’ai plus eu de crash.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.