
Ich kann mein MySQL seit gestern nicht mehr ausführen und habe keinen Zugriff darauf, also habe ich beschlossen, es neu zu installieren. Ich habe den Datenordner gesichert, der vermutlich alles enthält, was ich zum Wiederherstellen der Datenbank nach der Neuinstallation von MySQL benötige.
Ich habe den alten Datenordner kopiert und mit der Sicherungskopie überschrieben, aber es wird ein Fehler ausgegeben, der das Laden von MySQL verhindert.
Ich habe nur den Ordner mit dem gleichen Namen wie meine Datenbank kopiert und eingefügt (sagen wirmeineDatenbank), und es läuft einwandfrei, aber die Datenbank selbst konnte nicht geladen werden. Wenn ich versuche, mit SQLyog auf die Datenbank zuzugreifen, wirft jede Tabelle die Meldung „Datei kann nicht geöffnet werden“ aus.Tabellenname.ibd"
Wie kann ich meine Datenbank ordnungsgemäß wiederherstellen?
Ich verwende MySQL 4.1 und Windows 7.
Antwort1
Wiederherstellen von MySQL InnoDB-Dateien unter Windows
Die Dateien vom Typ InnoDB waren eine schwierigere Aufgabe, und deshalb schreibe ich diesen Beitrag. Es war schwer herauszufinden, wie es geht, aber ich habe genug Informationen zusammengetragen, um die Aufgabe zu bewältigen. Jetzt werde ich im Bemühen, etwas zurückzugeben, genau erklären, was ich getan habe, um sie wiederherzustellen.
In unseren Backups hatten wir die folgenden Dateien:
\MySQL\MySQL Server 4.1\data\ibdata1 \MySQL\MySQL Server 4.1\data\ib_logfile0 \MySQL\MySQL Server 4.1\data\ib_logfile1
Außerdem gab es im Datenordner einen Ordner mit dem Namen der Datenbank, die ich wiederherstellte, und der
*.frm
Dateien enthielt (table_name.frm
).Ich habe die Wiederherstellung auf meinem Entwicklungscomputer und nicht auf dem eigentlichen Server durchgeführt, weil ich nichts durcheinanderbringen wollte, was auf dem Server funktionierte. Ich hatte MySQL bereits von einer XAMPP-Installation installiert. (Auf meiner Entwicklungsmaschine läuft Windows XP SP2.) XAMPP installiert MySQL etwas anders als die normale MySQL-Installation. Wenn es also hilft, meinen Anweisungen zu folgen, möchten Sie es vielleicht installieren.
Ich habe meinen MySQL-Dienst zuerst über das Control Panel von XAMPP gestoppt.
Ich habe die oben aufgeführten Dateien (
ib*
Dateien und den Ordner, der die*.frm
Dateien enthält) in meinen lokalen MySQL-Datenordner (C:\Program Files\xampp\mysql\data
) verschoben.Ich habe dann
my.cnf
(befindet sich inC:\Program Files\xampp\mysql\bin
) bearbeitet und die folgenden Änderungen vorgenommen (bei mir beginnend ab Zeile 66):ALT:
skip-innodb #innodb_data_home_dir = C:/Program Files/xampp/mysql/data/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/ #innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/ #set-variable = innodb_buffer_pool_size=16M #set-variable = innodb_additional_mem_pool_size=2M #set-variable = innodb_log_file_size=5M #set-variable = innodb_log_buffer_size=8M #innodb_flush_log_at_trx_commit=1 #set-variable = innodb_lock_wait_timeout=5
NEU:
#skip-innodb innodb_data_home_dir = C:/Program Files/xampp/mysql/data/ innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/ innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/ set-variable = innodb_buffer_pool_size=16M set-variable = innodb_additional_mem_pool_size=2M set-variable = innodb_log_file_size=170M set-variable = innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=1 set-variable = innodb_lock_wait_timeout=50
(Ich musste innodb_log_file_size auf die tatsächliche Größe meiner Protokolldatei setzen)
Anschließend habe ich die XAMPP-Batchdatei bearbeitet, die den MySQL-Dienst startet (
C:\Program Files\xampp\mysql_start.bat
). Ich habe–innodb_force_recovery=6
am Ende des Aufrufs von mysqld Folgendes hinzugefügt. Zeile 8 dieser Datei lautet nun:mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6
Das hat funktioniert! Meine Datenbanken wurden auf meinem Rechner wiederhergestellt. Ich habe SQLyogum einen SQL-Dump der Datenbank zu erstellen und sie auf unserem Produktionsserver wiederherzustellen.
Weitere Ressourcen
Antwort2
Ein Vote up und Danke anPimp Juice ITfür eine tolle Antwort. Ich habe mithilfe seiner Antwort ein ähnliches Problem gelöst, allerdings etwas anders, also dachte ich, ich teile es mit Ihnen.
Ich habe auf eine neuere Version von XAMPP aktualisiert. Ich verwende das Installationsprogramm nicht, sondern lade es einfach als neue Zip-Datei herunter und dabei treten Probleme auf.
- Zuerst habe ich MySQL gestoppt (ich führe es lokal mit XAMPP aus)
- Als nächstes öffnete ich diemeine.iniDatei befindet sich in/xampp/mysql/bin/Datei – bei mir begannen die Änderungen bei
#skip-innoodb
(Zeile 136). Ihre Zeilennummer kann abweichen.
Hier ist, was ich zunächst gefunden habe:
#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...
Das Problem scheinen hier die relativen Pfade zu sein. Beachten Sie das Fehlen
C:
der oben genannten Verzeichnisse. Die Pfade absolut zu machen, war mein erster Schritt.
#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
- In der neuen Version von XAMPP möchte ich Folgendes verwenden:
- In/xampp/mysql/Ich habe umbenanntDatenZuDaten_alt
- Dann immer noch im selben Verzeichnis/xampp/mysql/Ich habe dieDatenVerzeichnis von meinem alten XAMPP.
- Dann habe ich meinen MySQL-Server gestartet und alles war gut
Hoffe, das hilft jemandem!
Antwort3
Dies habe ich unter Windows 10 mit MySQL 5.7 gemacht
Beide Installationen wurden mit MySQL Installer durchgeführt, daher waren die Setups gleich und unterschieden sich ein wenig von den in den anderen Antworten beschriebenen.
Im Wesentlichen habe ich aus dem ursprünglichen Installationsordner nur die Ordner kopiert, die nach den Schemata benannt sind, die mich interessierten. Die grundlegenden Einstellungen, die Sie vornehmen müssen, finden Sie als Nächstes auf der Registerkarte „Sicherheit“ des Dialogfelds „Ordnereigenschaften“:
- Zuweisen des Eigentums am Hauptdatenordner und allen seinen Unterordnern (einschließlich der gerade kopierten) zum
SYSTEM
Konto (nicht zum Administrator, Verwalter oder welchem Benutzer auch immer der Kopiervorgang durchgeführt wurde); - Hinzufügen
NETWORK SERVICE
zu den Benutzern mit vollständiger Kontrolle über den Ordner.
Ich habe diese Anweisungen in den MySQL-Foren gefunden, hier sind die Originalnachrichten:
Originale, vollständige Anleitung von Ray Yates:
Für die Nachwelt:
Ich klickte mit der rechten Maustaste auf den Ordner C:\Data\ und wählte Eigenschaften -> Sicherheit - Erweitert aus. Dort sah ich den Principal mit dem Namen NETWORK SERVICE.
Ich habe in einem separaten Fenster mit der rechten Maustaste auf den kopierten Ordner E:\MYSQL\Data\ geklickt und festgestellt, dass es keine solche Einstellung gab.
I Klicken Sie auf die Schaltfläche [Hinzufügen], dann auf den Link Einen Auftraggeber auswählen und geben Sie den Objektnamen NETZWERKDIENST ein und klicken Sie auf [OK].
Ich habe NETZWERKDIENST ausgewählt, auf [Bearbeiten] geklickt und Vollzugriff [OK] aktiviert.
Anschließend habe ich alle ursprünglichen Schritte wiederholt und der Server wurde wie erwartet gestartet.