Automatisches MySQL-Backup per Script

heute möchte ich euch ein nützliches Bash-Script vorstellen, das euch dabei unterstützt, automatische Backups eurer MySQL-Datenbanken zu erstellen. Das Script habe ich für meine persönlichen Bedürfnisse entwickelt. Jedoch möchte es gerne mit euch teilen.

Es bietet eine einfache Möglichkeit, regelmäßige Sicherungskopien eurer Datenbanken anzulegen, um im Falle eines Datenverlusts schnell wiederherstellen zu können.

#!/bin/bash
##########################################################################
#               .--.
#              |o_o |
#              |:_/ |
#             //   \ \
#            (|     | )
#            /'\_   _/`\
#            \___)=(___/
#
#    (c) Patrick Asmus
#        support@media-techport.de
#        https://www.media-techport.de
##########################################################################
# Letzte Anpassung: 24.05.2023
# Version 1.0
##########################################################################
# mysql-backup-1.0.sh
##########################################################################
# MySQL-Server Informationen
DB_HOST="mysql-host"    # Hostname oder IP-Adresse des MySQL-Servers
DB_USER="mysqlbackup"    # MySQL-Benutzername
DB_PASS="passwd"    # MySQL-Passwort
DB_NAME="db"    # Name der zu sichernden Datenbank

# Backup-Verzeichnis
BACKUP_DIR="/home/backup/mysql"
MAX_BACKUPS=5

# Erstelle das Backup-Verzeichnis, wenn es nicht vorhanden ist
mkdir -p "$BACKUP_DIR"

# Erstelle den Dateinamen für das aktuelle Backup
CURRENT_DATE=$(date +"%Y-%m-%d_%H-%M-%S")
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$CURRENT_DATE.sql"

# Erstelle den MySQL-Dump
mysqldump --column-statistics=0 -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_FILE"

# Überprüfe, ob das Backup erfolgreich erstellt wurde
if [ $? -eq 0 ]; then
    echo "Das Backup wurde erfolgreich erstellt: $BACKUP_FILE"
else
    echo "Fehler beim Erstellen des Backups."
    exit 1
fi

# Lösche ältere Backups, wenn die Anzahl der Backups die Maximalanzahl überschreitet
BACKUP_COUNT=$(ls -1 "$BACKUP_DIR/$DB_NAME-"*.sql | wc -l)
if [ "$BACKUP_COUNT" -gt "$MAX_BACKUPS" ]; then
    DELETE_COUNT=$((BACKUP_COUNT - MAX_BACKUPS))
    OLDEST_BACKUPS=$(ls -1t "$BACKUP_DIR/$DB_NAME-"*.sql | tail -n $DELETE_COUNT)
    echo "Lösche ältere Backups: $OLDEST_BACKUPS"
    rm $OLDEST_BACKUPS
fi

Um das Script nutzen zu können, müssen einige Anpassungen vorgenommen werden. Lasst uns die einzelnen Schritte genauer betrachten:

1. MySQL-Server Informationen

Zunächst müsst ihr die Informationen zu eurem MySQL-Server angeben. Dazu gehören der Hostname oder die IP-Adresse des Servers, der Benutzername und das Passwort für den Zugriff sowie der Name der zu sichernden Datenbank. Ersetzt die Platzhalterwerte in den Variablen DB_HOST, DB_USER, DB_PASS und DB_NAME durch eure eigenen Informationen.

2. Backup-Verzeichnis

Das Script legt die Backups in einem bestimmten Verzeichnis ab. Ihr könnt den Pfad zu diesem Verzeichnis in der Variablen BACKUP_DIR festlegen. Stellt sicher, dass das Verzeichnis existiert, indem ihr den Befehl mkdir -p "$BACKUP_DIR" ausführt.

3. Maximale Anzahl von Backups

Ihr könnt auch die maximale Anzahl von Backups festlegen, die aufbewahrt werden sollen. Die Variable MAX_BACKUPS definiert diese Anzahl. Wenn die Anzahl der Backups diese Grenze überschreitet, werden die ältesten Backups gelöscht, um Platz für neue zu machen.

4. Script ausführbar machen

chmod 700 mysql-backup-1.0.sh

Nachdem ihr diese Anpassungen vorgenommen habt, könnt ihr das Script verwenden, um ein Backup eurer MySQL-Datenbank zu erstellen. Hier ist eine kurze Zusammenfassung der Funktionalität des Scripts:

  1. Das Script erstellt das Backup-Verzeichnis, falls es nicht vorhanden ist.
  2. Es generiert einen eindeutigen Dateinamen für das aktuelle Backup, basierend auf dem Datum und der Uhrzeit.
  3. Mithilfe des Befehls mysqldump wird ein Dump der angegebenen Datenbank erstellt und in die Backup-Datei geschrieben.
  4. Das Script überprüft, ob das Backup erfolgreich erstellt wurde, und gibt entsprechende Meldungen aus.
  5. Wenn die Anzahl der Backups die maximale Anzahl überschreitet, werden die ältesten Backups gelöscht, um Platz für neue zu schaffen.

Es ist empfehlenswert, das Script in regelmäßigen Abständen über einen Cron-Job oder eine ähnliche Aufgabenplanung zu starten, um automatische Backups gemäß euren Anforderungen zu erstellen.
Der Cronjob dazu könnte folgendermaßen aussehen.

@daily /home/scripts/backup/mysql-backup-1.0.sh > /dev/null 2>&1

Das MySQL-Backup-Script bietet eine einfache und effektive Lösung für das regelmäßige Erstellen von MySQL-Backups. Es ist wichtig, regelmäßige Backups eurer Datenbanken durchzuführen, um sicherzustellen, dass ihr im Notfall auf eine zuverlässige Sicherungskopie zurückgreifen könnt. Mit diesem Script könnt ihr diesen Prozess automatisieren und euch um andere wichtige Aufgaben kümmern.

Dieses Script stelle ich auch auf meinem Git-Repository zu Verfügung:

https://git.media-techport.de/scriptos/mysql-backup-bash-script

Ich hoffe, dieser Blogbeitrag war hilfreich, und ihr könnt das MySQL-Backup-Script erfolgreich nutzen, um eure MySQL-Datenbanken zu sichern. Falls ihr Fragen oder Anmerkungen habt, zögert nicht, diese in den Kommentaren zu hinterlassen.

Danke fürs Teilen!