23jan 2006
Une save ? Quelle save ?
23:20 - Par chris - how-to - 11 commentaires
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"






11 commentaires
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
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
oups, sorry j'ai posté deux fois le même trackback suite à un refresh malencontreux ...
dsl
Et voilà que les spams s'excusent maintenant
No souci, Tatane, no souci !
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
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
> lcd $DIR_BACKUP c'est quoi lcd ?
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.
Il aurait ete interessant de mettre plusieurs types de transferts. ssh par exemple... un peu plus secure.
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...
Cela donne des saves allant de 0-blog.tar.gz à 6-blog.tar.gz
Moqueur va !