Mes objectifs :
- sauvegarde régulière (mensuelle, hebdomadaire et quotidienne)
- dépôt de chaque sauvegarde sur un serveur FTP
Car les besoins de restore peuvent être différents :
- Le crash disque exige l'information la plus à jour possible et donc une ''save quotidienne''.
- La modification d'un paramètre s'avère avoir corrompu vos données mais vous ne vous en apercevez que 10 jours plus tard. Réponse : "la save hebdo".
- Vous avez fait le ménage dans votre blog. Mais au bout de quelques mois, vous vous dites que ce vieil article sur la prose sous Bash était pas si mal. "Save mensuelle"

- prise en paramètre de la périodicité,
- création de 3 répertoires /mybackup/mois, semaine et jour tant en local que sur le serveur FTP
- banalisation des noms des sauvegardes permettant leur écrasement de manière régulière et automatique :
- quotidienne (7 saves en rotation): de 01-blog.tar.gz à 06-blog.tar.gz
- hebdo (5 saves en rotation) : de 0-blog.tar.gz à 4-blog.tar.gz
- mensuelle (12 saves en rotation) : de 01-blog.tar.gz à 12-blog.tar.gz
Exemple : pour passer la save quotidienne d'une rétention de 7 jours à 2 jours, il faut remplacer la portion de ligne "$jour % 7" par "$jour % 2".
Mise en oeuvre via CRON :
0 23 1 * * /chemin/save_blog.sh moisUne save mensuelle le 1er de chaque mois. Une save hebdo tous les dimanches. Une save qutodienne du lundi au samedi.
20 23 * * 0 /chemin/save_blog.sh semaine
40 23 * * 1-6 /chemin/save_blog.sh jour
Script save_blog.sh basé sur celui de NiKo avec modification :
#!/bin/bash
# ### save_blog.sh : script de NiKo(c) adapté pour le dépôt FTP et la retention des saves
# ### Ref : http://www.prendreuncafe.com/blog/2006/01/22/382-programmer-ses-backups-dotclear-grace-a-un-script-bash-et-cron
# ### Initialisation des variables ###
# variables concernant les repertoires
DIR_BLOG="/var/www/blog" # repertoire racine du site (blog)
DIR_BASE_BACKUP="/var/mybackup" # repertoire de base de stockage des backups
DIR_BACKUP="$DIR_BASE_BACKUP/$1" # on recupere le premier parametre du script qui indique le type de backup
# variables concernant la base de donnees
SQL_HOST="host"
SQL_USER="user"
SQL_PASS="password"
SQL_BASE="databasename"
CURRENTDATE=$(date +%Y%m%d)
# ### Periodicite de sauvegarde ###
case "$1" in
"mois" )
#CURRENTDATE=$(date +%Y%m%d)
SERIALNUMBER=$(date +%m)
;;
"semaine" )
jour=$(date +%d)
let "SERIALNUMBER=$jour / 7"
;;
"jour" )
jour=$(date +%d)
let "SERIALNUMBER=$jour % 7"
;;
* )
echo "Usage: $0 "
echo "Sauvegarde du blog avec periodicite passee en parametre"
echo ""
echo "periodicite: jour, semaine ou mois"
exit
esac
# ### Sauvegarde ###
DBDUMP_FILENAME="$SERIALNUMBER-dump.sql"
BLOGARCHIVE_FILENAME="$SERIALNUMBER-blog"
echo "Export de la base de données..."
touch $DIR_BACKUP/$DBDUMP_FILENAME
mysqldump -h $SQL_HOST -u $SQL_USER --password=$SQL_PASS $SQL_BASE > $DIR_BACKUP/$DBDUMP_FILENAME
echo "Compression de l'export..."
tar czf $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz $DIR_BACKUP/$DBDUMP_FILENAME
echo "Création de l'achive globale..."
tar czf $DIR_BACKUP/$BLOGARCHIVE_FILENAME.tar.gz $DIR_BLOG $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz
# ### Envoi FTP ###
echo "Envoi FTP de la sauvegarde du blog ..."
ftp -n siteftp <<Fin-De-Session
user username "password"
binary
cd mybackup
cd $1
lcd $DIR_BACKUP
put "$BLOGARCHIVE_FILENAME.tar.gz"
bye
Fin-De-Session
# ### Nettoyage ###
echo "Suppression des fichiers temporaires..."
rm -f $DIR_BACKUP/$DBDUMP_FILENAME
rm -f $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz
echo "Sauvegarde effectuee dans $DIR_BACKUP/$BLOGARCHIVE_FILENAME.tar.gz"





