· 7 years ago · Dec 12, 2018, 12:26 PM
1#!/bin/bash
2# Auteur : Nono @ blog.m0le.net
3# Modificateur: benoit . grisot @ gmail.com
4# Date : 06/02/2012
5# Version : 1.1
6# MaJ : 20/11/2018
7PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/mutt:/opt
8#############
9# Variables #
10#############
11
12# Une variables est générée pour calculer le temps de sauvegarde
13SECONDS=0
14# Une date est généré, pour avoir la date de début de processus de backup
15date_start=`date +'%d/%m/%Y @ %H:%M:%S'`;
16
17# Choix du format de la date utilisé pour les dossiers
18format_date='%d%m%Y'
19
20# Variable de date du jour, en fonction du format choisi
21date=`date +${format_date}`;
22
23# Le nombre de jour que vous souhaitez archiver
24keepday="30";
25
26# Calcul du nombre de jour, remontant à plus de "$keepday" jour(s)
27keepdate=`date --date "-${keepday} days" +${format_date}`;
28
29# Le répertoire de création du backup journalier
30backup_dir='/tmp/'${date};
31
32# Le chemin du rapport
33rapport='/tmp/rapport.log';
34
35# Le chemin du log d'erreur
36ERREUR='/tmp/erreur.log'
37
38# Le nom d'utilisateur de la base de donnée
39sql_user='root'
40
41# Le mot de pass de la base de donnée
42sql_password='*******';
43
44# L'ip ou le hostname de votre serveur FTP
45ftp_host='ftp.mondomaine.fr';
46
47# L'utilisateur de votre serveur FTP
48ftp_user='myFtpUser';
49
50# Le mot de passe de votre serveur FTP
51ftp_pass='myFTPP@$$vvOrD';
52
53# Le dossier FTP de destination
54
55ftpdirectory='/backup/'${date}
56
57# L'adresse mail qui recevra le rapport
58mail='admin@mondomaine.fr';
59
60#Liste les BDD Ã sauvegarder
61LISTEBDD=$( echo 'show databases' | mysql -u$sql_user -p$sql_password )
62
63#Gestion des erreurs
64exec 1>/dev/null #On ne s'occupe pas de la sortie standard
65exec 2>${ERREUR} #On dirige les erreurs vers le fichier de log
66##########
67# Script #
68##########
69
70# Création du repertoire de backup + Initialisation du rapport
71mkdir -p ${backup_dir};
72echo 'Rapport du '${date_start} > ${rapport};
73echo " " >> ${rapport};
74
75# On sauvegarde la liste des paquets installés
76dpkg --get-selections > ${backup_dir}/liste-des-paquets_`date +%Y-%m-%d-%H-%M`.dpkg
77
78# Les répertoires + exclusions des dossiers à archiver ...
79# (à modifier à la main ... On peut pas tout avoir dans la vie)
80# Syntaxe :
81# 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
82tar cfJ ${backup_dir}/www-${date}.tar.xz -C /var/www .
83tar cfJ ${backup_dir}/etc-${date}.tar.xz -C /etc .
84tar cfJ ${backup_dir}/opt-${date}.tar.xz -C /opt .
85tar cfJ ${backup_dir}/home-${date}.tar.xz -C /home .
86
87#Création du dump de la base de donnée avec mysqldump
88#on boucle sur chaque dossier et on exclu les bases de données non essentielles (for découpe automatiquement par l'espace)
89
90for SQL in $LISTEBDD
91do
92if [ $SQL != "information_schema" ] && [ $SQL != "mysql" ] && [ $SQL != "Database" ] && [ $SQL != "performance_schema" ] && [ $SQL != "phpmyadmin" ]; then
93#echo $SQL
94mysqldump -u$sql_user -p$sql_password $SQL | gzip -9 > ${backup_dir}/${SQL}_${date}.sql.gz;
95fi
96done
97echo "Etat du dossier local :" >> ${rapport};
98ls -lh ${backup_dir} -I rapport* >> ${rapport};
99echo " " >> ${rapport};
100
101# Envoie du dossier de sauvegarde vers le FTP
102echo "Etat du dossier distant :" >> ${rapport};
103lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "mirror -R ${backup_dir} ${ftpdirectory} ; quit" > /dev/null 2>${ERREUR};
104lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "ls ${ftpdirectory} ; quit" >> ${rapport};
105echo " " >> ${rapport};
106
107# Suppresion du dossier en local
108echo "Suppression du dossier local : ${backup_dir}" >> ${rapport};
109rm -rf ${backup_dir};
110echo " " >> ${rapport};
111
112# Suppression du dossier distant de plus de "$keepday" jour(s)
113echo "Suppression du dossier distant de plus de ${keepday} jours : ${keepdate}" >> ${rapport};
114echo " " >> ${rapport};
115
116# Copie de l'état des dossiers sur le FTP pour le rapport
117echo "Etat du FTP :" >> ${rapport};
118lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "cd ${ftpdirectory} ; cd .. ; rm -rf ${keepdate} ;ls ; quit" >> ${rapport};
119
120# Une date est généré, pour avoir la date de fin de processus de backup
121date_end=`date +'%d/%m/%Y @ %H:%M:%S'`;
122echo " " >> ${rapport};
123
124#Finalisation du rapport
125echo 'Fini le '${date_end} >> ${rapport};
126duration=$SECONDS
127echo "La sauvegarde a duré $(($duration / 3600)) Heures, $((($duration / 60) % 60)) minutes and $(($duration % 60)) secondes." >> ${rapport}
128#Envoi d'un mail en cas d'erreur. Les erreurs sont dans le corps du mail et le rapport est en PJ
129if test -s /tmp/erreur.log
130then
131 mutt -s "Backup ${date}" -a ${rapport} -- ${mail} < /tmp/erreur.log
132fi
133rm ${rapport}
134#rm ${ERREUR}