×

Script de backup serveur Web Mysql APP

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