In der Welt der Datenbankadministration ist ein zuverlässiges Backup- und Wiederherstellungsverfahren das Fundament jeder erfolgreichen Strategie zur Datenintegrität und -sicherheit. In diesem Beitrag zeige ich dir, wie SQL-Datenbanken effizient gesichert und im Notfall wiederhergestellt werden können – egal ob du mit Microsoft SQL Server, PostgreSQL, MySQL oder einem anderen System arbeitest.
Warum sind Backups so wichtig?
Datenverluste können durch viele Faktoren verursacht werden: Hardwareausfall, Benutzerfehler, Software-Bugs, Ransomware oder Naturkatastrophen. Ein regelmäßiges Backup stellt sicher, dass du deine Daten mit minimalem Datenverlust und Ausfallzeit wiederherstellen kannst.
Arten von SQL-Backups
1. Voll-Backup
Speichert die gesamte Datenbank zu einem bestimmten Zeitpunkt. Ideal für eine vollständige Wiederherstellung.
— Beispiel für SQL Server
BACKUP DATABASE [MeineDatenbank] TO DISK = 'C:\Backup\MeineDatenbank.bak'
2. Differenzielles Backup
Speichert nur die Änderungen seit dem letzten vollständigen Backup. Spart Speicherplatz und Zeit.
— SQL Server Beispiel
BACKUP DATABASE [MeineDatenbank] TO DISK = 'C:\Backup\MeineDatenbank_diff.bak' WITH DIFFERENTIAL
3. Transaktionsprotokoll-Backup
Erfasst alle Transaktionen seit dem letzten Log-Backup. Wichtig für Point-in-Time-Wiederherstellungen.
BACKUP LOG [MeineDatenbank] TO DISK = 'C:\Backup\MeineDatenbank_log.trn'
Datenbank wiederherstellen
Voll-Backup wiederherstellen
RESTORE DATABASE [MeineDatenbank] FROM DISK = 'C:\Backup\MeineDatenbank.bak' WITH REPLACE
Mit Differential-Backup
-- Erst Vollbackup RESTORE DATABASE [MeineDatenbank] FROM DISK = 'C:\Backup\MeineDatenbank.bak' WITH NORECOVERY; -- Dann Differenzielles Backup RESTORE DATABASE [MeineDatenbank] FROM DISK = 'C:\Backup\MeineDatenbank_diff.bak' WITH RECOVERY;
Best Practices für Backup & Restore
- Automatisiere Backups mit SQL Agent Jobs oder CRON (Linux).
- Teste regelmäßig deine Restore-Prozesse.
- Verschlüssele und versioniere deine Backup-Dateien.
- Bewahre Backups an mehreren Orten auf (lokal + Cloud).
- Implementiere Monitoring für Backup-Fehler.
Fazit
Ein funktionierendes Backup ist wie eine Versicherung – man hofft, sie nie zu brauchen, aber wenn der Ernstfall eintritt, ist sie Gold wert. Mit einem durchdachten Backup-Plan kannst du beruhigt schlafen, denn deine Daten sind sicher.
Automatisiertes Backup bei laufender Datenbank: Überblick nach System
SQL Server
- Nutze SQL Server Agent Jobs, um zeitgesteuerte Backups (voll, diff, log) zu erstellen.
- Unterstützt Online-Backups – keine Downtime erforderlich.
- Beispiel für einen SQL Job-Plan:
- Täglich: Vollbackup
- Alle 4 Stunden: Differenzielles Backup
- Alle 15 Minuten: Transaktionslog-Backup
PostgreSQL
- Nutze
pg_dump(für logische Backups) oderpg_basebackup(für physische Backups). - Mit Tools wie cron + Shell Scripts lassen sich zeitgesteuerte Aufgaben einfach einrichten.
- Für Online-Backups: Stelle sicher, dass die WAL-Archive aktiviert sind.
MySQL/MariaDB
- Nutze
mysqldumpfür kleinere Datenbanken oder Percona XtraBackup für große/produktive Systeme. - Percona XtraBackup bietet echte hot backup-Funktionalität – keine Downtime.
Wie automatisieren?
Beispiel: SQL Server Agent Job
USE msdb;
GO
EXEC sp_add_job
@job_name = 'Tägliches Vollbackup';
EXEC sp_add_jobstep
@job_name = 'Tägliches Vollbackup',
@step_name = 'Vollbackup-Schritt',
@subsystem = 'TSQL',
@command = 'BACKUP DATABASE [MeineDatenbank] TO DISK = ''C:\Backup\MeineDatenbank.bak'' WITH INIT',
@retry_attempts = 3,
@retry_interval = 5;
EXEC sp_add_schedule
@schedule_name = 'Täglich um Mitternacht',
@freq_type = 4,
@freq_interval = 1,
@active_start_time = 000000;
EXEC sp_attach_schedule
@job_name = 'Tägliches Vollbackup',
@schedule_name = 'Täglich um Mitternacht';
Beispiel: PostgreSQL Cron Job (Linux)
0 2 * * * /usr/bin/pg_dump -U postgres meine_datenbank > /backups/meine_datenbank_$(date +\%F).sql
1. Backup mit mysqldump (logisch, gut für kleinere DBs)
Einfach zu benutzen
Gut für kleinere Datenbanken oder Dev-Umgebungen
mysqldump -u root -p --single-transaction --quick --lock-tables=false meine_datenbank > /backups/meine_datenbank_$(date +\%F).sql
--single-transaction ermöglicht ein konsistentes Backup ohne Tabellen zu sperren → ideal für laufende Datenbank.
Automatisierung via Cron (Linux)
0 2 * * * /usr/bin/mysqldump -u root -pmypass --single-transaction --quick --lock-tables=false meine_datenbank > /backups/db_backup_$(date +\%F).sql