Le Rayon UX

La radiographie du Web en temps presque réel / thème en chantier (je m'appelle Teuse)

Un script de backup pour votre serveur

J’ai enfin mis en place sur mon serveur un script de sauvegarde correct. Il exporte les bases de données dans des fichiers séparés et datés, avant de les envoyer sur rsync.net, un service de sauvegardes externalisé utilisant rsync, scp ou sftp au choix. C’est cette première solution que j’ai choisie.

#!/bin/sh

IFS='

'

DBHOST="" # Votre serveur de base de données
DBUSER="" # Votre utilisateur de base de données
DBPASS="" # Votre mot de passe de base de données
BACKUPDB="" # Le chemin vers votre répertoire de backup sans le / final
DBDATE=`date "+%Y%m%d"`
DBTODUMP=$(mysql -u$DBUSER -h$DBHOST -p$DBPASS -Bse 'SHOW DATABASES')

RSHOST="" # Hôte de votre service rsync
RSPATH="" # Liste des répertoires à sauvegarder, sans le / final, séparés par un espace
RSEXCLUDE="" # Chemin vers le fichier d'exclusion rsync

# Sauvegarde des bases de données
for db in $DBTODUMP
do
  mysqldump -u$DBUSER -p$DBPASS -q -e --single-transaction --add-drop-database --add-drop-table -B $db > ${BACKUPDB}/${db}_${DBDATE}.sql
  bzip2 ${BACKUPDB}/${db}_${DBDATE}.sql
done

# Sauvegarde de système de fichiers
rsync -avz --delete --progress --exclude-from=${RSEXCLUDE} ${RSPATH} ${BACKUPDB} ${RSHOST}:

# Suppression des fichiers de sauvegarde
rm ${BACKUPDB}/*.bz2

Et voilà, il ne vous reste plus qu’à insérer ce script dans votre crontab pour le faire tourner quotidiennement, et le tour est joué.

  • Par Oncle Tom 21/07/2009 at 10h13

    Perso j’utilise backup-manager. Il travaille très bien comme un grand et sait sauvegarder de manière incrémentable et sur n’importe quoi (disque, FTP, SCP etc.)


  • Par Édouard 21/07/2009 at 10h57

    Pour ma part, j’utilise astrails-safe: http://github.com/astrails/safe/tree/master

    Safe supporte Mysql, Postgresql, les backups de manière incrémentable ou non, et surtout c’est un vrai plaisir à configurer (en ruby).

    J’envoie le tout crypté sur Amazon S3, et il me semble que c’est un peu moins cher que rsync.net. http://aws.amazon.com/s3/#pricing


  • Par Guillaume 21/07/2009 at 23h54

    L’option -C (ou –compress) pour le mysqldump peut notoirement accélérer les choses si ta base est grassouillette et distante.


  • Par kinkey 27/07/2009 at 12h49

    Perso j’utilise backupeur http://codingteam.net/project/backupeur


  • Par Off Topic 21/09/2009 at 10h08

    Dors tranquille ;)

    L’idée est séduisante (celle qui consiste à penser qu’on résistera au crash) mais votre script ne teste aucun des retours des programmes utilisés. Si bien que, lorsque celui-ci plantera (aussi sûrement que le serveur crashera), vous ne le saurez pas.

    Vous pouvez insérer des

    if [ $? -ne 0 ] ; then echo “[ date ] something went wrong” | mail -s “subject” toto@toto.com fi

    si vous souhaitez, après chaque appel, être ou bien certain que cela s’est bien passé, ou bien être (presque) certain d’être prévenu dans le cas contraire. Le presque parce que le mail doit fonctionner (ie. pas d’autres erreurs).


Commentaire Un script de backup pour votre serveur