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 $CURDIRSie können das Backup-Skript ausführen, indem Sie Folgendes ausführen:
/root/scripts/mybackup.shoder Sie können es als Cron-Job hinzufügen (z. B. jeden Tag um 22:30):
crontab -eund die folgende Zeile anhängen:
30 22 * * * /root/scripts/mybackup.sh > /dev/null 2>> /var/log/backup.logAbschließ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.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.