#!/bin/sh # # backup_sites_mysql.sh, Copyright © 2006-2011 Matteo Cypriani # # This program is free software. It comes without any warranty, to # the extent permitted by applicable law. You can redistribute it # and/or modify it under the terms of the Do What The Fuck You Want # To Public License, Version 2, as published by Sam Hocevar. See # http://sam.zoy.org/wtfpl/COPYING for more details. ############################### ##### Options utilisateur ##### # Bases de données à sauvegarder : BASES="information_schema mysql NAME_DB1 NAME_DB2 ..." # Utilisateur et mot de passe MySQL à utiliser : USER="backup_user" PASS="backup_password" # Répertoires à sauvegarder : #REPS="/opt/svn /opt/www" REPS="/srv/www" # Répertoire de destination des sauvegardes : REP_TMP_SAUV="/tmp/sauv" # Répertoire où l'on déplace les sauvegardes après exécution : REP_MV_SAUV="/home/sauv" # Utilitaire de compression, qui doit avoir une interface à la gzip # (gzip, bzip2, xz…) : COMPRESS="xz" # Niveau de compression à fournir à l'utilitaire de compression # (y compris le tiret). Commenter pour utiliser la valeur par défaut : #COMPRESS_LEVEL="-6" # Extension des fichiers compressés (gz, bz2, xz…) : ZEXT="xz" ################################# ##### Suite des préparatifs ##### umask 077 DATE="$(date +'%Y-%m-%d')" # date au format année-mois-jour REP_SAUV="$REP_TMP_SAUV/$DATE" # Création du répertoire de destination et du répertoire final mkdir -p "$REP_SAUV" || exit 2 mkdir -p "$REP_MV_SAUV" || exit 2 # Sauvegarde des bases de données for BASE in $BASES ; do FICH_DUMP="$REP_SAUV/${BASE}_${DATE}.dump" mysqldump --lock-tables -u "$USER" -p"$PASS" -B "$BASE" > "$FICH_DUMP" $COMPRESS "$COMPRESS_LEVEL" "$FICH_DUMP" # On compresse après avoir terminé le dump afin que la BDD ne soit pas verrouillée trop longtemps. done # Sauvegarde des répertoires for REP in $REPS ; do if [ -e $REP ] ; then ARCH="$REP_SAUV/$(basename "$REP")_$DATE" tar cf - $REP | $COMPRESS -9 > "$ARCH".tar."$ZEXT" else echo "Erreur ! Le fichier « $REP » n'existe pas." >&2 fi done # Déplacement de la sauvegarde mv "$REP_SAUV" "$REP_MV_SAUV" || echo "Erreur lors du déplacement de la sauvegarde de « $REP_SAUV » vers « $REP_MV_SAUV »." >&2 # Suppression du répertoire temporaire rmdir "$REP_TMP_SAUV" 2>/dev/null # Message final REP_MV_SAUV="$REP_MV_SAUV"/$DATE echo "Sauvegarde terminée. Contenu du répertoire « $REP_MV_SAUV » :" \ls -lh "$REP_MV_SAUV"