← Alle Artikel
Zuletzt aktualisiert: 2026-03-30

Website umziehen ohne Ausfallzeit: Schritt-für-Schritt-Anleitung

Website-Migration ohne Ausfallzeit. Dateiübertragung, Datenbank-Export, DNS-Umstellung, SSL auf neuem Server.

Kurzfassung (TL;DR)

Eine Website-Migration ohne Ausfallzeit erfordert eine sorgfaeltige Planung und eine bestimmte Reihenfolge: DNS-TTL Tage im Voraus senken, alle Dateien und Datenbanken auf den neuen Server replizieren, alles konfigurieren und ueber einen lokalen Hosts-Eintrag testen, dann erst DNS umstellen. Der alte Server bedient den Traffic weiterhin, bis die Propagierung abgeschlossen ist. Diese Anleitung fuehrt durch jeden Schritt fuer Linux-basiertes Hosting mit Apache/Nginx, MySQL/PostgreSQL und Let's-Encrypt-SSL.

Voraussetzungen

Schritt 1: Checkliste vor der Migration

1.1 Bestandsaufnahme der aktuellen Konfiguration

Bevor irgendetwas geaendert wird, muss der aktuelle Zustand dokumentiert werden. Melden Sie sich auf dem alten Server an und sammeln Sie folgende Informationen:

# Webserver und Version pruefen
nginx -v 2>&1 || apache2 -v 2>&1 || httpd -v 2>&1

# PHP-Version pruefen (falls zutreffend)
php -v

# Datenbank-Version pruefen
mysql --version 2>/dev/null || psql --version 2>/dev/null

# Alle Cronjobs auflisten
crontab -l
sudo ls /etc/cron.d/

# Speicherverbrauch des Web-Roots pruefen
du -sh /var/www/ihre-seite/

# Datenbankgroesse pruefen
mysql -u root -p -e "SELECT table_schema AS 'Datenbank', \
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Groesse (MB)' \
  FROM information_schema.tables GROUP BY table_schema;"

1.2 Neuen Server vorbereiten

Richten Sie den neuen Server mit identischen Software-Versionen ein. Versionsunterschiede sind die haeufigste Ursache fuer Probleme nach der Migration.

# Beispiel fuer Ubuntu/Debian - Web-Stack installieren
sudo apt update && sudo apt upgrade -y
sudo apt install nginx php8.2-fpm php8.2-mysql php8.2-xml \
  php8.2-curl php8.2-mbstring mariadb-server -y

# Versionen abgleichen
nginx -v
php -v
mysql --version

1.3 Vollstaendiges Backup erstellen

Starten Sie niemals eine Migration ohne ein verifiziertes Backup. Das ist Ihr Sicherheitsnetz.

# Auf dem alten Server - vollstaendiges Archiv erstellen
tar czf /tmp/site-backup-$(date +%Y%m%d).tar.gz /var/www/ihre-seite/

# Datenbank sichern
mysqldump -u root -p --all-databases --single-transaction \
  --routines --triggers > /tmp/db-backup-$(date +%Y%m%d).sql

Schritt 2: DNS-TTL-Werte senken

Dieser Schritt muss mindestens 24-48 Stunden vor der eigentlichen Migration erfolgen. DNS-Eintraege haben einen TTL-Wert (Time-To-Live), der Resolvern mitteilt, wie lange ein Eintrag zwischengespeichert werden soll. Standardmaessig liegt dieser oft bei 3600 Sekunden (1 Stunde) oder hoeher. Durch das Senken wird sichergestellt, dass die Aenderung nach dem IP-Wechsel schnell propagiert.

# Aktuellen TTL-Wert pruefen
dig +noall +answer ihre-domain.de

# Beispiel-Ausgabe:
# ihre-domain.de.    3600    IN    A    203.0.113.10
#                    ^^^^ Das ist der TTL-Wert in Sekunden

Melden Sie sich im DNS-Verwaltungspanel Ihres Providers an und senken Sie den TTL fuer alle relevanten Eintraege (A, AAAA, CNAME, MX) auf 60-300 Sekunden. Warten Sie mindestens so lange wie der alte TTL-Wert, bevor Sie mit der Migration fortfahren. War der alte TTL 3600 (1 Stunde), warten Sie mindestens eine Stunde nach der Aenderung.

# Pruefen, ob der neue TTL-Wert propagiert wurde
dig +noall +answer ihre-domain.de
# Sollte jetzt anzeigen: ihre-domain.de.    300    IN    A    203.0.113.10

