MySQL MariaDB Backup Restore
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
- Regelmäßig testen: Restore-Tests durchführen
- Offsite-Backup: Kopie auf externem Server
- Verschlüsselung: Sensitive Daten verschlüsseln
- Monitoring: Backup-Jobs überwachen
- Dokumentation: Restore-Prozess dokumentieren
Weitere Hilfe
- 📖 MySQL Dokumentation
- 📧 E-Mail: support@enjyn.de