Backup Clienti · 6 min read · Dec 02, 2025

Estensione del Server Perfetto - Debian Squeeze [ISPConfig 3] - Pagina 6

10. Backup dei Clienti

Il contenuto dello script è cambiato il 29-03-2011. Si prega di aggiornare

Questo script NON funzionerà correttamente per ISPConfig v. 3.0.5 e superiori. È necessario apportare molte modifiche e non è raccomandato. Si prega di utilizzare il nuovo metodo di backup di ISPConfig.

Il seguente script è un modo semplice per eseguire il backup dei dati dei tuoi clienti e dei database dei tuoi clienti nella loro cartella del sito web. Come saprai, in ISPConfig3 ogni cliente ha una cartella nella forma /var/www/clients/clientXY, in cui ci sono tutti i suoi siti web. Lo script eseguirà il backup di tutti i suoi siti web in ciascuna cartella web, insieme ai suoi database e il cliente sarà in grado di scaricarli. Nel caso in cui un cliente abbia più di un database, tutti i database verranno eseguiti il backup nel suo primo sito (basato su webID). Lo script manterrà anche gli ultimi 3 giorni di quei file e le ultime 3 domeniche per uso amministrativo in una directory a tua scelta (il predefinito è /var/backup/sites).

Questo è uno script molto semplice. Per una soluzione più avanzata, guarda questo post.

Crea lo script, rendilo eseguibile ed editalo:

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

Il contenuto deve essere il seguente: (Cambia le variabili ispUSER, ispPASS, ispHOST, DEST e SITES per adattarle alle tue esigenze):

#!/bin/bash  
# Script shell per eseguire il backup del database MySql e dei siti web dei clienti  
#   
# Ultimo aggiornamento: Marzo - 2011  
# --------------------------------------------------------------------  
# Questo è uno script shell gratuito sotto GNU GPL versione 2.0 o superiore  
# Copyright (C) 2011 iopen.gr  
# Feedback/commenti/suggerimenti : http://iopen.gr  
# --------------------------------------------------------------------  
#   
#           DESTINATO per ISPConfig 3.0.x e superiori  
#   
# Questo script eseguirà il backup di ogni cartella web (web, stats, cgi ecc.  
# di ogni cliente insieme a tutti i DB del cliente  
# I backup verranno posizionati nella cartella del sito web del cliente   
# Lo script manterrà il backup attuale e i 2 backup precedenti  
# Mantiene anche le ultime 3 domeniche  
# --------------------------------------------------------------------  
  
# Credenziali del database. Usa un utente DB con accesso completo in lettura o usa l'utente root   
ispUSER="root"                  # Utente DB  
ispPASS="---yourpass---"        # password dell'utente  
ispHOST="localhost"             # Nome host  
  
CURDIR="[0m$(pwd)"   
# Variabili con percorso completo ai binari  
MYSQL="$(which mysql)"  
MYSQLDUMP="$(which mysqldump)"  
CHOWN="$(which chown)"  
CHMOD="$(which chmod)"  
GZIP="$(which gzip)"  
TAR="$(which tar)"   
  
# La tua directory principale di backup del server  
DEST="/var/backup"  
   
# Directory di backup dei siti (SOLO) nella tua directory principale di backup  
SITES="$DEST/sites"  
    
# Variabili per le date nel formato 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 || :  
   
# Dare solo accesso root ai backup nelle cartelle di questo script  
$CHOWN 0.0 -R $SITES  
$CHMOD 0600 $SITES  
  
# --------------------------------------------------------------------------   
# Rimuovi i backup precedenti (correnti) della directory del cliente  
# I backup sono nella forma :  
# *BU*gz  
# -------- ATTENZIONE ---------  
# Non memorizzare alcun altro file in questa forma nella directory dei clienti  
# --------------------------------------------------------------------------   
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]}=utente dominio / nome cartella / utente di sistema, ${col[1]}=clientID / gruppo di sistema ,  
        while read -a col  # ${col[2]}=percorso del sito web, ${col[3]}= nome dominio  
do  
echo "    PULIZIA DEI VECCHI BACKUP nella cartella ${col[2]} "  
for delfile in ${col[2]}/*BU*gz ;   
do [ -f $delfile ] && rm $delfile;   
done  
done  
done  
  
# --------------------------------------------------------------------------   
# Rimuovi qualsiasi cosa che ha 22 giorni e ha la forma :  
# *[data 22 giorni fa]*gz  
# dalla directory $SITES del server  
# --------------------------------------------------------------------------   
echo "-------------------------------------------------------------"  
echo "    PULIZIA DEI VECCHI BACKUP nella cartella SITI "  
for delfile in $SITES/*$BACK22*gz ;   
do [ -f $delfile ] && rm $delfile;    
done  
echo "-------------------------------------------------------------"  
echo "                                                             "  
echo "                                                             "  
  
# --------------------------------------------------------------------------   
# Per ogni cliente, esegui il backup del suo database nella sua cartella del sito web   
# Per i clienti con più siti esegui il backup di tutti i db nel suo primo sito  
# Inoltre copia il backup di oggi nella directory $SITES del server   
# Rimuovi il backup che è più vecchio di 3 giorni dalla directory $SITES del server  
# Mantieni le ultime 3 domeniche  
# --------------------------------------------------------------------------   
  
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]} = dbname, ${col[1]}=dbuser , ${col[2]}=utente dominio / nome cartella / utente di sistema,  
        while read -a col   #${col[3]}=clientID / gruppo di sistema , ${col[4]}=percorso del sito web  
do  
echo "          DB: "${col[0]}   
echo "-------------------------------------------------------------"  
echo "Eseguendo il backup del DB:" ${col[0]}  "in :"  ${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 ] # se 3 giorni fa non è domenica  
        then    #rimuovi il  backup  
                [ -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  
  
# --------------------------------------------------------------------------   
# Per ogni cliente, esegui il backup dei suoi siti nella sua cartella del sito web   
# Inoltre copia il backup di oggi nella directory $SITES del server   
# Rimuovi il backup che è più vecchio di 3 giorni dalla directory $SITES del server  
# Mantieni le ultime 3 domeniche  
# --------------------------------------------------------------------------   
  
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]}=utente dominio / nome cartella / utente di sistema, ${col[1]}=clientID / gruppo di sistema ,  
        while read -a col   # ${col[2]}=percorso del sito web, ${col[3]}= nome dominio  
do  
echo "                                                             "  
echo "         Sito:" ${col[3]}  
echo "-------------------------------------------------------------"  
echo "Eseguendo il backup del sito: " ${col[2]}/  "in :"  ${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 ] # se 3 giorni fa non è domenica  
        then    #rimuovi il backup  
                [ -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

Puoi eseguire lo script di backup eseguendo:

/root/scripts/mybackup.sh

oppure puoi aggiungerlo come un lavoro cron (ad esempio, ogni giorno alle 22:30):

crontab -e

e aggiungere la seguente riga:

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

Note Finali

Per favore, sentiti libero di commentare qualsiasi cosa per questo tutorial in una minaccia appropriata nei forum di HowtoForge. Commenti utili saranno inclusi in una futura versione aggiornata.

Questa è la prima versione e per quanto attento fossi, il tutorial potrebbe contenere errori. Ti prego di farmelo sapere, in modo da poterli correggere il prima possibile.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.