Datenbank-Backups 

In diesem Hilfecenter-Artikel wird beschrieben, wie Backups von einzelnen oder allen MySQL-Datenbanken mithilfe der Linux-Software mysqldump oder eines Shell-Scripts angelegt beziehungsweise wiederhergestellt werden kann. Die automatisierten Datenbank-Backups eignen sich, um z. B. stündliche Backups aller Datenbanken anzulegen.


Für diesen Artikel wird eine aktive SSH-Sitzung mit dem Benutzer root vorausgesetzt.


Datenbank-Backup via CLI erstellen

Mithilfe der Linux-Software mysqldump können in wenigen Schritten Backups von einzelnen erstellt werden. Melden Sie sich hierzu zunächst auf Ihrem creoline Server via SSH an.


Bestimmte MySQL-Datenbank sichern

Ersetzen Sie DATABASE_NAME durch den Datenbanknamen sowie backup.sql durch den Dateinamen Ihres Backups:

mkdir -p /var/backups/mysql/

cd /var/backups/mysql/

mysqldump --single-transaction DATABASE_NAME > backup.sql


Alle MySQL-Datenbanken sichern:

Ersetzen Sie backup.sql durch den Dateinamen Ihres Backups:

mkdir -p /var/backups/mysql/

cd /var/backups/mysql/

mysqldump --single-transaction --all-databases  > backup.sql



Datenbank-Backup via CLI wiederherstellen

Um das Backup einer bestehenden Datenbank wiederherzustellen, melden Sie sich zunächst auf Ihrem creoline Server via SSH an. Führen Sie anschließend folgenden Befehl aus, um das Backup backup.sql der Datenbank DATABASE_NAME wiederherzustellen:


cd /var/backups/mysql/

mysql DATABASE_NAME < backup.sql



Geplante automatische Backups

Navigieren Sie mithilfe von cd zu dem gewünschten Script-Verzeichnis und erstellen Sie ein Shell-Script mit dem Namen mysql_backup.sh .


cd /var/backups

nano mysql_backup.sh



#!/bin/bash
set -e

KEEP_LATEST=7
BACKUP_DIR=/var/backups/mysql

MYSQL_HOST=<localhost>
MYSQL_USER=<username>
MYSQL_PASS=<password>
MYSQL_DBNAME=<databasename>

DATE=$(date +"%m_%d_%Y")_$(date +"%H_%M")
BACKUP_FILENAME=backup_$MYSQL_DBNAME_$DATE

# Create Backup Directory if not exists
if [ ! -d $BACKUP_DIR ]; then
    echo -e "Creating Backup directory $BACKUP_DIR"
    mkdir -p $BACKUP_DIR
fi

# Create Backup
echo "Creating MySQL Backup $MYSQL_USER@$MYSQL_HOST for $MYSQL_DBNAME"

mysqldump --single-transaction --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS --max_allowed_packet=1024M $MYSQL_DBNAME > $BACKUP_DIR/$BACKUP_FILENAME.sql
echo "MySQL Backup $BACKUP_FILENAME has been created succesfully"

gzip > $BACKUP_DIR/$BACKUP_FILENAME.sql
echo "MySQL Backup $BACKUP_FILENAME has been compressed succesfully"

# Remove old backups
cd $BACKUP_DIR
ls -tr | head -n -$(($KEEP_LATEST)) | xargs --no-run-if-empty rm

echo "Old MySQL Backups has been cleaned succesfully"


In diesem Beispiel wird die --single-transaction Option für InnoDB Tabellen verwendet, um eine globale Transaktion zu starten, um die Integrität der zu sichernden Daten zu gewährleisten. Die Storage Engine MyISAM unterstützt keine Transaktionen. Sollten Sie mit diesem Script auch MyISAM Tabellen sichern wollen, sollte stattdessen die --lock-tables Option verwendet werden.


Stellen Sie anschließend sicher, dass das Script das Recht zum Ausführen besitzt:

chmod +x mysql_backup.sh


Das Script kann anschließend wie folgt getestet werden:

./mysql_backup.sh


Im Verzeichnis /var/backups/mysql sollte anschließend das erste vollständige MySQL Backup abgebildet werden:

ls -lah /var/mysql/backups

# Beispiel Ausgabe:
insgesamt 47M
drwxr-xr-x 2 root root 4,0K 21. Dez 17:01 .
drwxr-xr-x 3 root root 4,0K 21. Dez 16:31 ..
-rw-r--r-- 1 root root  47M 21. Dez 17:01 backup_12-21-2022_17:01:00.sql.gz


Die MySQL-Backups werden mithilfe von gzip komprimiert. Sofern das Backup wiederhergestellt werden soll, muss zunächst das Backup entpackt werden. ( Z.B: gunzip backup_12-21-2022_17:01:00.sql.gz )



Cronjob anlegen

Für die automatische Ausführung der Datenbank-Backups kann entweder ein Linux-Cronjob oder ein Cronjob über unser Kundencenter angelegt werden.


Kundencenter Cronjob

Eine detaillierte Anleitung zum Anlegen eines Cronjobs über unser Kundencenter finden Sie in dem Hilfecenter-Artikel Cronjobs.


Linux-Cronjob

Öffnen Sie den Crontab-Editor über den Befehl crontab -e.

 crontab -e


Stündliche Backups, um Minute 0:

0 * * * * /var/backups/mysql_backup.sh

Siehe: https://crontab.guru/every-1-hour


Tägliche Backups, um 00:00 Uhr:

0 0 * * * /var/backups/mysql_backup.sh

Siehe: https://crontab.guru/every-day-at-1am


Nachdem Hinzufügen der Zeile, verlassen Sie den Crontab-Editor über die Tastenkombination CTRL + X. Darauf folgt die Frage, ob die Änderungen gespeichert werden sollen. Benutzen Sie hierzu die Taste Y (für Yes) und drücken Sie anschließend die Enter Taste. Der Crontab-Editor quittiert die erfolgreiche Anpassung über die Ausgabe:

crontab: installing new crontab