Script de backup serveur Web Mysql APP
Aujourd’hui pas de tutorial mais une ébauche de script de sauvegarde pour serveur débian 7.
Attention se script est en cours d’amélioration mais les bases sont la, vous pouvez donc déjà l adapter à vos besoins.
Que fait ce script?
- Backup vos sites internets, chaque site a sa propre archive
- Backup vos bases de données Mysql, chaque base à sa propre archive
- Backup votre répertoire de configuration /etc
- Peut backuper une liste de répertoire
- Roulement sur 5 jours
Note du 11/03/2015 : rajout de -c -Q –extended-insert dans le mysqldump afin de réduire le dump de la base mais surtout d augmenter la vitesse d import.
#!/bin/bash -
########################################################################
# Auteur: BERTHELOT Ivan
# GitHub: https://github.com/yuharla
# Date : 10/10/2014
# Descriptif : Script backup avec X jours de rétentions pour MySql, Web et Application pour Débian
#Pre Requis : montage vers un nas
# Commande :
########################################################################
#### ####
# Constante #
#### ####
#Nom du script utiliser pour log et tmp
SCRIPTNAME="backup_server.sh"
# Verification que le script est lance par root (1=oui 2=non)
ENABLE_VERIF_ROOT=0
# Vérification que notre script n est pas deja (1=oui 2=nom)
ENABLE_SCRIPT_RUN=0
HOSTMYSQL="localhost"
MDPMYSQL="motdepasse"
USERMYSQL="root"
APACHE_FOLDER='/data/www'
FOLDER_APP="/home/minecraft /home/teamspeak"
# Envoi d un mail a la fin (1=oui 2=nom)
ENABLE_MAIL=0
EMAIL="tonemail@atoi.com"
DATE=`date +"%Y-%m-%d"`
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
TAR="$(which tar)"
DBS="$(mysql -u $USERMYSQL -h $HOSTMYSQL -p$MDPMYSQL -Bse 'SHOW DATABASES')"
SITES="$(ls -I '*.html' -I 'log' -I '*.php' $APACHE_FOLDER)"
YEAR=$(date '+%Y')
MONTH=$(date '+%m')
DAY=$(date '+%d')
TEMP_FOLDER="/tmp/$SCRIPTNAME.$DATE"
BACKUP_FOLDER="/home/backup"
LOG_FOLDER="/var/log/"
BACKUP_FILE="$BACKUP_FOLDER$SCRIPTNAME-$DATE.tgz"
LOG_FILE="$LOG_FOLDER$SCRIPTNAME-$DATE.log"
DIRSAVESITES="$BACKUP_FOLDER/web"
DIRSAVESQL="$BACKUP_FOLDER/bdd"
DIRSAVEAPP="$BACKUP_FOLDER/app"
DEST_BKP="/mnt/googledrive"
DESTWEB="$DEST_BKP/WEB/$YEAR/$MONTH/$DAY"
DESTBDD="$DEST_BKP/BDD/$YEAR/$MONTH/$DAY"
DESTAPP="$DEST_BKP/APP/$YEAR/$MONTH/$DAY"
MAXNBRBKP="5"
# On check les repertoires
if [ ! -d $BACKUP_FOLDER ]; then
mkdir -p $BACKUP_FOLDER
else
:
fi
if [ ! -d $DIRSAVESITES ]; then
mkdir -p $DIRSAVESITES
else
:
fi
if [ ! -d $DIRSAVESQL ]; then
mkdir -p $DIRSAVESQL
else
:
fi
if [ ! -d $DIRSAVEAPP ]; then
mkdir -p $DIRSAVEAPP
else
:
fi
if [ ! -d $DESTWEB ]; then
mkdir -p $DESTWEB
else
:
fi
if [ ! -d $DESTBDD ]; then
mkdir -p $DESTBDD
else
:
fi
if [ ! -d $DESTAPP ]; then
mkdir -p $DESTAPP
else
:
fi
#### ####
# Fonctions #
#### ####
displaymessage() {
echo "$*"
}
displaytitle() {
displaymessage "------------------------------------------------------------------------------"
displaymessage "$*"
displaymessage "------------------------------------------------------------------------------"
}
displayerror() {
echo -e "\r\e[0;31m [ERROR]\e[0m $*"
}
# First parameter: ERROR CODE
# Second parameter: MESSAGE
displayerrorandexit() {
local exitcode=$1
shift
displayerror "$*"
exit $exitcode
}
# First parameter: MESSAGE
# Others parameters: COMMAND (! not |)
displayandexec() {
local message=$1
echo -n "[En cours] $message"
shift
$* >> $LOG_FILE 2>&1
local ret=$?
if [ $ret -ne 0 ]; then
echo -e "\r\e[0;31m [ERROR]\e[0m $message"
# echo -e "\r [ERROR] $message"
else
echo -e "\r\e[0;32m [OK]\e[0m $message"
# echo -e "\r [OK] $message"
fi
return $ret
}
#### ####
# Preparation #
#### ####
if [ $ENABLE_VERIF_ROOT = 1 ];then
if [ $EUID -ne 0 ]; then
displayerror "Le script doit être lancé en root"
exit 1
fi
fi
if [ $ENABLE_SCRIPT_RUN = 1 ];then
nb_occurence=$(ps -C $SCRIPTNAME | wc -l)
if [ $nb_occurence = 4 ];then
displayerror "Le script est deja lance"
exit 1
fi
fi
#### ####
# Code Source #
#### ####
## Backup des bases de données
for db in $DBS
do
if [ "$db" != "information_schema" ]; then
FILE=$DIRSAVESQL/bdd-$db-$DATE.gz
mysqldump -c -Q --extended-insert -u $USERMYSQL -h $HOSTMYSQL -p$MDPMYSQL $db | $GZIP -9 > $FILE
mv $FILE $DESTBDD/bdd-$db-$DATE.gz
fi
done
## Backup des sites internets
for site in $SITES
do
FILE=$DIRSAVESITES/web-$site-$DATE.gz
tar cvfz $FILE $APACHE_FOLDER/$site
mv $FILE $DESTWEB/web-$site-$DATE.gz
done
## Backup des application
FILE=$DIRSAVEAPP/bdd-$db-$DATE.gz
tar cvfz $FILE /etc/ $FOLDER_APP
mv $FILE $DESTAPP/app-$DATE.gz
## Nettoyages des backups trop vieilles
OLDYEAR=$(date '+%Y' --date="$MAXNBRBKP days ago")
OLDMONTH=$(date '+%m' --date="$MAXNBRBKP days ago")
OLDDAY=$(date '+%d' --date="$MAXNBRBKP days ago")
rm -Rf $DEST_BKP/WEB/$OLDYEAR/$OLDMONTH/$OLDDAY
rm -Rf $DEST_BKP/BDD/$OLDYEAR/$OLDMONTH/$OLDDAY
rm -Rf $DEST_BKP/APP/$OLDYEAR/$OLDMONTH/$OLDDAY
rm -Rf $BACKUP_FOLDER/*
displaytitle "Fin"
#### ####
# Gestion retour #
#### ####
if [ $ENABLE_MAIL = 1 ];then
if [ -z "$LOG" ];then
echo "Backup de votre serveur ok" | mail -s "$MACHINE - Backup" $EMAIL
else
echo $LOG | mail -s "[ERRREUR] $MACHINE - Backup" $EMAIL
fi
fi



Laisser un commentaire