scripts/backup/backup_sites_mysql.sh

80 lines
2.4 KiB
Bash
Executable File

#!/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"