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