A l'image de NiKo, la sauvegarde de mon environnement me titille depuis quelques jours. Le tout dans le même contexte que NiKo à savoir un accès SSH disponible sur mon environnement.
Mes objectifs :
Car les besoins de restore peuvent être différents :
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 :
Script save_blog.sh basé sur celui de NiKo avec modification :
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"

Comments
#1
NiKo
Tuesday, January 24 2006, 09:35
Hey, you did it ^^
Je verrais juste bien les paramètres de connexion FTP en variables, sinon m'a l'air bien top tout ça. Je vais tester
#2
chris
Tuesday, January 24 2006, 09:52
Oui, tu as entièrement raison pour la mise en variables des données FTP.

On pourrait même aller plus loin en externalisant (factorisation) dans des scripts la partie génération des noms banalisés et les dépôts FTP.
Tiens moi au courant pour la mise en oeuvre FTP
#3
Tatane
Tuesday, January 31 2006, 11:58
oups, sorry j'ai posté deux fois le même trackback suite à un refresh malencontreux ...
dsl
#4
chris
Tuesday, January 31 2006, 14:02
Et voilà que les spams s'excusent maintenant
No souci, Tatane, no souci !
#5
biou
Tuesday, February 7 2006, 16:57
en ce qui concerne les backups, j'aime bien rsync... voir cet article: http://www.mikerubel.org/computers/rsync_snapshots/
ca prendra surement moins de place que tes backups actuels
#6
chris
Tuesday, February 7 2006, 17:16
Le gain de place, c'est grâce à la sauvegarde incrémentale ? OK sur des file systems qui ne bougent pas trop, tu as raison.

Pour ce qui est du dump de la database, cela fonctionnerait ? Et puis, il y a les limites de ma confiance sur les restaurations se basant sur de l'incrémental.
Mais là, je le reconnais, je suis totalement instinctif et je ne suis donc plus du tout factuel
#7
Chty
Sunday, March 5 2006, 20:10
> lcd $DIR_BACKUP c'est quoi lcd ?
#8
chris
Monday, March 6 2006, 09:16
lcd : tu te déplaces de manière locale par rapport au cd qui te déplace sur l'hôte distant FTP.
Petit mémento de commandes FTP.
#9
Chty
Saturday, March 11 2006, 10:55
Il aurait ete interessant de mettre plusieurs types de transferts. ssh par exemple... un peu plus secure.
#10
Nico
Wednesday, October 11 2006, 15:42
Les noms des sauvegardes seraient-ils trop banals, ou bien adaptés à des semaines de 6 jours?
de 01-blog.tar.gz à 06-blog.tar.gz, ça nous fait des semaines de 6 jours
Mince, c'est moi qui me suis trompé de planète, je repars là où les semaines durent bien 42 j...
#11
chris
Wednesday, October 11 2006, 16:28
Cela donne des saves allant de 0-blog.tar.gz à 6-blog.tar.gz
Moqueur va !