Salagir's Blog

Old name was: "Why do witches burn?"

This is french section. Go to English version

Rangeur de backups

Le janvier 26th, 2009

Vous me croyiez mort ? C’est que vous n’avez pas beaucoup suivi mes autres sites alors…
Puisque je n’ai pas fais de mise à jour ici depuis la mort soudaine de mon serveur, parlons de backups.

Bon, backuper c’est super facile. En gros j’utilise trois façons :

  • Pour une BDD : mysqldump [infos cnx] |gzip > backupbdd.sql.gz
  • Pour des fichiers peu nombreux, dont le changement est grave, genre configuration : tar czvf yoyobackup.tar.gz lesfichiers/
  • Pour des fichiers à accéder facilement, et/ou nombreux : rsync -av moi/ autremachine:moi/

Dans les deux premières solutions, j’ajoute au nom de fichier la date du jour, et hop, j’ai pleins de backups avec un version par jour, pratique si une erreur a été foutue y’a une semaine. Un backup classique n’aurai que la version d’hier, j’ai pas l’air con.

Les administrateurs réseaux connaissent bien le problème et gèrent donc des tonnes de backups par date. Évidement ils ne gardent pas tout, c’est trop gros, donc plus on remonte dans le passé, moins on a de backup.
Il existe différents moyens de gérer ces backups par date, dont dirvish pour backuper toute une arborescence et l’inépuisable logrotate, qui a le malheur de gérer beaucoup mieux les logs que les fichiers classiques comme mes fichiers compressés.

Comme je n’ai trouvé aucune solution simple de faire de l’ordre dans mes fichiers compressés pour ne pas avoir 58 fichiers au bout de 58 jours, je l’ai codée moi-même, pour changer.

Vous pouvez télécharger le code :
EDIT : j’ai réglé des bugs, nous en sommes maintenant à la version 1.1 (Avr 2009)

Il y a un mode « inoffensif », où le programme dit ce qu’il détruirait et renommerait au lieu de le faire vraiment.

Exemple d’utilisation pour ma base de donnée, grâce à laquelle lors de la mort de mon serveur, seuls quelques commentaires utilisateurs du jour même ont disparus (oui j’aurai pu aussi utiliser une synchro SQL mais je suis pas admin moi) :

#!/bin/sh

# ceci est cronné tous les jours tôt le matin

dirdate=`date +"%Y-%m-%d"`
path=/home/salagir

mysqldump -u... -p... --skip-extended-insert --all-databases | gzip > $path/backupsbdd/$dirdate.sql.gz

php organize_backups.php $path/backupsbdd/'*'

Leave a Reply