Wie man eine MySQL-Datenbank aus einem Backup mit MySQL Workbench wiederherstellt
Das Wiederherstellen einer MySQL-Datenbank aus einem Backup mit MySQL Workbench bedeutet, eine .sql Dump-Datei (oder einen verzeichnisbasierten Export) über den Datenimport/Wiederherstellungs-Assistenten der GUI in ein Zielschema zu importieren, der intern mysql Client-Befehle gegen Ihren Server ausführt. Der Vorgang dauert bei kleinen bis mittelgroßen Datenbanken unter fünf Minuten und erfordert drei Dinge: eine laufende MySQL-Serverinstanz, eine gültige Backup-Datei und ein Benutzerkonto mit ausreichenden Berechtigungen (mindestens CREATE, DROP, INSERT, ALTER und INDEX).
Dieser Leitfaden behandelt jeden Schritt von der Verbindungseinrichtung bis zur Überprüfung nach der Wiederherstellung, einschließlich der Sonderfälle — Zeichensatz-Diskrepanzen, partielle Wiederherstellungen, Timeouts bei großen Dateien und Berechtigungsfehler —, die die offizielle Dokumentation übergeht.
Voraussetzungen und Umgebungs-Checkliste
Bevor Sie MySQL Workbench verwenden, bestätigen Sie Folgendes:
- MySQL Workbench 8.0+ ist installiert. Das hier beschriebene UI-Layout entspricht Version 8.0.x. Ältere 6.x-Builds haben einen anderen Menüpfad.
- Das Backup-Dateiformat ist kompatibel. Der Datenimport-Assistent von MySQL Workbench akzeptiert
.sqlDateien, die vonmysqldump, dem eigenen Datenexport von MySQL Workbench oder einem beliebigen Tool erstellt wurden, das Standard-SQL DDL/DML ausgibt. Er importiert NICHT nativ.xbstream(Percona XtraBackup) oder binäre.frm/.ibdDateien — diese erfordern einen separaten physischen Wiederherstellungsprozess. - Ziel-MySQL-Serverversion. Das Wiederherstellen eines Dumps von MySQL 8.0 auf einem MySQL 5.7-Server schlägt fehl, wenn der Dump 8.0-spezifische Syntax verwendet (z. B. unsichtbare Spalten, funktionale Indizes). Stimmen Sie immer die Hauptversionen ab oder stellen Sie auf einer neueren Version wieder her.
- Benutzerberechtigungen. Führen Sie diese Abfrage aus, um zu überprüfen, ob Ihr Konto über die erforderlichen Berechtigungen verfügt:
SHOW GRANTS FOR 'your_user'@'localhost';max_allowed_packetEinstellung. Bei großen Dumps mit BLOB-Spalten oder langen INSERT-Anweisungen muss dermax_allowed_packetdes Servers groß genug sein. Überprüfen und erhöhen Sie ihn bei Bedarf vorübergehend:
SHOW VARIABLES LIKE 'max_allowed_packet';
SET GLOBAL max_allowed_packet = 1073741824; -- 1 GBnet_read_timeoutundnet_write_timeout. Große Wiederherstellungen über langsame Verbindungen können Timeout-Schwellenwerte erreichen. Setzen Sie beide auf mindestens3600Sekunden, bevor Sie beginnen.
Wenn Sie einen Remote-Server verwalten, stellen Sie sicher, dass Ihre VPS Hosting-Instanz MySQL-Port 3306 von Ihrer Workstation aus zugänglich hat, oder verwenden Sie einen SSH-Tunnel (unten beschrieben).
Schritt 1: MySQL Workbench starten und mit Ihrem Server verbinden
Öffnen Sie MySQL Workbench. Auf dem Startbildschirm sehen Sie Ihre gespeicherten Verbindungen unter MySQL Connections.
Verbindung zu einem lokalen Server: Klicken Sie auf die Verbindungskachel. Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden.
Verbindung zu einem Remote-Server über SSH-Tunnel: Wenn sich Ihr MySQL-Server auf einem Remote-Host befindet und Port 3306 nicht öffentlich zugänglich ist (die empfohlene Sicherheitshaltung), verwenden Sie den integrierten SSH-Tunnel von Workbench:
- Klicken Sie auf das +-Symbol neben „MySQL Connections”.
- Setzen Sie die Verbindungsmethode auf
Standard TCP/IP over SSH. - Geben Sie den SSH-Hostnamen, SSH-Benutzernamen und den Pfad zur SSH-Schlüsseldatei ein.
- Setzen Sie den MySQL-Hostnamen auf
127.0.0.1und den Port auf3306. - Klicken Sie auf Verbindung testen, um zu bestätigen, dass der Tunnel funktioniert, bevor Sie fortfahren.
Dies ist der richtige Ansatz für jeden Produktionsserver — setzen Sie MySQL niemals direkt dem öffentlichen Internet aus.
Schritt 2: Das Zieldatenbankschema vorbereiten
Sie benötigen ein Zielschema, bevor Sie importieren. Sie haben zwei Möglichkeiten:
Option A: In ein vorhandenes Schema wiederherstellen
Wenn das Backup von einem Schema erstellt wurde, das noch auf dem Server vorhanden ist (z. B. wenn Sie nach einer fehlgeschlagenen Migration einen Rollback durchführen), ist das Schema bereits im Navigator > Schemas-Panel auf der linken Seite sichtbar. Hier ist keine Aktion erforderlich — Sie wählen es während der Importkonfiguration aus.
Wichtige Warnung: Das Importieren in ein vorhandenes Schema löscht vorhandene Tabellen NICHT automatisch, es sei denn, Ihre Dump-Datei enthält DROP TABLE IF EXISTS Anweisungen. Wenn Ihr Dump mit mysqldump --add-drop-table (Standard) erstellt wurde, werden vorhandene Tabellen gelöscht und neu erstellt. Wenn nicht, können Sie mit doppelten Daten oder Constraint-Verletzungen enden. Überprüfen Sie die ersten 50 Zeilen Ihrer .sql Datei zur Bestätigung:
head -50 /path/to/your_backup.sqlOption B: Ein neues Schema erstellen
Wenn Sie in ein neues Schema wiederherstellen (Migration, neue Umgebung, Notfallwiederherstellung), erstellen Sie es zuerst. Gehen Sie zu Datei > Neuer Abfrage-Tab und führen Sie aus:
CREATE DATABASE `database_name`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;Geben Sie CHARACTER SET utf8mb4 immer explizit an. Wenn Sie das Schema mit dem Standard-Zeichensatz des Servers erstellen und Ihr Dump von einer utf8mb4 Datenbank erstellt wurde, riskieren Sie eine stille Zeichenkodierungskorruption bei String-Spalten. Klicken Sie nach der Ausführung auf das Aktualisierungssymbol (Kreispfeil) im Schemas-Panel, um das neue Schema sichtbar zu machen.
Schritt 3: Den Datenimport-Assistenten öffnen
Navigieren Sie in der oberen Menüleiste zu Server > Datenimport. Das Datenimport/Wiederherstellungs-Panel öffnet sich im Hauptarbeitsbereich.
Sie sehen zwei Importmodi:
| Importmodus | Wann zu verwenden |
|---|---|
| Import aus eigenständiger Datei | Einzelne .sql Datei, erstellt von mysqldump oder Workbench-Datenexport (Einzeldatei-Modus). Dies ist der häufigste Fall. |
| Import aus Dump-Projektordner | Ein Verzeichnis mit mehreren .sql Dateien, nach Schema/Tabelle organisiert, erstellt vom Datenexport von Workbench im „Projektordner”-Modus. Jede Tabelle erhält ihre eigene Datei. |
Für die überwiegende Mehrheit der Wiederherstellungsvorgänge wählen Sie Import aus eigenständiger Datei.
Klicken Sie auf Durchsuchen und navigieren Sie zu Ihrer .sql Backup-Datei. Workbench zeigt den vollständigen Pfad im Feld an.
Schritt 4: Zielschema und Importoptionen konfigurieren
Das Standard-Zielschema auswählen
Öffnen Sie unter Standard-Schema für den Import das Dropdown-Menü und wählen Sie das Zielschema aus, das Sie in Schritt 2 identifiziert oder erstellt haben.
Wann Sie dieses Feld leer lassen: Wenn Ihre Dump-Datei eigene CREATE DATABASE und USE Anweisungen enthält (üblich, wenn mysqldump mit dem --databases oder --all-databases Flag ausgeführt wurde), können Sie das Zielschema-Feld leer lassen. Workbench lässt das SQL-Skript die Schemaauswahl steuern. Dies bedeutet jedoch, dass der Dump versucht, die Datenbank selbst zu erstellen — wenn sie bereits existiert, erhalten Sie möglicherweise einen Fehler, es sei denn, der Dump enthält CREATE DATABASE IF NOT EXISTS.
Wann Sie ein Zielschema auswählen müssen: Wenn der Dump mit mysqldump database_name > backup.sql (ohne --databases) erstellt wurde, enthält die Datei keine CREATE DATABASE oder USE Anweisung. Sie MÜSSEN hier das Zielschema auswählen, sonst schlägt der Import mit ERROR 1046: No database selected fehl.
Dump-Struktur vs. Daten
Wenn Sie den Projektordner-Export von Workbench verwendet haben, sehen Sie Kontrollkästchen zum selektiven Importieren:
- Dump-Struktur und Daten — vollständige Wiederherstellung (Standard, empfohlen für Notfallwiederherstellung)
- Nur Dump-Daten — füllt Tabellen neu, ohne das Schema neu zu erstellen; nützlich, wenn das Schema bereits übereinstimmt
- Nur Dump-Struktur — erstellt Tabellen/Views/Prozeduren neu, ohne Zeilen einzufügen
Schritt 5: Den Import ausführen
Klicken Sie auf Import starten in der unteren rechten Ecke des Panels.
Workbench startet einen Hintergrundprozess, der Ihre .sql Datei durch den mysql Befehlszeilen-Client leitet. Der Import-Fortschritts-Tab und das Protokoll-Panel werden in Echtzeit aktualisiert. Achten Sie auf:
- Grüner Fortschrittsbalken erreicht 100% — erfolgreicher Abschluss.
ERROR 1044— Zugriff verweigert; Ihr Benutzer hat keine Berechtigungen für das Zielschema.ERROR 1005/ERROR 1215— Fremdschlüssel-Constraint-Fehler; Tabellen werden in der falschen Reihenfolge erstellt oder eine referenzierte Tabelle fehlt. Dies passiert manchmal bei partiellen Dumps.ERROR 2006: MySQL server has gone away— dermax_allowed_packetoder Timeout-Schwellenwert wurde erreicht. Erhöhen Sie beide Werte wie im Abschnitt Voraussetzungen gezeigt und versuchen Sie es erneut.Packet too large— gleiche Grundursache wie oben.
Bei großen Datenbanken (Multi-GB-Dumps) kann die Workbench-GUI eingefroren erscheinen. Das ist sie nicht — der zugrunde liegende mysql Prozess läuft noch. Schließen Sie das Fenster nicht. Wenn Sie mehr Kontrolle über große Wiederherstellungen benötigen, ist der Befehlszeilenansatz zuverlässiger:
mysql -u your_user -p --max_allowed_packet=1G database_name < /path/to/backup.sqlSchritt 6: Die wiederhergestellte Datenbank überprüfen
Eine erfolgreiche Importmeldung ist keine ausreichende Bestätigung. Führen Sie immer eine aktive Überprüfung durch.
Schema-Ebenen-Überprüfung
Klicken Sie im Navigator-Panel mit der rechten Maustaste auf Schemas und wählen Sie Alle aktualisieren. Erweitern Sie die wiederhergestellte Datenbank und bestätigen Sie visuell:
- Alle erwarteten Tabellen sind vorhanden
- Views, gespeicherte Prozeduren und Trigger sind unter ihren jeweiligen Knoten aufgeführt
Zeilenanzahl-Stichprobe
Öffnen Sie einen neuen Abfrage-Tab, wählen Sie Ihre wiederhergestellte Datenbank aus und führen Sie aus:
SELECT
table_name,
table_rows,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'database_name'
ORDER BY table_rows DESC;Vergleichen Sie diese Zeilenanzahlen mit Ihrem Quellsystem oder einem früheren Backup-Manifest. table_rows in information_schema ist eine Schätzung für InnoDB — für genaue Zählungen bei kritischen Tabellen führen Sie SELECT COUNT(*) FROM table_name direkt aus.
Datenintegritätsprüfung
Führen Sie für InnoDB-Tabellen eine schnelle Konsistenzprüfung durch:
CHECK TABLE your_table_name EXTENDED;Wenn Sie Fremdschlüsselbeziehungen haben, überprüfen Sie, ob die referenzielle Integrität während des Imports nicht beschädigt wurde:
SET FOREIGN_KEY_CHECKS = 1;
-- Then attempt a JOIN across related tables to confirm linkage
SELECT COUNT(*) FROM orders o JOIN customers c ON o.customer_id = c.id;Zeichenkodierungsüberprüfung
Wenn Ihre Anwendung mehrsprachige Inhalte speichert, überprüfen Sie, ob Sonderzeichen nicht beschädigt wurden:
SELECT column_name FROM table_name WHERE column_name LIKE '%ü%' LIMIT 5;Wenn Ergebnisse leer sind, obwohl sie es nicht sein sollten, haben Sie wahrscheinlich eine Zeichensatz-Diskrepanz zwischen dem Dump und dem Zielschema.
Umgang mit großen Backup-Dateien und Leistungsüberlegungen
Bei Datenbanken, die einige hundert Megabyte überschreiten, wird die Workbench-GUI unpraktisch. Erwägen Sie diese Ansätze:
Den Dump nach Tabelle aufteilen: Wenn Sie nur bestimmte Tabellen wiederherstellen müssen, extrahieren Sie diese aus dem Dump:
grep -n "Table structure for table" /path/to/backup.sqlDies zeigt Zeilennummern für jeden Tabellenblock an, sodass Sie einen bestimmten Bereich mit sed oder awk extrahieren können.
mysqlimport für CSV-basierte Wiederherstellungen verwenden: Wenn Ihr Backup im CSV-Format vorliegt (exportiert über SELECT ... INTO OUTFILE), ist mysqlimport deutlich schneller als die zeilenweise Verarbeitung von SQL-Anweisungen.
Indizes während des Imports deaktivieren: Bei sehr großen Datensätzen kann das vorübergehende Deaktivieren von Index-Updates die Importzeit um 50–80% reduzieren:
ALTER TABLE large_table DISABLE KEYS;
-- (import data)
ALTER TABLE large_table ENABLE KEYS;Setzen Sie für InnoDB speziell innodb_autoinc_lock_mode = 0 und foreign_key_checks = 0 in Ihrer Sitzung vor dem Import:
SET SESSION foreign_key_checks = 0;
SET SESSION unique_checks = 0;Wenn Sie MySQL auf einem Dedicated Server mit hohem I/O-Durchsatz betreiben, können Sie auch vorübergehend innodb_buffer_pool_size erhöhen, um den Import zu beschleunigen, indem mehr Daten im Speicher gehalten werden, anstatt ständig auf die Festplatte zu schreiben.
MySQL Workbench Datenimport vs. Befehlszeilen-Wiederherstellung: Vergleich
| Kriterium | MySQL Workbench GUI | `mysql` CLI / `mysqldump` |
|---|---|---|
| Benutzerfreundlichkeit | Hoch — Point-and-Click | Mittel — erfordert CLI-Kenntnisse |
| Handhabung großer Dateien | Schlecht über ~500 MB (GUI friert ein) | Ausgezeichnet — streamt direkt |
| Fortschrittsanzeige | Protokoll-Panel, begrenzte Details | Ausführlich mit --verbose Flag |
| Selektive Tabellenwiederherstellung | Unterstützt (Projektordner-Modus) | Erfordert manuelle Dateibearbeitung oder --tables Flag |
| Automatisierung / Scripting | Nicht möglich | Vollständig skriptbar via Cron/Bash |
| SSH-Tunnel-Unterstützung | Integriert | Manuelles SSH-Port-Forwarding erforderlich |
| Zeichensatz-Kontrolle | Begrenzt | Volle Kontrolle über --default-character-set |
| Am besten geeignet für | Ad-hoc-Wiederherstellungen, Entwicklungsumgebungen | Produktion, CI/CD, große Datenbanken |
Häufige Fallstricke und wie man sie vermeidet
Wiederherstellen eines Dumps, der DEFINER Klauseln enthält: Gespeicherte Prozeduren und Views enthalten oft DEFINER='original_user'@'original_host'. Wenn dieser Benutzer auf dem Zielserver nicht existiert, wird der Import erfolgreich sein, aber die Ausführung dieser Objekte schlägt mit ERROR 1449 fehl. Entfernen oder ersetzen Sie DEFINER-Klauseln vor dem Import:
sed 's/DEFINER=[^ ]* / /g' original_backup.sql > cleaned_backup.sqlZeitzonen-Diskrepanzen: Wenn Ihre Anwendung DATETIME Werte speichert und Quell- und Zielserver in verschiedenen Zeitzonen sind, erscheinen Daten verschoben. Bestätigen Sie immer, dass @@global.time_zone zwischen Quelle und Ziel übereinstimmt, bevor Sie wiederherstellen.
Wiederherstellen in einer replizierten Umgebung: Wenn der MySQL-Zielserver ein Replikations-Primary ist, werden die Import-Anweisungen in das Binary-Log geschrieben und auf alle Replikas repliziert. Dies ist in der Regel für eine vollständige Wiederherstellung erwünscht, kann jedoch Probleme verursachen, wenn Replikas bereits voraus oder zurück sind. Pausieren Sie die Replikation auf Replikas vor einer größeren Wiederherstellungsoperation.
Binary-Log-Aufblähung: Große Imports erzeugen enorme Binary-Log-Dateien. Wenn der Speicherplatz begrenzt ist, deaktivieren Sie das Binary-Logging vorübergehend für die Sitzung:
SET SQL_LOG_BIN = 0;
-- (perform import)
SET SQL_LOG_BIN = 1;Hinweis: Dies erfordert das SUPER oder BINLOG ADMIN Privileg und sollte nur auf eigenständigen Servern durchgeführt werden, niemals auf Replikations-Primaries, auf die Replikas vom Binary-Log abhängig sind.
Automatisierte Backups einrichten, um zukünftigen Datenverlust zu verhindern
Ein Wiederherstellungsverfahren ist nur so gut wie das Backup, das es speist. Wenn Sie Ihren eigenen MySQL-Server verwalten — ob auf einem VPS mit cPanel oder einem reinen Linux-VPS — automatisieren Sie Ihre Backups mit einem Cron-Job:
# Daily mysqldump backup with timestamp, retained for 7 days
0 2 * * * /usr/bin/mysqldump -u backup_user -p'StrongPassword'
--single-transaction
--routines
--triggers
--hex-blob
--default-character-set=utf8mb4
your_database | gzip > /backups/db_$(date +%F).sql.gz
&& find /backups -name "db_*.sql.gz" -mtime +7 -deleteErklärung der wichtigsten Flags:
--single-transaction— erstellt einen konsistenten Snapshot von InnoDB-Tabellen ohne diese zu sperren, unerlässlich für Live-Datenbanken--routines— enthält gespeicherte Prozeduren und Funktionen (standardmäßig ausgelassen)--triggers— enthält Trigger (standardmäßig enthalten, aber explizit ist besser)--hex-blob— dumpt BLOB-Spalten als Hex-Strings und verhindert Binärdaten-Korruption
Speichern Sie Backups außerhalb des Servers. Ein Backup auf derselben Festplatte wie die Datenbank, die es schützt, ist kein Backup — es ist ein falsches Sicherheitsgefühl. Verwenden Sie Remote-Speicher, Objektspeicher oder einen sekundären Server. Wenn Ihre Hosting-Umgebung VPS Control Panels unterstützt, enthalten die meisten Panels integrierte geplante Backup-Funktionen, die Kopien automatisch an Remote-Ziele übertragen können.
Technische Schlüssel-Checkliste
Führen Sie vor jeder MySQL-Wiederherstellung diese Entscheidungsmatrix durch:
- [ ] Bestätigen Sie, dass der Backup-Dateityp
.sqlist (textbasierter Dump) — nicht das XtraBackup-Binärformat - [ ] Stimmen Sie die MySQL-Server-Hauptversionen zwischen Quelle und Ziel ab
- [ ] Überprüfen Sie, ob der Benutzer
CREATE,DROP,INSERT,ALTER,INDEXBerechtigungen für das Zielschema hat - [ ] Überprüfen Sie
max_allowed_packetund Timeout-Variablen; erhöhen Sie diese, wenn der Dump BLOBs enthält oder groß ist - [ ] Überprüfen Sie die ersten 50 Zeilen des Dumps, um festzustellen, ob
CREATE DATABASE/USEAnweisungen vorhanden sind - [ ] Entscheiden Sie: In vorhandenes Schema wiederherstellen (Risiko der Datenzusammenführung) oder neues Schema (sauberer Start)
- [ ] Entfernen Sie
DEFINERKlauseln, wenn Sie auf einem anderen Server mit anderen Benutzerkonten wiederherstellen - [ ] Bestätigen Sie, dass Zeichensätze zwischen Dump und Zielschema übereinstimmen (
utf8mb4universell empfohlen) - [ ] Für Produktionswiederherstellungen: Replikation deaktivieren, Binary-Logging bei Bedarf deaktivieren, Pre-Restore-Snapshot erstellen
- [ ] Nach dem Import: Zeilenanzahlen überprüfen,
CHECK TABLEausführen, Anwendungskonnektivität testen - [ ] Für Datenbanken über 500 MB: Workbench-GUI umgehen und
mysqlCLI direkt verwenden
FAQ
F: Kann MySQL Workbench eine komprimierte .sql.gz Backup-Datei direkt wiederherstellen?
Nein. Der Datenimport-Assistent von MySQL Workbench akzeptiert keine gzip-komprimierten Dateien. Dekomprimieren Sie die Datei zuerst mit gunzip backup.sql.gz oder leiten Sie sie direkt über die CLI weiter: gunzip -c backup.sql.gz | mysql -u user -p database_name.
F: Warum wird mein Import ohne Fehler abgeschlossen, aber einige Tabellen fehlen?
Die häufigste Ursache ist, dass der Dump mit --no-tablespaces erstellt wurde oder ein partieller Export war, der bestimmte Tabellen ausgeschlossen hat. Öffnen Sie die .sql Datei und suchen Sie nach CREATE TABLE table_name, um zu bestätigen, ob die fehlenden Tabellen jemals im Dump enthalten waren.
F: Was ist der Unterschied zwischen „Import aus eigenständiger Datei” und „Import aus Dump-Projektordner” in Workbench?
Eine eigenständige Datei ist eine einzelne monolithische .sql Datei, die alle DDL und DML für die gesamte Datenbank enthält. Ein Dump-Projektordner ist eine Verzeichnisstruktur, in der Schema und Daten jeder Tabelle in separaten Dateien gespeichert sind — dieses Format wird erstellt, wenn Sie den Datenexport von Workbench mit der Option „In Dump-Projektordner exportieren” verwenden. Das Projektordner-Format ermöglicht selektive Wiederherstellungen auf Tabellenebene einfacher.
F: Meine Wiederherstellung schlägt mit ERROR 1215: Cannot add foreign key constraint fehl. Wie behebe ich das?
Dies passiert, wenn Tabellen in einer Reihenfolge erstellt werden, die Fremdschlüsselabhängigkeiten verletzt — eine referenzierte übergeordnete Tabelle existiert noch nicht, wenn die untergeordnete Tabelle erstellt wird. Die Lösung besteht darin, Fremdschlüsselprüfungen für die Importsitzung zu deaktivieren. Fügen Sie SET FOREIGN_KEY_CHECKS=0; am Anfang Ihrer .sql Datei und SET FOREIGN_KEY_CHECKS=1; am Ende hinzu, dann führen Sie den Import erneut aus.
F: Ist es sicher, ein Backup direkt auf einer Live-Produktionsdatenbank wiederherzustellen, ohne vorher einen Snapshot zu erstellen?
Nein. Erstellen Sie immer ein aktuelles Backup der Live-Datenbank, bevor Sie sie überschreiben. Selbst wenn Sie von der Backup-Datei überzeugt sind, kann eine Wiederherstellungsoperation, die auf halbem Weg fehlschlägt, das Schema in einem teilweise geänderten Zustand hinterlassen. Verwenden Sie mysqldump --single-transaction, um den aktuellen Zustand in Sekunden ohne Ausfallzeit zu erfassen, und fahren Sie dann mit der Wiederherstellung fort.
