Backups · 5 min read · Dec 02, 2025

Erweiterung des Perfect Servers - Debian Squeeze [ISPConfig 3] - Seite 6

10. Backups der Kunden

Der Inhalt des Skripts wurde am 29-03-2011 geändert. Bitte aktualisieren

Dieses Skript WIRD NICHT korrekt für ISPConfig v. 3.0.5 und höher funktionieren. Sie müssen viele Änderungen vornehmen, und es wird nicht empfohlen. Bitte verwenden Sie die neue Methode von ISPConfig zum Sichern.

Das folgende Skript ist eine einfache Möglichkeit, die Daten Ihrer Kunden und die Datenbanken Ihrer Kunden in deren Website-Ordner zu sichern. Wie Sie vielleicht wissen, hat in ISPConfig3 jeder Kunde einen Ordner in der Form /var/www/clients/clientXY, in dem sich alle seine Websites befinden. Das Skript sichert alle seine Websites in jedem Webordner, zusammen mit seinen Datenbanken, und der Kunde kann sie herunterladen. Falls ein Kunde mehr als eine Datenbank hat, werden alle Datenbanken in seiner ersten (basierend auf webID) Website gesichert. Das Skript behält auch die letzten 3 Tage dieser Dateien und die letzten 3 Sonntage für die Administrationsnutzung in einem Verzeichnis Ihrer Wahl (das Standardverzeichnis ist /var/backup/sites).

Dies ist ein sehr einfaches Skript. Für eine fortgeschrittenere Lösung schauen Sie sich diesen Beitrag an.

Erstellen Sie das Skript, machen Sie es ausführbar und bearbeiten Sie es:

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

Der Inhalt muss wie folgt sein: (Ändern Sie die Variablen ispUSER, ispPASS, ispHOST, DEST und SITES, um Ihren Bedürfnissen gerecht zu werden):

#!/bin/bash  
# Shell-Skript zur Sicherung der MySql-Datenbank und der Websites der Kunden  
#   
# Zuletzt aktualisiert: März - 2011  
# --------------------------------------------------------------------  
# Dies ist ein kostenloses Shell-Skript unter GNU GPL Version 2.0 oder höher  
# Copyright (C) 2011 iopen.gr  
# Feedback/Kommentare/Vorschläge : http://iopen.gr  
# --------------------------------------------------------------------  
#   
#           VORGESEHEN für ISPConfig 3.0.x und höher  
#   
# Dieses Skript sichert jeden Webordner (Web, Statistiken, CGI usw.)  
# jedes Kunden zusammen mit allen Datenbanken des Kunden  
# Die Backups werden im Website-Ordner des Kunden gespeichert  
# Das Skript behält das aktuelle und die 2 vorherigen Backups  
# Es behält auch die letzten 3 Sonntage  
# --------------------------------------------------------------------  
  
# Datenbank-Anmeldeinformationen. Verwenden Sie einen DB-Benutzer mit vollem Lesezugriff oder verwenden Sie den Root-Benutzer   
ispUSER="root"                  # DB-Benutzer  
ispPASS="---yourpass---"        # Passwort des Benutzers  
ispHOST="localhost"             # Hostname  
  
CURDIR="$(pwd)"   
# Variablen mit vollem Pfad zu den Binärdateien  
MYSQL="$(which mysql)"  
MYSQLDUMP="$(which mysqldump)"  
CHOWN="$(which chown)"  
CHMOD="$(which chmod)"  
GZIP="$(which gzip)"  
TAR="$(which tar)"   
  
# Haupt-Backup-Verzeichnis Ihres Servers  
DEST="/var/backup"  
   
# Backup-Verzeichnis (NUR) der Websites in Ihrem Haupt-Backup-Verzeichnis  
SITES="$DEST/sites"  
    
   
# Variablen für Daten im yymmdd-Format  
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 || :  
   
# Nur Root-Zugriff auf Backups in diesen Skriptordnern gewähren  
$CHOWN 0.0 -R $SITES  
$CHMOD 0600 $SITES  
  