Schritt 3: Website-Dateien auf den neuen Server kopieren

3.1 Mit rsync (empfohlen)

rsync ist der Goldstandard fuer Dateitransfers bei Migrationen. Es arbeitet inkrementell, ist fortsetzbar und bewahrt Berechtigungen.

# Vom alten Server aus Dateien auf den neuen Server uebertragen
rsync -avz --progress --delete \
  -e "ssh -p 22" \
  /var/www/ihre-seite/ \
  benutzer@neue-server-ip:/var/www/ihre-seite/

# Flags erklaert:
# -a  Archivmodus (bewahrt Berechtigungen, Eigentuemer, Zeitstempel)
# -v  Ausfuehrliche Ausgabe
# -z  Komprimiert Daten waehrend der Uebertragung
# --progress  Zeigt Fortschritt an
# --delete  Entfernt Dateien am Ziel, die an der Quelle nicht existieren

Bei sehr grossen Websites sollte rsync in einer Screen- oder Tmux-Sitzung ausgefuehrt werden, damit es SSH-Unterbrechungen uebersteht:

# Tmux-Sitzung starten
tmux new -s migration

# rsync innerhalb der Sitzung ausfuehren
rsync -avz --progress /var/www/ihre-seite/ benutzer@neue-server-ip:/var/www/ihre-seite/

# Abtrennen: Strg+B, dann D
# Spaeter wieder verbinden: tmux attach -t migration

3.2 Mit SFTP (Alternative)

Falls rsync nicht verfuegbar ist (manche Shared-Hosting-Umgebungen), verwenden Sie SFTP:

# Per SFTP mit dem neuen Server verbinden
sftp benutzer@neue-server-ip

