78 Dokumentationen verfügbar

Wissensdatenbank

MySQL MariaDB Backup Restore

Zuletzt aktualisiert: 11.01.2026 um 11:52 Uhr

MySQL/MariaDB Backup & Restore

Regelmäßige Datenbank-Backups sind unverzichtbar. Diese Anleitung zeigt verschiedene Methoden zur Sicherung und Wiederherstellung von MySQL und MariaDB.

mysqldump - Standard-Methode

Einzelne Datenbank sichern

# Einfaches Backup
mysqldump -u root -p datenbankname > backup.sql

# Mit Komprimierung
mysqldump -u root -p datenbankname | gzip > backup.sql.gz

# Mit Datum im Dateinamen
mysqldump -u root -p datenbankname | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz

Alle Datenbanken sichern

mysqldump -u root -p --all-databases > all_databases.sql

# Mit Komprimierung
mysqldump -u root -p --all-databases | gzip > all_databases.sql.gz

Empfohlene Optionen

mysqldump -u root -p \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  datenbankname > backup.sql
Option Beschreibung
--single-transaction Konsistentes Backup ohne Locks (InnoDB)
--routines Stored Procedures sichern
--triggers Trigger sichern
--events Events sichern
--quick Speicherschonend für große DBs

Wiederherstellung

# Aus SQL-Datei
mysql -u root -p datenbankname < backup.sql

# Aus komprimierter Datei
gunzip < backup.sql.gz | mysql -u root -p datenbankname

# Neue Datenbank erstellen und wiederherstellen
mysql -u root -p -e "CREATE DATABASE neue_db"
mysql -u root -p neue_db < backup.sql

Automatisches Backup-Script

sudo nano /opt/scripts/mysql-backup.sh
#!/bin/bash

# Konfiguration
BACKUP_DIR="/var/backups/mysql"
MYSQL_USER="backup_user"
MYSQL_PASS="sicheres_passwort"
RETENTION_DAYS=7

# Datum
DATE=$(date +%Y%m%d_%H%M%S)

# Verzeichnis erstellen
mkdir -p $BACKUP_DIR

# Alle Datenbanken auflisten und sichern
databases=$(mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|sys)")

for db in $databases; do
    echo "Sichere $db..."
    mysqldump -u$MYSQL_USER -p$MYSQL_PASS \
        --single-transaction \
        --routines \
        --triggers \
        $db | gzip > "$BACKUP_DIR/${db}_${DATE}.sql.gz"
done

# Alte Backups löschen
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete

echo "Backup abgeschlossen!"
sudo chmod +x /opt/scripts/mysql-backup.sh

Backup-Benutzer erstellen

mysql -u root -p
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, PROCESS, RELOAD ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;

Cronjob einrichten

sudo crontab -e
# Täglich um 3 Uhr morgens
0 3 * * * /opt/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Backup auf Remote-Server

# Via SSH/SCP
mysqldump -u root -p datenbankname | gzip | ssh user@backup-server "cat > /backups/db_$(date +%Y%m%d).sql.gz"

# Via rsync nach lokalem Backup
rsync -avz /var/backups/mysql/ user@backup-server:/backups/mysql/

Backup verifizieren

# SQL-Datei prüfen (letzte Zeile sollte "Dump completed" sein)
tail -1 backup.sql

# Komprimierte Datei prüfen
gunzip -t backup.sql.gz && echo "OK" || echo "FEHLER"

# Test-Restore in separate DB
mysql -u root -p -e "CREATE DATABASE test_restore"
gunzip < backup.sql.gz | mysql -u root -p test_restore
mysql -u root -p -e "DROP DATABASE test_restore"

Größere Datenbanken

# Mit Fortschrittsanzeige (pv installieren)
sudo apt install pv -y
mysqldump -u root -p datenbankname | pv | gzip > backup.sql.gz

# Parallel dumpen (mydumper)
sudo apt install mydumper -y
mydumper -u root -p passwort -B datenbankname -o /backup/dir/

# Wiederherstellen mit myloader
myloader -u root -p passwort -B datenbankname -d /backup/dir/

Best Practices

  1. Regelmäßig testen: Restore-Tests durchführen
  2. Offsite-Backup: Kopie auf externem Server
  3. Verschlüsselung: Sensitive Daten verschlüsseln
  4. Monitoring: Backup-Jobs überwachen
  5. Dokumentation: Restore-Prozess dokumentieren

Weitere Hilfe