Dies ist eine alte Version des Dokuments!


Backup der Datenbank

Sämtliche Inhalte des Systems (auch hochgeladene Dokumente) werden in der Datenbank gespeichert, dh ein Backup der Datenbank reicht aus um sämtliche Inhalte wiederherzustellen.

Das Backup umfaßt dabei folgende Dateien:

Täglich für eine Woche: mysqldump_daily_{Wochentag}.sql.gz.enc Wochentag: 1-7, 1 = Montag

Monatlich am 1. für ein Jahr: mysqldump_monthly_{Monat}.sql.tar.gz Monat: 01 - 12

Jedes Jahr am 1. 1.: mysqldump_yearly_{Jahr}.sql.tar.gz Jahr: zB „2017“

Das Backup wird komprimiert mittels gzip und asymmetrisch verschlüsselt. Der Publickey zum Verschlüsseln liegt dabei am Server, der Privatekey wird sicher verwahrt und wird nur zum entschlüsseln eines Backups benötigt - er liegt nicht innerhalb der VM.

Die Backupskripte liegen dabei in /op/webserver/backup, das Dateilayout sieht folgendermaßen aus:

-rwx------ 1 root     root  706 Mar 30 09:05 backup.sh
-rw------- 1 root     root   57 Mar 30 07:54 mysqldump.cnf
-rw-r--r-- 1 root     root 1285 Mar 30 08:08 mysqldump-secure.pub.pem
-rwxr--r-- 1 root     root  856 Mar 30 09:26 restore.sh

backup.sh

Das Backupskript selbst. Akzeptiert folgende Aufrufe:

# ./backup.sh

Ohne Parameter wird ein tägliches Backup angelegt

# ./backup.sh month

Ein monatliches Backup wird erstellt

# ./backup.sh year

Ein jährliches Backup wird erstellt

#!/bin/bash


BACKUP_DIR=/srv/backup
DATABASE="datenschutz"


DOW=$(date +%u)
MONTH=$(date +%m)
YEAR=$(date +%Y)


DAILY_FILE="mysqldump_daily_$DOW.sql.gz.enc"
MONTHLY_FILE="mysqldump_monthly_$MONTH.sql.gz.enc"
YEARLY_FILE="mysqldump_yearly_$YEAR.sql.gz.enc"


BACKUPFILE=$BACKUP_DIR/$DAILY_FILE
if [ "$1" ==  "month" ]; then
  BACKUPFILE=$BACKUP_DIR/$MONTHLY_FILE
fi

if [ "$1" ==  "year" ]; then
  BACKUPFILE=$BACKUP_DIR/$YEARLY_FILE
fi

echo "Backup to $BACKUPFILE"

mysqldump --defaults-extra-file=/opt/webserver/backup/mysqldump.cnf  --single-transaction $DATABASE | \
gzip | \
openssl smime -encrypt -binary -text -aes256 -out $BACKUPFILE -outform DER /opt/webserver/backup/mysqldump-secure.pub.pem