# --------------------------------------------------------------------------   
# Entfernen Sie vorherige (aktuelle) Backups des Kundenverzeichnisses  
# Die Backups sind in der Form :  
# *BU*gz  
# -------- VORSICHT ---------  
# Speichern Sie keine anderen Dateien in dieser Form im Kundenverzeichnis  
# --------------------------------------------------------------------------   
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]}=Domain-Benutzer / Ordnername / Systembenutzer, ${col[1]}=clientID / Systemgruppe ,  
        while read -a col  # ${col[2]}=Pfad zur Website, ${col[3]}= Domainname  
do  
echo "    ALTE BACKUPS im ${col[2]}-Ordner REINIGEN "  
for delfile in ${col[2]}/*BU*gz ;   
do [ -f $delfile ] && rm $delfile;   
done  
done  
done  
  
# --------------------------------------------------------------------------   
# Entfernen Sie alles, was 22 Tage alt ist und die Form hat :  
# *[Datum 22 Tage alt]*gz  
# aus dem $SITES-Verzeichnis des Servers  
# --------------------------------------------------------------------------   
                echo "-------------------------------------------------------------"  
echo "    ALTE BACKUPS im SITES-Ordner REINIGEN "  
for delfile in $SITES/*$BACK22*gz ;   
do [ -f $delfile ] && rm $delfile;    
done  
echo "-------------------------------------------------------------"  
echo "                                                             "  
echo "                                                             "  
  
# --------------------------------------------------------------------------   
# Für jeden Kunden, sichern Sie seine Datenbank in seinem Website-Ordner   
# Für Kunden mit mehreren Websites sichern Sie alle DBs in seiner ersten Website  
# Darüber hinaus kopieren Sie das heutige Backup in das $SITES-Verzeichnis des Servers   
# Entfernen Sie das Backup, das älter als 3 Tage ist, aus dem $SITES-Verzeichnis des Servers  
# Behalten Sie die letzten 3 Sonntage  
# --------------------------------------------------------------------------   
  
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]}=Domain-Benutzer / Ordnername / Systembenutzer,  
        while read -a col   #${col[3]}=clientID / Systemgruppe , ${col[4]}=Pfad zur Website  
do  
echo "          DB: "${col[0]}   
echo "-------------------------------------------------------------"  
echo "Sichere 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 ] # wenn 3 Tage zuvor kein Sonntag ist  
        then    #Backup entfernen  
                [ -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  
  
# --------------------------------------------------------------------------   
# Für jeden Kunden, sichern Sie seine Websites in seinem Website-Ordner   
# Darüber hinaus kopieren Sie das heutige Backup in das $SITES-Verzeichnis des Servers   
# Entfernen Sie das Backup, das älter als 3 Tage ist, aus dem $SITES-Verzeichnis des Servers  
# Behalten Sie die letzten 3 Sonntage  
# --------------------------------------------------------------------------   
  
  
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]}=Domain-Benutzer / Ordnername / Systembenutzer, ${col[1]}=clientID / Systemgruppe ,  
        while read -a col   # ${col[2]}=Pfad zur Website, ${col[3]}= Domainname  
do  
echo "                                                             "  
echo "         Website:" ${col[3]}  
echo "-------------------------------------------------------------"  
echo "Sichere Website: " ${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 ] # wenn 3 Tage zuvor kein Sonntag ist  
        then    #Backup entfernen  
                [ -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

Sie können das Backup-Skript ausführen, indem Sie Folgendes ausführen:

/root/scripts/mybackup.sh

oder Sie können es als Cron-Job hinzufügen (z. B. jeden Tag um 22:30):

crontab -e

und die folgende Zeile anhängen:

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

Abschließende Hinweise

Bitte zögern Sie nicht, Kommentare zu diesem Tutorial in einem geeigneten Thread in den HowtoForge-Foren abzugeben. Nützliche Kommentare werden in einer zukünftigen aktualisierten Version aufgenommen.

Dies ist die erste Version und so sorgfältig ich auch war, das Tutorial kann Fehler enthalten. Bitte lassen Sie mich wissen, damit ich sie so schnell wie möglich korrigieren kann.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.