Pour la 3e étape du backup de notre site web, on va garder un historique des versions hebdomadaires de notre site. Cela permet d’aller récupérer l’état de son site une ou plusieurs semaines dans le passé. Pratique si on a mis à jour un plugin foireux de notre CMS et qu’on s’en est rendu compte après la synchro du clone automatique du site…
Voici le script de sauvegarde rdiff-backup : backupDataLocalRdiff.sh
Pour les tâches planifiées, je vous conseille ceci :
30 1 * * 7 root [ -x /root/backupDataLocalRdiff.sh ] && /root/backupDataLocalRdiff.sh localhistorybackup 01 6 1 * * root [ -x /root/backupDataLocalRdiff.sh ] && /root/backupDataLocalRdiff.sh localhistoryverify
- Une fois par semaine, on archive les données FTP et les dump MySQL
- Une fois par mois, on reçoit un résumé avec les tailles des sauvegardes rdiff-backup.
Voici le script en question :
#!/bin/bash # Auteur : Belgotux # Site : www.monlinux.net # Adresse : # Version : 1.0.2 # Date : 05/03/2012 # Description : #Arguments # backupDataLocalRdiff localhistorybackup | localhistoryverify # for crontab # 30 1 * * * root [ -x /root/backupDataLocalRdiff.sh ] && /root/backupDataLocalRdiff.sh localhistorybackup # 01 6 1 * * root [ -x /root/backupDataLocalRdiff.sh ] && /root/backupDataLocalRdiff.sh localhistoryverify error_report=root mail_report=root folderBackup="/data/clone-ftp /root" #dossiers à sauvegarder en chemin absolu sans / à la fin foldersExcluded="/data/perso/test" logFile="" formatDate="%Y-%m-%d %H:%M:%S" #obligatoire rdiffbackupRemovePeriod="3M" # obligatoire période rdiffbackup pour faire un clean des vieilles backups ( si full 1mois et remove 3 mois, on garde en fait 4 mois (car regarde la date du dernier incrémental donc 1 de plus)) #Variables sauvegarde local dossierDistantLocal="/data/backup" #Variables définies if [ "$logFile" == "" ] ; then logFile="/var/log/$(basename $0 .sh).log" ; fi ### Fonctions ### function rdiffbackupLocal { echo -e "Backups incrémentales Rdiff-backup en cours..." cptResult=0 flagError=0 while read i ; do echo -e "\n\n\n- dossier en cours : $i" #test répertoire vide if [ $(ls -a "$i"|wc -l) = 2 ] ; then echo " !Erreur : répertoire $1 vide!" flagError=1 verif=1 else # (rdiffbackup chemin absolut) excluded="$foldersExcluded" folderDestination=$(basename "$i") #dossier destination = nom du dossier local echo -e "$excluded" | rdiff-backup --print-statistics --exclude-filelist-stdin "$i" ${dossierDistantLocal}/"$folderDestination" && \ rdiff-backup --print-statistics --remove-older-than "$rdiffbackupRemovePeriod" --force ${dossierDistantLocal}/"$folderDestination" verif=$? if [ "$verif" != 0 ] ; then echo " !Erreur synchronisation dossier $i" flagError=1 else echo " Synchronisation terminée du dossier $i" fi fi tabResultRdiffbackupLocal[$cptResult]="$verif" cptResult=$(($cptResult+1)) done < <( echo -e "$folderBackup" ) if [ $flagError == 0 ] ; then return 0 else return 1 fi } function rdiffbackupVerifyLocal { echo -e "Check Rdiff-backup en cours..." cptResult=0 flagError=0 while read i ; do echo -e "\n\n\n- dossier en cours : $i" folderDestination=$(basename "$i") #dossier destination = nom du dossier local rdiff-backup --print-statistics --test-server --list-increment-sizes ${dossierDistantLocal}/"$folderDestination" verif=$? if [ "$verif" != 0 ] ; then echo " !Erreur check dossier $i" flagError=1 else echo " Check du dossier $i" fi tabResultRdiffbackupLocal[$cptResult]="$verif" cptResult=$(($cptResult+1)) done < <( echo -e "$folderBackup" ) if [ $flagError == 0 ] ; then return 0 else return 1 fi } ############### Main ############### case "$1" in localhistorybackup) if [ "$dossierDistantLocal" != "" ] ; then rdiffbackupLocal returnRdiffbackupLocal=$? #gestion erreurs if [ $returnRdiffbackupLocal != 0 ] ; then mailBody=$(echo -e "\nErreur : RdiffbackupLocal=$returnRdiffbackupLocal") cpt=0 while read i ; do if [ "${tabResultRdiffbackupLocal}" = "" ] || [ ${tabResultRdiffbackupLocal[$cpt]} != 0 ] ; then mailBody+=$(echo -e "\n $i : ${tabResultRdiffbackupLocal[$cpt]}") fi cpt=$(($cpt+1)) done < <( echo -e "$folderBackup" ) echo $(date +"$formatDate")" Erreur : RdiffbackupLocal=$returnRdiffbackupLocal" >> $logFile echo "$mailBody" | mail -s "$(hostname -f) erreur backup rdiffbackup" $error_report fi if [ $returnRdiffbackupLocal != 0 ] ; then exit 1 else echo "" echo -e "opération terminée" echo "" echo -e "Backup rdiffbackup réussie" | mail -s "$(hostname -f) backup rdiffbackup reussie" $mail_report fi else echo -e "\nErreur : Paramètres manquants" | mail -s "$(hostname -f) erreur backup rdiffbackup" $error_report exit 1 fi ;; localhistoryverify) if [ "$dossierDistantLocal" != "" ] ; then rdiffbackupVerifyLocal | mail -s "$(hostname -f) résumé du mois rdiffbackup " $mail_report fi ;; *) echo "Aide :" echo "$(basename $0) localhistorybackup | localhistoryverify" echo "" exit 0 ;; esac echo $(date +"$formatDate")" opération terminée" >> $logFile exit 0
Voilà vous être tranquille maintenant 😉
Vérifiez de temps en temps les mails de retour des backups et surtout essayez de faire une restauration sur un autre serveur pour tester vos backups au moins une fois par an!
Laisser un commentaire