SQL-Datenbank Backups und Restore

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) oder pg_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 mysqldump fü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
Schreibe einen Kommentar 0

Your email address will not be published. Required fields are marked *