Sauvegardes · 6 min read · Dec 02, 2025

Étendre le serveur parfait - Debian Squeeze [ISPConfig 3] - Page 6

10. Sauvegardes des clients

Le contenu du script a changé le 29-03-2011. Veuillez mettre à jour

Ce script NE FONCTIONNERA PAS correctement pour ISPConfig v. 3.0.5 et supérieur. Vous devez effectuer de nombreux changements et ce n’est pas recommandé. Veuillez utiliser la nouvelle méthode de sauvegarde d’ISPConfig.

Le script suivant est un moyen facile de sauvegarder les données de vos clients et les bases de données de vos clients dans leur dossier de site web. Comme vous le savez peut-être, dans ISPConfig3, chaque client a un dossier sous la forme /var/www/clients/clientXY, dans lequel se trouvent tous ses sites web. Le script sauvegardera tous ses sites web dans chaque dossier web, en compagnie de ses bases de données, et le client pourra les télécharger. Dans le cas où un client a plus d’une base de données, alors toutes les bases de données seront sauvegardées dans son premier site (basé sur webID). Le script conservera également les 3 derniers jours de ces fichiers et les 3 derniers dimanches pour un usage administratif dans un répertoire de votre choix (le défaut est /var/backup/sites).

C’est un script très simple. Pour une solution plus avancée, consultez ce post.

Créez le script, rendez-le exécutable et éditez-le :

cd /root/scripts/  
touch mybackup.sh  
chmod 0700 mybackup.sh  
nano mybackup.sh

Le contenu doit être le suivant : (Changez les variables ispUSER, ispPASS, ispHOST, DEST et SITES pour répondre à vos besoins) :

#!/bin/bash  
# Script shell pour sauvegarder la base de données MySql et les sites web des clients  
#   
# Dernière mise à jour : Mars - 2011  
# --------------------------------------------------------------------  
# Ceci est un script shell gratuit sous GNU GPL version 2.0 ou supérieure  
# Copyright (C) 2011 iopen.gr  
# Retours/commentaires/suggestions : http://iopen.gr  
# --------------------------------------------------------------------  
#   
#           DESTINÉ à ISPConfig 3.0.x et supérieur  
#   
# Ce script sauvegardera chaque dossier web (web, stats, cgi, etc.)  
# de chaque client en compagnie de toutes les bases de données du client  
# Les sauvegardes seront placées dans le dossier du client du site web  
# Le script conservera la sauvegarde actuelle et les 2 précédentes  
# Il conservera également les 3 derniers dimanches  
# --------------------------------------------------------------------  
  
# Informations d'identification de la base de données. Utilisez un utilisateur de base de données avec un accès complet en lecture ou utilisez l'utilisateur root   
ispUSER="root"                  # Utilisateur de la base de données  
ispPASS="---yourpass---"        # mot de passe de l'utilisateur  
ispHOST="localhost"             # Nom d'hôte  
  
CURDIR="pwd"   
# Variables avec le chemin complet vers les binaires  
MYSQL="which mysql"  
MYSQLDUMP="which mysqldump"  
CHOWN="which chown"  
CHMOD="which chmod"  
GZIP="which gzip"  
TAR="which tar"   
  
# Votre répertoire principal de sauvegarde du serveur  
DEST="/var/backup"  
   
# Répertoire de sauvegarde des sites (UNIQUEMENT) dans votre répertoire principal de sauvegarde  
SITES="$DEST/sites"  
    
   
# Variables pour les dates au format yymmdd  
TODAY=`date +%Y%0m%0d`  
YESTERDAY=`date -d '1 day ago' +%Y%0m%0d`  
BACK2=`date -d '2 day ago' +%Y%0m%0d`  
BACK3=`date -d '3 day ago' +%Y%0m%0d`  
BACK22=`date -d '22 day ago' +%Y%0m%0d`  
   
[ ! -d $SITES ] && mkdir -p $SITES || :  
   
# Donner uniquement l'accès root aux sauvegardes dans les dossiers de ce script  
$CHOWN 0.0 -R $SITES  
$CHMOD 0600 $SITES  
  
# --------------------------------------------------------------------------   
# Supprimer les sauvegardes précédentes (actuelles) du répertoire client  
# Les sauvegardes sont sous la forme :  
# *BU*gz  
# -------- ATTENTION ---------  
# Ne stockez aucun autre fichier sous cette forme dans le répertoire des clients  
# --------------------------------------------------------------------------   
echo "-------------------------------------------------------------"  
  
