Datenbank-Backup: MySQL und PostgreSQL Dump-Anleitung
MySQL und PostgreSQL Datenbank-Backup und -Wiederherstellung mit mysqldump und pg_dump. Automatische Backups mit Cron, Wiederherstellungsverfahren und Best Practices.
Inhaltsverzeichnis
Datenbank-Backup: MySQL und PostgreSQL Dump-Anleitung
Datenbank-Backups gehören zu den kritischsten Aufgaben der Serververwaltung. Regelmäßige Backups sind unerlässlich, um sich von Hardwareausfällen, menschlichen Fehlern oder Cyberangriffen zu erholen. Diese Anleitung behandelt Backup- und Wiederherstellungsverfahren für MySQL und PostgreSQL.
Warum Datenbank-Backup?
- Hardwareausfall oder Festplattenkorruption
- Versehentlich gelöschte Daten
- Probleme nach Software-Updates
- Cyberangriffe oder Ransomware
- Datenkopie für Entwicklungs-/Testumgebungen
Ohne Backups ist Datenverlust irreversibel. Befolgen Sie die 3-2-1-Regel: 3 Kopien, 2 verschiedene Medientypen, 1 externer Standort.
MySQL / MariaDB Backup
Grundlegendes Backup mit mysqldump
# Einzelne Datenbank sichern
mysqldump -u root -p datenbankname > backup.sql
# Mit Passwort (für Skripte)
mysqldump -u root -pPASSWORT datenbankname > backup.sql
# Alle Datenbanken sichern
mysqldump -u root -p --all-databases > alle_datenbanken.sql
# Bestimmte Tabellen sichern
mysqldump -u root -p datenbankname tabelle1 tabelle2 > tabellen.sql
# Komprimiertes Backup
mysqldump -u root -p datenbankname | gzip > backup_$(date +%Y%m%d).sql.gz
Erweiterte mysqldump-Optionen
# Konsistentes Backup für große Datenbanken
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
datenbankname > vollbackup.sql
# Nur Struktur (ohne Daten)
mysqldump -u root -p --no-data datenbankname > schema.sql
# Nur Daten (ohne Struktur)
mysqldump -u root -p --no-create-info datenbankname > daten.sql
# Backup von Remote-Server
mysqldump -h remote_server -u benutzer -p datenbankname > remote_backup.sql
MySQL Wiederherstellung
# Aus SQL-Datei wiederherstellen
mysql -u root -p datenbankname < backup.sql
# Aus komprimiertem Backup wiederherstellen
gunzip -c backup.sql.gz | mysql -u root -p datenbankname
# Neue Datenbank erstellen und wiederherstellen
mysql -u root -p -e "CREATE DATABASE neue_datenbank;"
mysql -u root -p neue_datenbank < backup.sql
# Alle Datenbanken wiederherstellen
mysql -u root -p < alle_datenbanken.sql
Sichere Anmeldedaten-Speicherung
# ~/.my.cnf erstellen
nano ~/.my.cnf
[client]
user=root
password=IHR_PASSWORT
host=localhost
# Dateiberechtigungen einschränken
chmod 600 ~/.my.cnf
# Jetzt ohne Passwortabfrage verwenden
mysqldump datenbankname > backup.sql
PostgreSQL Backup
Grundlegendes Backup mit pg_dump
# Einzelne Datenbank sichern
pg_dump -U postgres datenbankname > backup.sql
# Komprimiertes benutzerdefiniertes Format (empfohlen)
pg_dump -U postgres -Fc datenbankname > backup.dump
# Verzeichnisformat (für parallele Wiederherstellung)
pg_dump -U postgres -Fd datenbankname -f backup_verzeichnis/
# Alle Datenbanken sichern (inkl. Rollen)
pg_dumpall -U postgres > alle_pg.sql
# Komprimiertes Backup
pg_dump -U postgres datenbankname | gzip > backup_$(date +%Y%m%d).sql.gz
PostgreSQL Wiederherstellung
# Aus SQL-Format wiederherstellen
psql -U postgres datenbankname < backup.sql
# Benutzerdefiniertes Format (.dump) wiederherstellen
pg_restore -U postgres -d datenbankname backup.dump
# Parallele Wiederherstellung (schneller)
pg_restore -U postgres -d datenbankname -j 4 backup.dump
# Neue Datenbank erstellen und wiederherstellen
psql -U postgres -c "CREATE DATABASE neue_datenbank;"
pg_restore -U postgres -d neue_datenbank backup.dump
Passwortloser Zugriff (.pgpass)
nano ~/.pgpass
# Format: host:port:database:user:password
localhost:5432:*:postgres:IHR_PASSWORT
chmod 600 ~/.pgpass
Automatische Backups mit Cron
MySQL Automatisches Backup-Skript
#!/bin/bash
# Konfiguration
DB_USER="root"
DB_PASS="IHR_PASSWORT"
DB_NAME="datenbankname"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# Backup-Verzeichnis erstellen
mkdir -p $BACKUP_DIR
# Backup erstellen
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--routines \
--triggers \
$DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# Alte Backups löschen
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Backup abgeschlossen: ${DB_NAME}_${DATE}.sql.gz"
# Skript ausführbar machen
chmod +x /root/scripts/mysql-backup.sh
# Zu Crontab hinzufügen (täglich um 02:00 Uhr)
crontab -e
0 2 * * * /root/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1
Backups auf Remote-Server übertragen
# Mit rsync auf Remote-Server kopieren
rsync -avz /var/backups/mysql/ benutzer@remote-server:/backup/mysql/
# Mit scp einzelne Datei senden
scp /var/backups/mysql/backup.sql.gz benutzer@remote-server:/backup/
# Mit rclone in Cloud-Speicher (S3, Google Drive, etc.)
rclone copy /var/backups/mysql/ remote:bucket-name/mysql/
Backup-Verifizierung
# Backup-Dateigröße prüfen
ls -lh /var/backups/mysql/
# Durch Wiederherstellung in Testdatenbank verifizieren
mysql -u root -p -e "CREATE DATABASE test_restore;"
mysql -u root -p test_restore < backup.sql
mysql -u root -p -e "SHOW TABLES;" test_restore
mysql -u root -p -e "DROP DATABASE test_restore;"
Testen Sie Ihre Backups regelmäßig. Ein Backup, das Sie nicht wiederherstellen können, ist nutzlos. Führen Sie mindestens einmal im Monat eine Test-Wiederherstellung durch.
Best Practices
- Regelmäßige Backups: Täglich oder stündlich für kritische Datenbanken
- Komprimierung: gzip zur Einsparung von Speicherplatz verwenden
- Remote-Speicherung: Backups auf einem anderen Server oder in der Cloud speichern
- Aufbewahrungsrichtlinie: 7 tägliche, 4 wöchentliche, 12 monatliche Backups
- Verschlüsselung: Backups mit sensiblen Daten verschlüsseln
- Überwachung: E-Mail-Benachrichtigungen bei Backup-Fehlern
- Tests: Backups regelmäßig durch Wiederherstellung verifizieren
Fazit
Regelmäßige Datenbank-Backups sind die wichtigste Verteidigung gegen Datenverlust. Durch automatische Backup-Skripte für MySQL und PostgreSQL und externe Speicherung können Sie Ihre Daten auf REXE-Servern sicher halten.
Verwandte Artikel
VDS-Server per SSH verbinden: PuTTY, Terminal & Schlüssel
SSH-Verbindung zum Linux VDS-Server: PuTTY, Terminal, schlüsselbasierte Authentifizierung, Path Panel Firewall-Regel und Sicherheitstipps für Einsteiger.
Windows VDS per RDP verbinden: Vollständige Anleitung
Schritt-für-Schritt-Anleitung zur RDP-Verbindung mit Windows Server VDS: Einrichtung, NLA-Sicherheit, Path Panel Firewall-Regel und Fehlerbehebung.
VDS-Server Betriebssystem wechseln: Schritt-für-Schritt
Betriebssystemwechsel am VDS-Server über das REXE-Panel: Backup-Tipps, unterstützte Linux-Distributionen und Windows Server Versionen im Überblick.