#!/bin/bash # ---- # # Script de backup serveur perso vers serveur distant # Fonctionnemenent : # 1. Targz de /var/www # 2. Targz de /etc/apache2/sites-available # 3. Dump de toutes les bases de données MySql # 4. Zip du backup courant avec protection par mot de passe # 5. Envoi sur serveur distant # 6. Suppression anciens backups # # A placer dans /etc/cron.daily # ---- # Génération date de début date_start=`date +'%d/%m/%Y @ %H:%M:%S'`; # Récupération timestamp pour génération des noms de dossiers / fichiers de backup timestamp=`date +%s`; # Le nombre de jour que vous souhaitez archiver keep='+15'; # Le répertoire de création du backup build_dir=/tmp/backup/${timestamp}/; # Génération du nom du fichier de backup (ZIP) backup_file=${build_dir}/backup-server-${timestamp}.zip; # Le chemin du rapport (celui-ci sera gardé, et envoyé par mail) rapport=/tmp/backup/rapport.log; sql_password='password'; backup_host='hostname.com'; # Mot de passe de cryptage gpg backup_pwd='password'; # Username serveur distant backup_user='username'; # Répertoire de backup distant backup_path='/home/username/backup/'; # L'adresse mail qui recevra le rapport mail='mail@domain.com'; # Création du repertoire de backup + Initialisation du rapport mkdir -p ${build_dir}; echo -e 'Début du backup : '${date_start}'\n' > ${rapport}; # Sauvegarde des fichiers VHOST echo '- Sauvegarde de /etc/apache2/sites-available/' >> ${rapport}; tar -zcf ${build_dir}/vhost.tar.gz /etc/apache2/sites-available/ # Sauvegarde de /var/www echo '- Sauvegarde de /var/www/' >> ${rapport}; tar -zcf ${build_dir}/www.tar.gz /var/www/ --exclude=app/cache/* --exclude=app/logs/* --exclude-vcs # Création du dump de toutes les bases de données avec mysqldump echo '- Dump de toutes les bases de données' >> ${rapport}; mysqldump -u root --password=${sql_password} --all-databases | gzip -9 > ${build_dir}/databases_dump.sql.gz; # Zip du dossier de backup avec password echo '- Création et protection par mot de passe du ZIP' >> ${rapport}; zip -P ${backup_pwd} -r ${backup_file} ${build_dir} # Envoi du fichier de backup vers le serveur distant fileinfo=`du -h ${backup_file}`; echo "- Envoi du fichier de backup vers serveur distant (${fileinfo})" >> ${rapport}; scp ${backup_file} ${backup_user}@${backup_host}:${backup_path} ## Suppresion du dossier en local echo '- Suppression des fichiers temporaires en local' >> ${rapport}; rm -rf ${build_dir}; echo -e "- Suppression des fichiers de backup de ${keep} jours\n" >> ${rapport}; ssh ${backup_user}@${backup_host} bash -c "' find ${backup_path}*.zip -mtime ${keep}; find ${backup_path}*.zip -mtime ${keep} -exec rm {} \; '" >> ${rapport} # Génération date de fin date_end=`date +'%d/%m/%Y @ %H:%M:%S'`; # Finalisation du rapport + envoi par mail echo -e 'Fin du backup : '${date_end} >> ${rapport}; mail -s "Backup serveur ${date_start}" ${mail} < ${rapport};