Ubuntu Backupskript Apache Webserver und MySQL Datenbank

Aus Znilwiki
Wechseln zu: Navigation, Suche

Meinen Webserver sichere ich mehrfach und auf verschiedene Arten parallel.
Eine davon ist das ich alle meine Webseiten, die dazu gehörigen Datenbanken und das /etc Verzeichnis auf eine NFS Freigabe kopieren.

Dazu habe ich mir das folgende Skript gebaut:

#!/bin/bash
# Für MySQL Datenbankzugriff - Benutzer mit vollen rechten auf allen Datenbanken
username=root
password=*****
 
# Sichert alle MySQL Datenbanken, Webverzeichnisse sowie die wichtigsten Systemeinstellungen in ein Verzeichnis parallel zu dem Verzeichnis in dem das Skript selbst liegt.
# /Backuppfad/scripte/diesesSkript.sh
# /Backuppfad/Name-des-Server/...
 
# Aktuellen Pfad des Scripts ermitteln
# Lösung stammt von https://stackoverflow.com/questions/59895/can-a-bash-script-tell-which-directory-it-is-stored-in
echo "Ermittle den Pfad für die Backup-Dateien ..."
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
    DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
    SOURCE="$(readlink "$SOURCE")"
    [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
 
# Der Backuppfad ist über unserem Scriptpfad:
BACKUPPATH="$( cd -P "$( dirname "$SOURCE" )" && cd .. && pwd )/$( hostname )"
echo "Pfad Datenbanken ist : ${BACKUPPATH}/databases"
echo "Pfad Webseiten ist ..: ${BACKUPPATH}/www"
echo "Pfad Sonstiges ist ..: ${BACKUPPATH}/other"
 
DATETIME=$(date '+%Y-%m-%d--%H-%M-%S')
 
echo "Erstelle ggf. die Verzeichnisse ..."
mkdir -p "${BACKUPPATH}/databases"
mkdir -p "${BACKUPPATH}/www"
mkdir -p "${BACKUPPATH}/other"
 
echo "Lösche Backupdateien älter als 7 Tage ..."
find "${BACKUPPATH}/databases" -type f -mtime +7 -delete
find "${BACKUPPATH}/www" -type f -mtime +7 -delete
find "${BACKUPPATH}/other" -type f -mtime +7 -delete
 
echo "Sichere alle Datenbanken ..."
for x in $(mysql -u$username -p$password -Bse 'show databases'); do
    case ${x} in
        information_schema|performance_schema|mysql)
            echo Skipping Database ${x} ...
            ;;
        *)
            echo Backup Database ${x} ...
            mysqldump -u$username -p$password $x | gzip > "${BACKUPPATH}/databases/${x}__${DATETIME}.sql.gz"
    esac
done
echo "Alle Datenbanken gesichert!"
echo "Sichere Webseiten ..."
for folder in $(ls /var/www); do
    case ${folder} in
        clients)
            echo Skipping Folder ${folders}
            ;;
        *)
            echo Backup Folder /var/www/${folder}
            /usr/bin/nice -n 19 tar -hczf "${BACKUPPATH}/www/${folder}_$DATETIME.tar.gz" /var/www/${folder} 1>/dev/null
            # tar Optionen:
            # c = create Archiv / neues Archiv erstellen
            # z = gzip = Mit gzip komprimieren
            # f = Filename = angegebene Arhcivdatei nutzen
            # h = Symbolischen Links folgen und die Dateien dahinter sichern
    esac
done
echo "Alle Webseiten gesichert!"
 
echo "Sichere Konfiguartionsdateien ..."
/usr/bin/nice -n 19 tar -czf "${BACKUPPATH}/other"/etc+more_$DATETIME.tar.gz /etc /root /usr/local/etc /usr/local/sbin 1>/dev/null
echo "Alle Konfigurationsdateien gesichert!"
echo "Fertig!"

Einsatz im crontab z.B. wie folgt:

0 0 * * * /BACKUP/scripts/UniversalBackup.sh 1>/dev/null

Sichert um Mitternacht, bei Fehlern gibt es eine Email an den root-Benutzer (der per mir auf ein externes Postfach weitergeleitet wird)


Kommentare


Kommentar hinzufügen:
Gebe hier einen Kommentar ein. Du kannst einen beliebigen Namen oder eine Email-Adresse als Namen angeben.

Wenn du dich einloggst wird automatisch dein Benutzername genommen.
Du kannst KEINE Links hier posten - das wurde wegen anhaltender Werbung deaktiviert. Sobald ein '''http://''' im Text vorkommt wird der Kommentar verworfen Alle anderen Steuerzeichen oder Funktionen wie < br > werden ausgefiltert - zum Posten von Quelltexten ist diese Funktion hier nicht geeignet.

Falls du dringendere Fragen hast kannst du auch das Support-System von znil.net nutzen unter support.znil.net