Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Auteur : Nono @ blog.m0le.net
- # Modificateur: benoit . grisot @ gmail.com
- # Date : 06/02/2012
- # Version : 1.1
- # MaJ : 20/11/2018
- PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/mutt:/opt
- #############
- # Variables #
- #############
- # Une variables est générée pour calculer le temps de sauvegarde
- SECONDS=0
- # Une date est généré, pour avoir la date de début de processus de backup
- date_start=`date +'%d/%m/%Y @ %H:%M:%S'`;
- # Choix du format de la date utilisé pour les dossiers
- format_date='%d%m%Y'
- # Variable de date du jour, en fonction du format choisi
- date=`date +${format_date}`;
- # Le nombre de jour que vous souhaitez archiver
- keepday="30";
- # Calcul du nombre de jour, remontant à plus de "$keepday" jour(s)
- keepdate=`date --date "-${keepday} days" +${format_date}`;
- # Le répertoire de création du backup journalier
- backup_dir='/tmp/'${date};
- # Le chemin du rapport
- rapport='/tmp/rapport.log';
- # Le chemin du log d'erreur
- ERREUR='/tmp/erreur.log'
- # Le nom d'utilisateur de la base de donnée
- sql_user='root'
- # Le mot de pass de la base de donnée
- sql_password='*******';
- # L'ip ou le hostname de votre serveur FTP
- ftp_host='ftp.mondomaine.fr';
- # L'utilisateur de votre serveur FTP
- ftp_user='myFtpUser';
- # Le mot de passe de votre serveur FTP
- ftp_pass='myFTPP@$$vvOrD';
- # Le dossier FTP de destination
- ftpdirectory='/backup/'${date}
- # L'adresse mail qui recevra le rapport
- mail='admin@mondomaine.fr';
- #Liste les BDD à sauvegarder
- LISTEBDD=$( echo 'show databases' | mysql -u$sql_user -p$sql_password )
- #Gestion des erreurs
- exec 1>/dev/null #On ne s'occupe pas de la sortie standard
- exec 2>${ERREUR} #On dirige les erreurs vers le fichier de log
- ##########
- # Script #
- ##########
- # Création du repertoire de backup + Initialisation du rapport
- mkdir -p ${backup_dir};
- echo 'Rapport du '${date_start} > ${rapport};
- echo " " >> ${rapport};
- # On sauvegarde la liste des paquets installés
- dpkg --get-selections > ${backup_dir}/liste-des-paquets_`date +%Y-%m-%d-%H-%M`.dpkg
- # Les répertoires + exclusions des dossiers à archiver ...
- # (à modifier à la main ... On peut pas tout avoir dans la vie)
- # Syntaxe :
- # tar cfJ le_nom_de_larchive.tar.xz --exclude='/le/repertoire/a/exclure' --exclude='/eventuellement/le/deuxieme/repertoire/a/exclure' /le/dossier/a/archiver/ 2>/dev/null
- tar cfJ ${backup_dir}/www-${date}.tar.xz -C /var/www .
- tar cfJ ${backup_dir}/etc-${date}.tar.xz -C /etc .
- tar cfJ ${backup_dir}/opt-${date}.tar.xz -C /opt .
- tar cfJ ${backup_dir}/home-${date}.tar.xz -C /home .
- #Création du dump de la base de donnée avec mysqldump
- #on boucle sur chaque dossier et on exclu les bases de données non essentielles (for découpe automatiquement par l'espace)
- for SQL in $LISTEBDD
- do
- if [ $SQL != "information_schema" ] && [ $SQL != "mysql" ] && [ $SQL != "Database" ] && [ $SQL != "performance_schema" ] && [ $SQL != "phpmyadmin" ]; then
- #echo $SQL
- mysqldump -u$sql_user -p$sql_password $SQL | gzip -9 > ${backup_dir}/${SQL}_${date}.sql.gz;
- fi
- done
- echo "Etat du dossier local :" >> ${rapport};
- ls -lh ${backup_dir} -I rapport* >> ${rapport};
- echo " " >> ${rapport};
- # Envoie du dossier de sauvegarde vers le FTP
- echo "Etat du dossier distant :" >> ${rapport};
- lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "mirror -R ${backup_dir} ${ftpdirectory} ; quit" > /dev/null 2>${ERREUR};
- lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "ls ${ftpdirectory} ; quit" >> ${rapport};
- echo " " >> ${rapport};
- # Suppresion du dossier en local
- echo "Suppression du dossier local : ${backup_dir}" >> ${rapport};
- rm -rf ${backup_dir};
- echo " " >> ${rapport};
- # Suppression du dossier distant de plus de "$keepday" jour(s)
- echo "Suppression du dossier distant de plus de ${keepday} jours : ${keepdate}" >> ${rapport};
- echo " " >> ${rapport};
- # Copie de l'état des dossiers sur le FTP pour le rapport
- echo "Etat du FTP :" >> ${rapport};
- lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "cd ${ftpdirectory} ; cd .. ; rm -rf ${keepdate} ;ls ; quit" >> ${rapport};
- # Une date est généré, pour avoir la date de fin de processus de backup
- date_end=`date +'%d/%m/%Y @ %H:%M:%S'`;
- echo " " >> ${rapport};
- #Finalisation du rapport
- echo 'Fini le '${date_end} >> ${rapport};
- duration=$SECONDS
- echo "La sauvegarde a duré $(($duration / 3600)) Heures, $((($duration / 60) % 60)) minutes and $(($duration % 60)) secondes." >> ${rapport}
- #Envoi d'un mail en cas d'erreur. Les erreurs sont dans le corps du mail et le rapport est en PJ
- if test -s /tmp/erreur.log
- then
- mutt -s "Backup ${date}" -a ${rapport} -- ${mail} < /tmp/erreur.log
- fi
- rm ${rapport}
- #rm ${ERREUR}
Add Comment
Please, Sign In to add comment