Skip to content

Instantly share code, notes, and snippets.

@bobey
Last active August 29, 2015 14:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save bobey/d58c921035a9011c1b4f to your computer and use it in GitHub Desktop.
Save bobey/d58c921035a9011c1b4f to your computer and use it in GitHub Desktop.
Backup script
#!/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};
#!/bin/bash
# ----
#
# Script de backup d'un dossier donné chaque semaine
# Fonctionnemenent :
# 1. Zip du backup avec protection par mot de passe
# 2. Suppression anciens backups
#
# A placer dans /etc/cron.weekly
# ----
# 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='+30';
# Répertoire de backup
backup_path='/home/username/backup';
# Génération du nom du fichier de backup (ZIP)
backup_file=${backup_path}/backup-${timestamp}.zip;
folder_to_save=/path/to/folder
# Mot de passe de cryptage gpg
backup_pwd='password';
# Création du repertoire de backup
mkdir -p ${backup_path};
echo -e 'Début du backup : '${date_start}'\n';
# Zip du dossier de backup avec password
echo '- Création et protection par mot de passe du ZIP';
zip -P ${backup_pwd} -r ${backup_file} ${folder_to_save}
echo -e "- Suppression des fichiers de backup de ${keep} jours\n";
find ${backup_path}*.zip -mtime ${keep} -exec rm {} \;
# Génération date de fin
date_end=`date +'%d/%m/%Y @ %H:%M:%S'`;
echo -e 'Fin du backup : '${date_end};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment