Datenbank-Backups
In diesem Hilfecenter-Artikel wird beschrieben, wie Backups von einzelnen MySQL-Datenbanken in unseren Cluster-Setups mithilfe der Linux-Software mysqldump oder eines Shell-Scripts angelegt beziehungsweise wiederhergestellt werden können. Die automatisierten Datenbank-Backups eignen sich, um z. B. stündliche Backups aller Datenbanken anzulegen.
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 Datenbank-Server via SSH an.
| Optionen | Erklärung |
|---|---|
| --single-transaction | Führt Vorgang als eine einzige Transaktion aus. |
| --no-tablespaces | Verhindert die Wiederherstellung von Tablespace-Zuweisungen |
| -u | Benutzername |
| -p | Erfordert Passwortauthentifizierung |
| -h | Hostname (Standard: localhost/127.0.0.1) |
| > backup.sql | Leitet die Befehlsausgabe in den Dateinamen weiter (erforderlich) |
| Optionen (optional) | |
| -P | Port (Standard: 3306) |
| Platzhalter | Erklärung | Beispiel |
|---|---|---|
| DB_USER | Datenbank-Benutzername | my_dbuser |
| DB_HOST | VPC-IPv4-Adresse | 10.20.0.21 |
| DB_NAME | Name der Datenbank | my_database |
Bestimmte MySQL-Datenbank sichern:
Ersetzen Sie backup.sql durch den Dateinamen Ihres Backups:
Der Systembenutzer Ihres ersten Datenbank-Servers besitzt Schreibrechte für das Verzeichnis unter /var/backups/mysql. Tauschen die die oben beschriebenen Platzhalter entsprechend Ihrem Setup in dem folgenden Befehl aus, um ein Backup in diesem Verzeichnis zu erstellen.
mysqldump --single-transaction --no-tablespaces \
-u DB_USER -p -h DB_HOST DB_NAME > /var/backups/mysql/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 DB_NAME wiederherzustellen:
Bestimmte MySQL-Datenbank wiederherstellen
mysql -u DB_USER -p -h DB_HOST DB_NAME < /var/backups/mysql/backup.sql Geplante automatische Backups
Einrichtung
Führen Sie folgende Befehle mit dem Systembenutzer Ihres Datenbank-Servers aus:
touch /var/backups/mysql/mysql_backup.sh
chmod +x /var/backups/mysql/mysql_backup.sh
nano /var/backups/mysql/mysql_backup.sh Fügen Sie folgenden Inhalt in der Datei ein und passen Sie die Variablen MYSQL_HOST, MYSQL_USER, MYSQL_PASS und MYSQL_DBNAME entsprechend den Zugangsdaten für Ihre Datenbank an:
#!/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 "Backup directory $BACKUP_DIR does not exist!"
exit 1
fi
# Create Backup
echo "Creating MySQL Backup $MYSQL_USER@$MYSQL_HOST for $MYSQL_DBNAME"
mariadb-dump --single-transaction --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS --max_allowed_packet=1024M $MYSQL_DBNAME | gzip > $BACKUP_DIR/$BACKUP_FILENAME.sql.gz
# replace "mariadb-dump" with "mysqldump" if you're using MySQL instead of MariaDB
echo "MySQL Backup $BACKUP_FILENAME has been created 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" Speichern Sie die Datei mit Strg + s und schließen Sie den Editor mit Strg + x.
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.
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 * * * * 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
Nach dem 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 Bestimmte MySQL-Datenbank der automatischen Backups wiederherstellen
Da das automatische Backup den Datenbank-Dump mit gzip komprimiert hat, muss folgender Befehl verwendet werden.
Der Befehl zcat gibt die gzip-komprimierte Datei an die Standardeingabe des mysql-Import-Befehls:
zcat /var/backups/mysql/backup.sql.gz | mysql -u DB_USER -p -h DB_HOST DB_NAME