Scripts et Programmation

BASH - Sauvegarder Zabbix

Table des matières

Introduction



Dans le millieu professionnel, j'utilise le logiciel Zabbix pour superviser mes serveurs.
Bien évidemment, les données d'un outil doivent impérativement se sauvegarder !!!

But du script



Le but, c'est sauvegarder la base zabbix.
Les plus du script :
  • Extraire à chaud la base de donnée
  • Compresser celle-ci car elle est volumineuse
  • Supprimer les sauvegardes anciennes
  • Transférer les sauvegardes sur l'espace de sauvegarde se synchronisant chaque nuit à distance


Le script




Script de base



Code BASH :
 
#! /bin/bash
 
path=`dirname $0`
cd "$path"
 
#Def de variables
user="zabbix"    # Utilisateur de la base de données
passwd="zabbix"    # Mot de passe de l'utilisateur de la base
db="zabbix"    # Nom de la base
dest="/adrien/sauvegarde/zabbix"    #Chemin de destination de la sauvegarde (Attention, pas de slash à la fin) 
nbsav=30        #Nombre de sauvegardes à conserver
 
 
#On fabrique les variables systeme
dte=$(date +"%Y-%m-%d--%H-%M-%S")
fic="$db/$db-$dte.sql"
 
 
#### SCRIPT ####
 
if [ -d $db ]
then
    echo "On sauvegarde dans $db"
else
    echo "On créé le dossier de sauvegarde $db"
    mkdir $db
fi
 
echo "On sauvegarde de la base $db dans $fic"
ionice -c3 nice -n19 mysqldump -u $user -p$passwd $db > "$fic"
 
echo "On compresse $fic avec gzip : $fic.gz"
ionice -c3 nice -n19 gzip "$fic"
 
 
nbfic=$(ls -C1X "$db" | wc -l)
diff=$(echo $(($nbfic-$nbsav)))
 
echo "On calcule le nombre de fichiers à supprimer pour ne garder que les $nbsav derniers : $diff"
 
i=1 #Compteur du for
for f in $(ls -C1X "$db")
do
    if [ $i -le $diff ]    
    then
        oldsav="$db/$f"
        echo "On supprime $db/$f"
        rm -f "$db/$f"
        let i++
    else
        echo "Aucune ancienne sauvegarde supprimée"
        break;
    fi
done
 
 
 
echo "On envoie les sauvegarde vers : $dest"
rsync -avzh --delete-after "$db/" "$dest/"
 



Avec un envoi de courriel




Code BASH :
#! /bin/bash
 
path=`dirname $0`
cd "$path"
 
#Def de variables
user="zabbix"    # Utilisateur de la base de données
passwd="zabbix"    # Mot de passe de l'utilisateur de la base
db="zabbix"    # Nom de la base
dest="/adrien/sauvegarde/zabbix"    #Chemin de destination de la sauvegarde (Attention, pas de slash à la fin) 
nbsav=30        #Nombre de sauvegardes à conserver
mail="[email protected]" # Courriel du destinataire des rapports
 
#On fabrique les variables systeme
dte=$(date +"%Y-%m-%d--%H-%M-%S")
fic="$db/$db-$dte.sql"
rap="rapport" 
 
echo "Sauvegarde Zabix $(date)" > "$rap"
 
#### SCRIPT ####
 
if [ -d $db ]
then
    echo "On sauvegarde dans $db"
else
    echo "On créé le dossier de sauvegarde $db"
    mkdir $db
fi
 
echo "On sauvegarde de la base $db dans $fic"
ionice -c3 nice -n19 mysqldump -u $user -p$passwd $db > "$fic"
if [ $? -eq 0 ]
then
    echo "Sauvegarde Zabbix effectuée avec succès" >> "$rap"
else
    echo "Echec lors de la sauvegarde Zabbix" >> "$rap"
fi
 
echo "On compresse $fic avec gzip : $fic.gz"
ionice -c3 nice -n19 gzip "$fic"
if [ $? -eq 0 ]
then
        echo "Compression de la sauvegarde Zabbix effectuée avec succès" >> "$rap"
else
        echo "Echec lors de la compression de la sauvegarde Zabbix" >> "$rap"
fi
 
nbfic=$(ls -C1X "$db" | wc -l)
diff=$(echo $(($nbfic-$nbsav)))
 
echo "On calcule le nombre de fichiers à supprimer pour ne garder que les $nbsav derniers : $diff"
 
i=1 #Compteur du for
for f in $(ls -C1X "$db")
do
    if [ $i -le $diff ]    
    then
        oldsav="$db/$f"
        echo "On supprime l ancienne sauvegarde $db/$f" >> "$rap"
        rm -f "$db/$f"
        let i++
    else
        echo "Aucune ancienne sauvegarde supprimée" >> "$rap"
        break;
    fi
done
 
 
 
echo "On envoie les sauvegarde vers : $dest" >> "$rap"
rsync -avzh --delete-after "$db/" "$dest/" >> "$rap"
 
mail -s "Sauvegarde Zabbix du $(date)" "$mail" < "$rap"
Cette page a été vue 15615 fois