QRY="use dbispconfig; SELECT web_domain.system_user, web_domain.system_group, \  
web_domain.document_root, web_domain.domain FROM web_domain WHERE  \  
web_domain.type!='alias' AND web_domain.system_user IS NOT NULL AND (LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"  
  
echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line  
do  # ${col[0]}=utilisateur de domaine / nom de dossier / utilisateur système, ${col[1]}=clientID / groupe système ,  
        while read -a col  # ${col[2]}=chemin vers le site web, ${col[3]}= nom de domaine  
do  
echo "    NETTOYAGE DES ANCIENNES SAUVEGARDES dans le dossier ${col[2]} "  
for delfile in ${col[2]}/*BU*gz ;   
do [ -f $delfile ] && rm $delfile;   
done  
done  
done  
  
# --------------------------------------------------------------------------   
# Supprimer tout ce qui a 22 jours et a la forme :  
# *[date de 22 jours]*gz  
# du répertoire $SITES du serveur  
# --------------------------------------------------------------------------   
                echo "-------------------------------------------------------------"  
echo "    NETTOYAGE DES ANCIENNES SAUVEGARDES dans le dossier SITES "  
for delfile in $SITES/*$BACK22*gz ;   
do [ -f $delfile ] && rm $delfile;    
done  
echo "-------------------------------------------------------------"  
echo "                                                             "  
echo "                                                             "  
  
# --------------------------------------------------------------------------   
# Pour chaque client, sauvegarder sa base de données dans son dossier de site web   
# Pour les clients avec plusieurs sites, sauvegarder toutes les bases de données dans son premier site  
# De plus, copier la sauvegarde d'aujourd'hui dans le répertoire $SITES du serveur   
# Supprimer la sauvegarde qui a plus de 3 jours du répertoire $SITES du serveur   
# Conserver les 3 derniers dimanches  
# --------------------------------------------------------------------------   
  
QRY="use dbispconfig; SELECT web_database.database_name , web_database.database_user ,\  
 min(web_domain.system_user) as muser, web_domain.system_group, min(web_domain.document_root) as mpath, \  
web_domain.domain FROM web_database, web_domain WHERE web_database.sys_userid=web_domain.sys_userid \  
AND web_database.sys_groupid=web_domain.sys_groupid AND web_domain.type='vhost' \  
AND web_domain.system_user IS NOT NULL AND (LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) \  
 GROUP BY web_database.database_name , web_database.database_user,  web_domain.system_group;"  
  
echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line  
do  # ${col[0]} = nom de la base de données, ${col[1]}=utilisateur de la base de données , ${col[2]}=utilisateur de domaine / nom de dossier / utilisateur système,  
        while read -a col   #${col[3]}=clientID / groupe système , ${col[4]}=chemin vers le site web  
do  
echo "          DB: "${col[0]}   
echo "-------------------------------------------------------------"  
echo "Sauvegarde de la DB:" ${col[0]}  "dans :"  ${col[4]}/${col[0]}BU.gz  
$MYSQLDUMP -u $ispUSER -h $ispHOST -p$ispPASS -c --add-drop-table --add-locks \  
 --quick --lock-tables ${col[0]} | $GZIP -9 > ${col[4]}/${col[0]}BU.gz  
cp ${col[4]}/${col[0]}BU.gz $SITES/${col[0]}.$TODAY.gz  
        if [ `date -d '3 day ago' +%u` -ne 7 ] # si il y a 3 jours ce n'est pas dimanche  
        then    #supprimer la sauvegarde  
                [ -f $SITES/${col[0]}.$BACK3.gz ] && rm $SITES/${col[0]}.$BACK3.gz  
        fi  
$CHOWN ${col[2]}:${col[3]} ${col[4]}/${col[0]}BU.gz  
$CHMOD 0660 ${col[4]}/${col[0]}BU.gz  
echo "-------------------------------------------------------------"  
echo "                                                             "  
done  
done  
  
# --------------------------------------------------------------------------   
# Pour chaque client, sauvegarder ses sites dans son dossier de site web   
# De plus, copier la sauvegarde d'aujourd'hui dans le répertoire $SITES du serveur   
# Supprimer la sauvegarde qui a plus de 3 jours du répertoire $SITES du serveur   
# Conserver les 3 derniers dimanches  
# --------------------------------------------------------------------------   
  
  
QRY="use dbispconfig; SELECT web_domain.system_user, web_domain.system_group,\  
 web_domain.document_root, web_domain.domain FROM web_domain WHERE  \  
web_domain.type!='alias' AND web_domain.system_user \  
IS NOT NULL AND (LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"  
  
echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line  
do     # ${col[0]}=utilisateur de domaine / nom de dossier / utilisateur système, ${col[1]}=clientID / groupe système ,  
        while read -a col   # ${col[2]}=chemin vers le site web, ${col[3]}= nom de domaine  
do  
echo "                                                             "  
echo "         Site:" ${col[3]}  
echo "-------------------------------------------------------------"  
echo "Sauvegarde du site : " ${col[2]}/  "dans :"  ${col[2]}/${col[3]}BU.tar.gz  
cd ${col[2]}  
sudo -u ${col[0]} $TAR -czf ${col[2]}/${col[3]}BU.tar.gz .  
cp ${col[2]}/${col[3]}BU.tar.gz $SITES/${col[3]}.$TODAY.tar.gz  
        if [ `date -d '3 day ago' +%u` -ne 7 ] # si il y a 3 jours ce n'est pas dimanche  
        then    #supprimer la sauvegarde  
                [ -f $SITES/${col[3]}.$BACK3.tar.gz ] && rm $SITES/${col[3]}.$BACK3.tar.gz  
        fi  
$CHOWN ${col[0]}:${col[1]} ${col[2]}/${col[3]}BU.tar.gz  
$CHMOD 0660 ${col[2]}/${col[3]}BU.tar.gz  
  
echo "-------------------------------------------------------------"  
echo "                                                             "  
done  
done  
cd $CURDIR

Vous pouvez exécuter le script de sauvegarde en exécutant :

/root/scripts/mybackup.sh

ou vous pouvez l’ajouter en tant que tâche cron (par exemple, tous les jours à 22h30) :

crontab -e

et ajouter la ligne suivante :

30 22 * * * /root/scripts/mybackup.sh > /dev/null 2>> /var/log/backup.log

Remarques finales

Veuillez, n’hésitez pas à commenter quoi que ce soit pour ce tutoriel dans une menace appropriée sur les forums HowtoForge. Les commentaires utiles seront inclus dans une future version mise à jour.

Ceci est la première version et aussi prudent que j’ai été, le tutoriel peut contenir des erreurs. Veuillez me faire part de celles-ci, afin de les corriger dès que possible.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.