Script de sauvegarde automatique

Ce petit bout script à pour but de faire une sauvegarde incrémentale et automatisée grâce au outils rsync et cron ainsi que le langage de script bash et éventuellement de SSH.

Il est aussi prévu de pouvoir l’utiliser pour une sauvegarde d’un site web distant disposant d’un serveur ssh ainsi que des commandes pré-sauvegarde dans le fichier de configuration.

Utilisation

Directe en ligne de commande

# bash rsyncer.sh fichier.conf

Tâche  »cron »

En cas d’utilisation à travers SSH, voir d’abord: connexion_ssh_sans_mot_de_passe

Ensuite, il faut définir une tâche cron qui s’executera périodiquement. L’exécution des tâches cron se fait en arrière plan, sans aucun affichage. Il peut donc être utile de générer de fichier de log en redirigeant la sortie standard vers un fichier.

La crontab pourrai ressembler à cela, pour une sauvegarde d’arofarn.info par un NAS tous les jours à 5h00 avec la création d’un fichier de log écrasé à chaque fois:

#minute hour mday month wday who command
0 5 * * * arofarn sh /volume1/homes/arofarn/rsyncer/rsyncer.sh /volume1/homes/arofarn/rsyncer/conf.d/arofarn.info.conf > /volume1/homes/arofarn/rsyncer/log/arofarn.info.log

Script principal: rsyncer.sh

#!/bin/bash
#########################################
# Script de sauvegarde via rsync et ssh #
#########################################

# Le fichier de configuration est fourni en argument

source $1

echo ""
echo "Début de la sauvegarde"
echo "######################"
echo ""
echo "Fichier de configuration: $1"

echo "Création du répertoire de sauvegarde incrémentale:"
echo "$DESTINATION/$DATE"
mkdir $DESTINATION/$DATE

# Commande de sauvegarde
rsync $OPTIONS --exclude-from=$EXCLUS --backup-dir=$DESTINATION/$DATE $CIBLE $DESTINATION/$DERNIER

echo ""
echo "Fin de la sauvegarde"
echo "####################"

Le script de sauvegarde est donc très simple ! Le reste est dans le fichier de configuration.

Fichier de configuration

Complet (connexion ssh + commande pré-sauvegarde)

Exemple concret et complet: arofarn.info.conf

Cet exemple permet la sauvegarde d’un site distant à travers une connexion sécurisée SSH et lance en plus deux commande de copie des bases de donnée MySQL inaccessibles directement depuis Internet. Les commandes de pré-sauvegarde ne sont absolument pas obligatoire.

Quelques explications:

  • le paramètre CIBLE est en générale le chemin vers le répertoire à sauvegarder. Ici il est plus complexe pour permettre la sauvegarde d’un répertoire via une connexion SSH;
  • DESTINATION est je pense assez explicite comme nom;
  • DERNIER: ce paramètre est le nom de la version courante de la sauvegarde. Il s’agit d’un sous-répertoire de DESTINATION;
  • DATE: fourni le nom du sous-répertoire de DESTINATION ou seront copier les anciennes versions des fichiers modifier ou supprimer depuis la sauvegarde précédentes (sauvegarde incrémentale);
  • EXCLUS: Il est fait référence à un fichier vide.exclus. Il s’agit d’une liste des noms de fichiers ou répertoires à ne pas sauvegarder. Il y a un nom de fichier ou répertoire ou une expression régulière par ligne. Dans mon cas, ce fichier est vide, mais il peut être utiles de ne pas sauvegarder des fichiers temporaires ou des fichiers volumineux non-indispensables (vidéos par exemple).
  • OPTIONS: ce sont les options fourni à rsync pour la sauvegarde. Voir la documentation de rsync.
# Configuration de la sauvegarde d'arofarn.info

# Répertoire à sauvegarder
CIBLE="-e ssh userXXXXXXXXX@arofarn.info:~/"

# Répertoires de la sauvegarde:
DESTINATION="/media/Sauvegardes/arofarn.info"
DERNIER="derniere"
DATE=`date +%Y%m%d_%Hh%M`

# Liste des répertoires et fichiers à exclure:
EXCLUS="conf.d/vide.exclus"

# Options
OPTIONS="--archive --verbose --compress --force --ignore-errors --delete --delete-excluded --backup"

# Commandes pre-sauvegarde optionnelles
# Création des sauvegardes de base de données grâce à msqldump executer via ssh

echo "BDD: WordPress, blog.arofarn.info"
ssh userXXXXXXXXX@arofarn.info 'mysqldump --compress --opt --host=db-server --user=db-userXXXXXXXXX --password=passwdXXXXXXXXX XXXXXXXXXXX > ~/db/blog-arofarn.info.sql'
echo "BDD: ZenPhoto, zen.arofarn.info"
ssh userXXXXXXXXX@arofarn.info 'mysqldump --compress --opt --host=db-server --user=db-userYYYYYYYYY --password=passwdYYYYYYYYY YYYYYYYYYYY > ~/db/zen-arofarn.info.sql'

Une réflexion sur « Script de sauvegarde automatique »

Les commentaires sont fermés.