# Navigieren und hochladen
sftp> cd /var/www/ihre-seite/
sftp> put -r /lokales/backup/ihre-seite/*

# Fuer automatisierte Transfers lftp zum Spiegeln verwenden
lftp -u benutzer,passwort sftp://neue-server-ip -e "\
  mirror --reverse --delete --verbose \
  /var/www/ihre-seite/ /var/www/ihre-seite/; quit"

3.3 Korrekte Eigentuemer und Berechtigungen setzen

# Auf dem neuen Server Eigentuemer korrigieren
sudo chown -R www-data:www-data /var/www/ihre-seite/

# Verzeichnis- und Dateiberechtigungen korrigieren
find /var/www/ihre-seite/ -type d -exec chmod 755 {} \;
find /var/www/ihre-seite/ -type f -exec chmod 644 {} \;

Schritt 4: Datenbank exportieren und importieren

4.1 MySQL / MariaDB

# Export auf dem alten Server
mysqldump -u root -p --single-transaction --routines --triggers \
  ihre_datenbank > /tmp/ihre_datenbank.sql

# Auf den neuen Server uebertragen
rsync -avz /tmp/ihre_datenbank.sql benutzer@neue-server-ip:/tmp/

# Auf dem neuen Server: Datenbank und Benutzer anlegen
mysql -u root -p -e "\
  CREATE DATABASE ihre_datenbank CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\
  CREATE USER 'ihr_benutzer'@'localhost' IDENTIFIED BY 'sicheres_passwort';\
  GRANT ALL PRIVILEGES ON ihre_datenbank.* TO 'ihr_benutzer'@'localhost';\
  FLUSH PRIVILEGES;"

# Dump importieren
mysql -u root -p ihre_datenbank < /tmp/ihre_datenbank.sql

# Tabellenanzahl pruefen
mysql -u root -p -e "SELECT COUNT(*) AS Tabellen FROM information_schema.tables \
  WHERE table_schema = 'ihre_datenbank';"

4.2 PostgreSQL

# Export auf dem alten Server
pg_dump -U postgres -Fc ihre_datenbank > /tmp/ihre_datenbank.dump

# Auf den neuen Server uebertragen
rsync -avz /tmp/ihre_datenbank.dump benutzer@neue-server-ip:/tmp/

# Auf dem neuen Server: Datenbank und Benutzer anlegen
sudo -u postgres psql -c "CREATE USER ihr_benutzer WITH PASSWORD 'sicheres_passwort';"
sudo -u postgres psql -c "CREATE DATABASE ihre_datenbank OWNER ihr_benutzer;"

# Dump importieren
pg_restore -U postgres -d ihre_datenbank /tmp/ihre_datenbank.dump

# Pruefen
sudo -u postgres psql -d ihre_datenbank -c "\dt" | tail -1

4.3 Umgang mit grossen Datenbanken

Bei Datenbanken ueber einige hundert Megabyte den Dump komprimieren und direkt durchleiten:

# MySQL - direkt streamen ohne Zwischendatei
mysqldump -u root -p --single-transaction ihre_datenbank \
  | gzip | ssh benutzer@neue-server-ip "gunzip | mysql -u root -p ihre_datenbank"

# PostgreSQL - gleicher Ansatz
pg_dump -U postgres -Fc ihre_datenbank \
  | ssh benutzer@neue-server-ip "pg_restore -U postgres -d ihre_datenbank"

Schritt 5: Konfigurationsdateien anpassen

5.1 Webserver-Konfiguration

Kopieren oder erstellen Sie die Virtual-Host-Konfiguration auf dem neuen Server:

# Nginx - Website-Konfiguration erstellen
sudo nano /etc/nginx/sites-available/ihre-seite.conf

# Minimale Nginx-Konfigurationsvorlage:
# server {
#     listen 80;
#     server_name ihre-domain.de www.ihre-domain.de;
#     root /var/www/ihre-seite;
#     index index.php index.html;
#
#     location ~ \.php$ {
#         fastcgi_pass unix:/run/php/php8.2-fpm.sock;
#         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#         include fastcgi_params;
#     }
# }

# Website aktivieren
sudo ln -s /etc/nginx/sites-available/ihre-seite.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

5.2 Anwendungskonfiguration

Aktualisieren Sie alle hartcodierten Pfade, Datenbank-Zugangsdaten oder serverspezifischen Einstellungen:

# Konfigurationsdateien finden, die die alte Server-IP oder den Hostnamen referenzieren
grep -rl "203.0.113.10\|alter-server-hostname" /var/www/ihre-seite/ \
  --include="*.php" --include="*.conf" --include="*.env" --include="*.yml"

# Haeufig zu pruefende Dateien:
# WordPress: wp-config.php
# Laravel: .env
# Django: settings.py
# Generisch: config.php, database.yml, .env

Speziell fuer WordPress:

# wp-config.php mit neuen Datenbank-Zugangsdaten aktualisieren
define('DB_NAME', 'ihre_datenbank');
define('DB_USER', 'ihr_benutzer');
define('DB_PASSWORD', 'sicheres_passwort');
define('DB_HOST', 'localhost');

5.3 Cronjobs

# Cronjobs vom alten Server exportieren
crontab -l > /tmp/crontab-backup.txt

# Auf den neuen Server uebertragen und importieren
rsync -avz /tmp/crontab-backup.txt benutzer@neue-server-ip:/tmp/
# Auf dem neuen Server:
crontab /tmp/crontab-backup.txt
crontab -l  # Pruefen

Schritt 6: SSL auf dem neuen Server einrichten

SSL muss vor der DNS-Umstellung bereitstehen. Verwenden Sie Let's Encrypt mit einer temporaeren Verifizierungsmethode oder kopieren Sie bestehende Zertifikate.

6.1 Bestehende Zertifikate kopieren (schnelle Methode)

# Auf dem alten Server Zertifikate archivieren
sudo tar czf /tmp/letsencrypt-backup.tar.gz /etc/letsencrypt/

# Auf neuen Server uebertragen
rsync -avz /tmp/letsencrypt-backup.tar.gz benutzer@neue-server-ip:/tmp/

# Auf dem neuen Server
sudo tar xzf /tmp/letsencrypt-backup.tar.gz -C /
sudo apt install certbot python3-certbot-nginx -y

6.2 Neues Zertifikat per DNS-Challenge ausstellen

Diese Methode funktioniert auch, bevor der DNS-Eintrag auf den neuen Server zeigt:

# Certbot auf dem neuen Server installieren
sudo apt install certbot -y

# DNS-Challenge verwenden - Domain muss noch nicht hierher zeigen
sudo certbot certonly --manual --preferred-challenges dns \
  -d ihre-domain.de -d www.ihre-domain.de

# Certbot fordert auf, einen DNS-TXT-Eintrag zu erstellen
# Den Anweisungen auf dem Bildschirm folgen, dann pruefen:
dig +short TXT _acme-challenge.ihre-domain.de

6.3 Webserver-SSL-Konfiguration aktualisieren

# Nginx-SSL-Konfiguration
# server {
#     listen 443 ssl http2;
#     server_name ihre-domain.de www.ihre-domain.de;
#     ssl_certificate /etc/letsencrypt/live/ihre-domain.de/fullchain.pem;
#     ssl_certificate_key /etc/letsencrypt/live/ihre-domain.de/privkey.pem;
#     ... restliche Konfiguration ...
# }

sudo nginx -t && sudo systemctl reload nginx

Schritt 7: Testen auf dem neuen Server vor dem DNS-Wechsel

Dies ist der wichtigste Schritt. Sie muessen ueberpruefen, dass die Website auf dem neuen Server funktioniert, bevor Sie den DNS-Eintrag aendern. Der Hosts-Datei-Trick erlaubt es, die Domain nur auf Ihrem lokalen Rechner auf die neue Server-IP zeigen zu lassen.

7.1 Der Hosts-Datei-Trick

# Auf Ihrem lokalen Rechner (macOS/Linux)
sudo nano /etc/hosts

# Diese Zeile hinzufuegen (IP des NEUEN Servers verwenden)
198.51.100.20    ihre-domain.de www.ihre-domain.de

# Unter Windows: C:\Windows\System32\drivers\etc\hosts bearbeiten

# DNS-Cache leeren
# macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# Linux:
sudo systemd-resolve --flush-caches

7.2 Pruefungsliste

Oeffnen Sie Ihren Browser und testen Sie gruendlich:

# Kommandozeilen-Verifizierung
curl -I https://ihre-domain.de  # Sollte 200 zurueckgeben
curl -sL https://ihre-domain.de | grep -o ".*"  # Titel pruefen

# Alle wichtigen URLs testen
for url in "/" "/ueber-uns" "/kontakt" "/blog" "/login"; do
  status=$(curl -o /dev/null -s -w "%{http_code}" https://ihre-domain.de$url)
  echo "$url -> $status"
done

7.3 Hosts-Eintrag nach dem Testen entfernen

# WICHTIG: Hosts-Eintrag nach dem Testen entfernen oder auskommentieren
sudo sed -i '/ihre-domain.de/d' /etc/hosts

Schritt 8: DNS-Umstellung

8.1 Letzte Datensynchronisation

Unmittelbar vor der DNS-Umstellung eine letzte Synchronisation durchfuehren, um alle Aenderungen seit der ersten Kopie zu erfassen:

# Letzte Dateisynchronisation
rsync -avz --delete /var/www/ihre-seite/ benutzer@neue-server-ip:/var/www/ihre-seite/

# Letzte Datenbanksynchronisation
mysqldump -u root -p --single-transaction ihre_datenbank \
  | ssh benutzer@neue-server-ip "mysql -u root -p ihre_datenbank"

8.2 DNS-Eintraege aendern

Aktualisieren Sie den DNS-A-Eintrag (und AAAA, falls zutreffend) auf die IP-Adresse des neuen Servers. Da Sie den TTL-Wert in Schritt 2 gesenkt haben, wird die Propagierung schnell verlaufen.

# Nach der DNS-Aktualisierung die Propagierung ueberwachen
watch -n 10 "dig +short ihre-domain.de"

# Propagierung von mehreren Standorten pruefen
for ns in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
  echo "$ns: $(dig +short @$ns ihre-domain.de)"
done

8.3 Alten Server weiterlaufen lassen

Fahren Sie den alten Server nicht sofort herunter. Manche DNS-Resolver ignorieren niedrige TTL-Werte. Lassen Sie den alten Server mindestens 48-72 Stunden nach der Umstellung laufen. Optional koennen Sie auf dem alten Server eine Weiterleitung einrichten:

# Optional: Auf dem alten Server verbleibenden Traffic umleiten
# Nginx-Konfiguration auf dem alten Server:
# server {
#     listen 80;
#     listen 443 ssl;
#     server_name ihre-domain.de;
#     return 301 $scheme://ihre-domain.de$request_uri;
# }

Schritt 9: Nachkontrolle

9.1 Automatisierter Gesundheitscheck

#!/bin/bash
# nachkontrolle.sh
DOMAIN="ihre-domain.de"
ERWARTETE_IP="198.51.100.20"  # IP des neuen Servers

echo "=== Nachkontrolle der Migration ==="

# DNS-Pruefung
AKTUELLE_IP=$(dig +short $DOMAIN)
if [ "$AKTUELLE_IP" = "$ERWARTETE_IP" ]; then
  echo "[OK] DNS zeigt auf neuen Server ($AKTUELLE_IP)"
else
  echo "[FEHLER] DNS zeigt noch auf $AKTUELLE_IP (erwartet: $ERWARTETE_IP)"
fi

# HTTP-Status-Pruefung
HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" https://$DOMAIN)
if [ "$HTTP_STATUS" = "200" ]; then
  echo "[OK] HTTP-Status: $HTTP_STATUS"
else
  echo "[FEHLER] HTTP-Status: $HTTP_STATUS"
fi

# SSL-Pruefung
SSL_ABLAUF=$(echo | openssl s_client -connect $DOMAIN:443 2>/dev/null \
  | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "[INFO] SSL laeuft ab: $SSL_ABLAUF"

# Antwortzeit
ANTWORTZEIT=$(curl -o /dev/null -s -w "%{time_total}" https://$DOMAIN)
echo "[INFO] Antwortzeit: ${ANTWORTZEIT}s"

# Auf Mixed-Content / defekte Assets pruefen
DEFEKT=$(curl -sL https://$DOMAIN | grep -c 'http://' || true)
echo "[INFO] Moegliche Mixed-Content-Referenzen: $DEFEKT"

9.2 Logs ueberwachen

# Auf dem neuen Server nach Fehlern schauen
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php8.2-fpm.log
sudo tail -f /var/log/mysql/error.log

9.3 TTL wiederherstellen

Nach 48-72 Stunden den DNS-TTL-Wert wieder auf einen normalen Wert erhoehen (3600 oder hoeher), um die DNS-Abfragelast zu reduzieren:

# Endgueltigen TTL-Wert pruefen
dig +noall +answer ihre-domain.de
# Sollte den wiederhergestellten TTL-Wert anzeigen

Fehlerbehebung

Website zeigt eine leere Seite oder 500-Fehler

# Webserver-Fehlerlog pruefen
sudo tail -50 /var/log/nginx/error.log

# Haeufige Ursachen:
# - Fehlende PHP-Module: sudo apt install php8.2-{modul}
# - Berechtigungsprobleme: sudo chown -R www-data:www-data /var/www/ihre-seite/
# - Falsche PHP-Version in der Konfiguration: fastcgi_pass Socket-Pfad pruefen

# Pruefen ob PHP-FPM laeuft
sudo systemctl status php8.2-fpm

Datenbankverbindung fehlgeschlagen

# Pruefen ob MySQL laeuft
sudo systemctl status mariadb

# Datenbank-Zugangsdaten testen
mysql -u ihr_benutzer -p ihre_datenbank -e "SELECT 1;"

# Socket-Pfad pruefen bei Socket-Verbindung
ls -la /var/run/mysqld/mysqld.sock

# Datenbank-Host in der Konfiguration pruefen (localhost vs. 127.0.0.1)
# localhost = Socket, 127.0.0.1 = TCP

SSL-Zertifikatsfehler

# Zertifikatstatus pruefen
sudo certbot certificates

# SSL-Konfiguration testen
openssl s_client -connect ihre-domain.de:443 -servername ihre-domain.de

# Zertifikatserneuerung erzwingen
sudo certbot renew --force-renewal

# Nginx-SSL-Konfigurationssyntax pruefen
sudo nginx -t

E-Mails funktionieren nach der Migration nicht

# MX-Eintraege pruefen - diese sollten sich NICHT geaendert haben
dig +short MX ihre-domain.de

# Falls Sie einen eigenen Mailserver betreiben, SPF und DKIM pruefen
dig +short TXT ihre-domain.de | grep spf

# SPF-Eintrag aktualisieren, falls die alte Server-IP enthalten ist
# Alt: v=spf1 ip4:203.0.113.10 ...
# Neu: v=spf1 ip4:198.51.100.20 ...

rsync-Uebertragung unterbrochen

# rsync ist fortsetzbar - einfach denselben Befehl erneut ausfuehren
rsync -avz --progress --partial /var/www/ihre-seite/ benutzer@neue-server-ip:/var/www/ihre-seite/

# --partial bewahrt teilweise uebertragene Dateien fuer die Fortsetzung

Praevention und Best Practices

Vor jeder Migration

Infrastruktur-Praktiken

Nach der Migration

Experten-Hilfe gebraucht?

Professionelle Migration ohne Ausfallzeit? €99.

Jetzt buchen — €99

100% Geld-zurück-Garantie

HR

Harald Roessler

Infrastructure Engineer mit 20+ Jahren Erfahrung. Gründer der DSNCON GmbH.