Gehaxelts Blog

IT-Security & Hacking

Uberspace Backupscript

Uberspace legt täglich ein Backup des Webspaces für jeden Benutzer an. Das kann man auch im Uberspace Wiki nachlesen.

Trotzdem habe ich gestern mir (m)ein ersten Shellscript geschrieben, welches ein Backup von der Datenbank und den Webspace erstellt und in einem gezipten Archiv in einem neuen Ordner abspeichert.

Wie genau ihr das Backupscript einrichtet, werde ich kurz erläutern.

Das Shellscript:

#!/bin/bash
###Uberspace Backup-Script by Sebastian Neef
###www.gehaxelt.in
###Version 1.0
##Variables
USER='gehaxelt' #Uberspacename
MYSQLPW='xxxxxxxxx' #MySQL-Passwort
DATE=`date +%d-%m-%Y` #Current time
## END Variables

##Check if backup folder exists and create it
if [ ! -d /home/$USER/backup ]
    then
        mkdir /home/$USER/backup
    echo "Backup-folder created"
fi
##END Check

##Check if backup file exists and exit
if [ -f /home/$USER/backup/backup-$DATE.tar.bz2 ]
    then
        echo "Backup already exists"
    exit 1
fi
##END Check

##Backup
mysqldump --user=$USER --password=$MYSQLPW --compact --comments --dump-date --quick --all-databases | gzip > "/var/www/virtual/"$USER"/database.sql.gz"
cd /var/www/virtual/$USER
tar -cjf /home/$USER/backup/backup-$DATE.tar.bz2 *
rm /var/www/virtual/$USER/database.sql.gz
##END Backup

Was muss ich an dem Script bearbeiten?

An dem Script müsst ihr nichts weiter bearbeiten, bis auf die Variablen USER und MYSQLPW. Was genau diese beiden Variablen beinhalten sollen, sollte ersichtlich sein.

UPDATE:

Der Betreiber von Uberspace.de gab mir den Hinweis, dass es für euch gar nicht nötig ist, noch einmal das MySQL-Passwort eingeben zu müssen, wenn ich dieses aus der Konfiguration .my.cnf auslese. Diese Variante des Scriptes möchte ich nun nachreichen:

#!/bin/bash
###Uberspace Backup-Script by Sebastian Neef
###www.gehaxelt.in

##Variables
USER='gehaxelt' #Uberspacename
DATE=`date +%d-%m-%Y` #Current time
## END Variables

##Check if backup folder exists and create it
if [ ! -d /home/$USER/backup ]
    then
        mkdir /home/$USER/backup
    echo "Backup-folder created"
fi
##END Check

##Check if backup file exists and exit
if [ -f /home/$USER/backup/backup-$DATE.tar.bz2 ]
    then
        echo "Backup already exists"
    exit 1
fi
##END Check

##Backup
mysqldump --defaults-file=$HOME/.my.cnf --user=$USER --compact --comments --dump-date --quick --all-databases | gzip > "/var/www/virtual/"$USER"/database.sql.gz"
cd /var/www/virtual/$USER
tar -cjf /home/$USER/backup/backup-$DATE.tar.bz2 *
rm /var/www/virtual/$USER/database.sql.gz
##END Backup

Dann müsst ihr für weiter unten einen anderen Downloadpfad nutzen. Das sind dann die Befehle, welche ihr dann weiter stattdessen nutzen müsst.

cd ~
wget 'https://gehaxelt.in/blog/wp-content/uploads/2012/04/backup2.sh_.txt' -O backup.sh

Den Rest könnt ihr dann weiter so befolgen.

Was macht das Script genau?

Zunächst wird geprüft, ob ein Ordner namens “backup” im home-Verzeichnis des Uberspaces existiert und ggf. angelegt, damit dort dann die Backups abgelegt werden können.

In den weiteren Zeilen 19-25 wird geprüft, ob für den heutigen Tag bereits ein Backup existiert und das Backup abgebrochen, falls diese Bedingung erfüllt ist, damit man nicht mehrere Backups eines Tages hat.

Danach beginnt erst der eigentlich Backupprozess.

Es werden alle Datenbanken mit dessen gesamten Inhalt exportiert und als gezippte Datei abgespeichert, damit das Backup möglichst klein wird. Daraufhin wird in den Ordner gewechselt, in dem alle webrelevanten Daten liegen und daraus inklusive Datenbank ein bezip-komprimiertes Archiv erstellt. Dieses Archiv trägt das aktuelle Datum im Namen und wir im backup-Verzeichnis abgelegt. Als letztes muss nur noch die Datenbankdatei gelöscht werden, welche nur temporär erzeugt wurde.

Wie kann ich das Script automatisch ausführen lassen?

Uberspace bietet die Möglichkeit Cronjobs einzurichten, welche zu selbst definierbaren Zeiten verschiedene Befehle ausführen können.

Um ein Backup jede Nacht um 3 Uhr erstellen zu können, müssen wir zunächst o.g. Script im Homeverzeichnis anlegen. Das klappt über folgende zwei Befehle:

cd ~
wget 'https://gehaxelt.in/blog/wp-content/uploads/2012/04/backup.sh_.txt' -O backup.sh

Mit dem ersten Befehl wechseln wir ins Homeverzeichnis und mit dem Zweiten laden wir das Shellscript von meinem Blog herunter und speichern es als backup.sh .

Nun müsst ihr diese Datei öffnen und bearbeiten. Das klappt am Besten mit:

nano backup.sh

Dann ändert ihr die entsprechenden Daten und speichert mit einem Strg+X und dann mit Y(es) bestätigen.

Nun müssen wir nur noch den Cronjob erstellen. Dazu geben wir folgenden in die Shell ein:

crontab -e

und fügen dort die folgende Zeile an:

0 03 * * * sh /home/[Dein Uberspace name]/backup.sh

Das ganze wieder mit Strg+X und Y abspeichern.

Und nun?

Jetzt wird das Script jede Nacht um 3 Uhr ein Backup eures Webspaces und der Datenbank erstellen, welches ihr euch dann herunterladen oder sammeln könnt.

Gruß

gehaxelt

Tools

« Blog wieder erreichbar Auf der sicheren Seite »