Guest User

Untitled

a guest
Dec 12th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.57 KB | None | 0 0
  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
  7. PATH=/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
  13. SECONDS=0
  14. # Une date est généré, pour avoir la date de début de processus de backup
  15. date_start=`date +'%d/%m/%Y @ %H:%M:%S'`;
  16.  
  17. # Choix du format de la date utilisé pour les dossiers
  18. format_date='%d%m%Y'
  19.  
  20. # Variable de date du jour, en fonction du format choisi
  21. date=`date +${format_date}`;
  22.  
  23. # Le nombre de jour que vous souhaitez archiver
  24. keepday="30";
  25.  
  26. # Calcul du nombre de jour, remontant à plus de "$keepday" jour(s)
  27. keepdate=`date --date "-${keepday} days" +${format_date}`;
  28.  
  29. # Le répertoire de création du backup journalier
  30. backup_dir='/tmp/'${date};
  31.  
  32. # Le chemin du rapport
  33. rapport='/tmp/rapport.log';
  34.  
  35. # Le chemin du log d'erreur
  36. ERREUR='/tmp/erreur.log'
  37.  
  38. # Le nom d'utilisateur de la base de donnée
  39. sql_user='root'
  40.  
  41. # Le mot de pass de la base de donnée
  42. sql_password='*******';
  43.  
  44. # L'ip ou le hostname de votre serveur FTP
  45. ftp_host='ftp.mondomaine.fr';
  46.  
  47. # L'utilisateur de votre serveur FTP
  48. ftp_user='myFtpUser';
  49.  
  50. # Le mot de passe de votre serveur FTP
  51. ftp_pass='myFTPP@$$vvOrD';
  52.  
  53. # Le dossier FTP de destination
  54.  
  55. ftpdirectory='/backup/'${date}
  56.  
  57. # L'adresse mail qui recevra le rapport
  58. mail='admin@mondomaine.fr';
  59.  
  60. #Liste les BDD à sauvegarder
  61. LISTEBDD=$( echo 'show databases' | mysql -u$sql_user -p$sql_password )
  62.  
  63. #Gestion des erreurs
  64. exec 1>/dev/null #On ne s'occupe pas de la sortie standard
  65. exec 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
  71. mkdir -p ${backup_dir};
  72. echo 'Rapport du '${date_start} > ${rapport};
  73. echo " " >> ${rapport};
  74.  
  75. # On sauvegarde la liste des paquets installés
  76. dpkg --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
  82. tar cfJ ${backup_dir}/www-${date}.tar.xz -C /var/www .
  83. tar cfJ ${backup_dir}/etc-${date}.tar.xz -C /etc .
  84. tar cfJ ${backup_dir}/opt-${date}.tar.xz -C /opt .
  85. tar 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.  
  90. for SQL in $LISTEBDD
  91. do
  92. if [ $SQL != "information_schema" ] && [ $SQL != "mysql" ] && [ $SQL != "Database" ] && [ $SQL != "performance_schema" ] && [ $SQL != "phpmyadmin" ]; then
  93. #echo $SQL
  94. mysqldump -u$sql_user -p$sql_password $SQL | gzip -9 > ${backup_dir}/${SQL}_${date}.sql.gz;
  95. fi
  96. done
  97. echo "Etat du dossier local :" >> ${rapport};
  98. ls -lh ${backup_dir} -I rapport* >> ${rapport};
  99. echo " " >> ${rapport};
  100.  
  101. # Envoie du dossier de sauvegarde vers le FTP
  102. echo "Etat du dossier distant :" >> ${rapport};
  103. lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "mirror -R ${backup_dir} ${ftpdirectory} ; quit" > /dev/null 2>${ERREUR};
  104. lftp ftp://${ftp_user}:${ftp_pass}@${ftp_host} -e "ls ${ftpdirectory} ; quit" >> ${rapport};
  105. echo " " >> ${rapport};
  106.  
  107. # Suppresion du dossier en local
  108. echo "Suppression du dossier local : ${backup_dir}" >> ${rapport};
  109. rm -rf ${backup_dir};
  110. echo " " >> ${rapport};
  111.  
  112. # Suppression du dossier distant de plus de "$keepday" jour(s)
  113. echo "Suppression du dossier distant de plus de ${keepday} jours : ${keepdate}" >> ${rapport};
  114. echo " " >> ${rapport};
  115.  
  116. # Copie de l'état des dossiers sur le FTP pour le rapport
  117. echo "Etat du FTP :" >> ${rapport};
  118. lftp 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
  121. date_end=`date +'%d/%m/%Y @ %H:%M:%S'`;
  122. echo " " >> ${rapport};
  123.  
  124. #Finalisation du rapport
  125. echo 'Fini le '${date_end} >> ${rapport};
  126. duration=$SECONDS
  127. echo "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
  129. if test -s /tmp/erreur.log
  130. then
  131. mutt -s "Backup ${date}" -a ${rapport} -- ${mail} < /tmp/erreur.log
  132. fi
  133. rm ${rapport}
  134. #rm ${ERREUR}
Add Comment
Please, Sign In to add comment