WICHTIG! Die manuelle Reparatur einer beschädigten Tabelle kann funktionieren, birgt aber das Risiko eines Datenverlusts. Wenn Sie keinen Datenverlust riskieren wollen, versuchen Sie, die Datenbank aus einer aktuellen Datenbanksicherung wiederherzustellen. Wenn es sich jedoch nicht um die aktuellste Sicherung handelt, können Sie noch mehr Daten verlieren. Sie können das Risiko eines Datenverlusts vermeiden, wenn Sie beschädigte InnoDB-Tabellen (oder MyISAM-Tabellen) mit der Software Stellar Repair for MySQL reparieren. Sie hilft Ihnen, Daten aus beschädigten oder korrupten Tabellen im Originalformat mit nur wenigen Klicks wiederherzustellen.
InnoDB ist die MySQL-Speicher-Engine, die standardmäßig in MySQL 5.5 und späteren Versionen verwendet wird. Sie ist auch als absturzsichere Speicher-Engine bekannt (im Gegensatz zu MyISAM), da sie in der Lage ist, Daten nach einem Absturz wiederherzustellen. Unter bestimmten Umständen kann es jedoch vorkommen, dass die InnoDB-Tabelle beschädigt wird. In diesem Fall werden die in der Tabelle enthaltenen Daten unlesbar. Außerdem kann eine beschädigte Tabelle eine Beschädigung der InnoDB-Datei verursachen.
Was verursacht eine Beschädigung der InnoDB-Tabelle in MySQL?
Einige Gründe, die zu einer beschädigten Tabelle führen können, sind die folgenden:
- MySQL-Dienst stürzt nach Neustart ab
- Der MySQL-Server wird automatisch neu gestartet
- Stromausfall oder schlechter Speicher stoppt MySQL Server beim Schreiben in die Datenbanktabelle
- Es gibt einen Fehler im Betriebssystem oder im MySQL-Code
- Hardware-Ausfall
- Der Rechner, auf dem MySQL läuft, wird unerwartet heruntergefahren
Das Problem der Beschädigung der InnoDB-Tabelle kann unter Windows häufiger auftreten, wenn die Datenbank in einer virtualisierten Umgebung läuft. Lassen Sie uns nun besprechen, wie man die InnoDB-Tabelle in MySQL diagnostiziert und repariert.
Bevor Sie fortfahren
Versuchen Sie, genau herauszufinden, womit Sie es zu tun haben. Auf diese Weise können Sie das InnoDB-Problem effizienter beheben, ohne Zeit mit der Suche nach alternativen Methoden zu verschwenden.
Um InnoDB-Probleme zu diagnostizieren, gehen Sie wie folgt vor:
1. Analysieren Sie das MySQL-Serverprotokoll
Wenn Sie eine Beschädigung von InnoDB-Tabellen vermuten oder feststellen, sollten Sie das MySQL-Fehlerprotokoll untersuchen, um relevante Informationen über bestimmte InnoDB-Fehler zu finden. Das Fehlerprotokoll hilft Ihnen beim Verständnis:
- Wenn die Tabelle aufgrund einer beschädigten Datenbankseite beschädigt wird. Eine beschädigte Seite in der MySQL-Datenbank kann zur Beschädigung einer Tabelle führen.
- Wenn der Fehler aufgrund eines Deadlocks auftritt, führen Sie ihn mit aktivierter innodb_print_all_deadlocks-Anweisung aus. Details über alle InnoDB-Sperren werden in das MySQL Server-Fehlerprotokoll gedruckt.
- Wenn Sie Probleme mit dem InnoDB-Datenwörterbuch haben, müssen Sie die Fehler “InnoDB-Dateien können nicht geöffnet werden”, “CREATE TABLE-Anweisung fehlgeschlagen” und “System kann den angegebenen Pfad nicht finden” beheben. Die Behebung dieser Fehler ermöglicht den Zugriff auf das InnoDB-Datenwörterbuch.
2. Tabelle auf Fehler prüfen
Die Überprüfung des MySQL-Fehlerprotokolls kann Ihnen zwar dabei helfen, eine Beschädigung zu erkennen, aber Sie haben möglicherweise Probleme zu identifizieren, welche Tabelle davon betroffen ist. Sie können die InnoDB-Tabelle mit zwei Methoden auf Fehler überprüfen. Welche Methode hier verwendet werden kann, hängt jedoch davon ab, ob der MySQL-Server läuft oder offline/abgestürzt ist.
- Wenn der Server läuft, verwenden Sie den Befehl CHECK TABLE, um Fehler in der InnoDB-Tabelle zu finden.
mysql> CHECK TABLE table_name;
- Wenn der Server offline ist oder abgestürzt ist, verwenden Sie Innochecksum um zu prüfen, ob eine InnoDB-Tabelle beschädigt ist.
shell> innochecksum [Optionen] datei_name
Wie repariert man eine beschädigte InnoDB-Tabelle in MySQL?
InnoDB verfügt über einen Mechanismus zur Wiederherstellung nach einem Absturz, der bei der automatischen Reparatur und Wiederherstellung von DB-Tabellen nach Abstürzen hilft. Sie können auch die Methode “Dump and Reload” verwenden, um eine oder mehrere beschädigte Tabellen wiederherzustellen. Im Falle einer schweren Beschädigung kann es jedoch schwierig sein, den MySQL-Server neu zu starten. Daher müssen Sie die InnoDB-Datei in MySQL, die die beschädigte Tabelle enthält, manuell reparieren.
Hinweis: Bevor Sie versuchen, eine durch eine beschädigte Tabelle verursachte InnoDB-Dateibeschädigung zu reparieren, führen Sie eine Wiederherstellung anhand einer aktuellen Sicherungskopie durch. Wenn die Sicherungskopie beschädigt ist oder es sich nicht um die aktuellste Kopie handelt, führen Sie die unten beschriebenen Schritte aus.
Befolgen Sie die Schritt-für-Schritt-Anleitung, um eine beschädigte InnoDB-Tabelle zu reparieren
Hinweis: Stellen Sie sicher, dass Sie die InnoDB-Datei sichern, bevor Sie den Reparaturvorgang durchführen, um weitere Schäden an den Tabellendaten zu vermeiden.
Schritt 1: Versuchen Sie, den MySQL-Dienst neu zu starten und überprüfen Sie, ob Sie auf den Server zugreifen können. Führen Sie dazu die folgenden Schritte aus:
- Drücken Sie die Tasten “Windows” und “R” gleichzeitig.
- Geben Sie in dem daraufhin angezeigten Dialogfeld services.msc ein, und drücken Sie die Eingabetaste.
- Suchen Sie im Dialogfeld Dienste nach dem MySQL-Dienst, klicken Sie mit der rechten Maustaste darauf, und klicken Sie auf Dienst anhalten, starten oder neu starten.
Wenn Sie nicht auf den Server zugreifen können, kann es helfen, die Wiederherstellung von InnoDB zu erzwingen. Aktivieren Sie dazu die Option “innodb_force_recovery” in der MySQL-Konfigurationsdatei my.cnf, indem Sie Folgendes tun:
- Öffnen Sie die Konfigurationsdatei, und fügen Sie im Abschnitt [mysqld] die folgende Zeile ein:
[mysqld]
innodb_force_recovery=1
- Speichern und schließen Sie nun die Datei my.cnf.
- Versuchen Sie, den MySQL-Dienst erneut zu starten.
- Wenn Sie in der Lage sind, auf die beschädigte Tabelle zuzugreifen, dumpen Sie die Tabellendaten mit dem Befehl mysqldump:
mysqldump -u user -p datenbank_name tabellenname > single_dbtable_dump.sql
Sie können mit dem obigen Befehl mehrere durch Leerzeichen getrennte Tabellen ausgeben.
- Löschen Sie dann die Tabelle aus der Datenbank:
mysql -u user -p -execute=”DROP TABLE datenbank_name.tabelle_name”
- Versuchen Sie nun, die Tabelle mit der neu erstellten Dump-Datei wiederherzustellen:
mysql -u user -p < single_dbtable_dump.sql
Schritt 2: Stoppen Sie den MySQL-Dienst und deaktivieren Sie dann den InnoDB-Wiederherstellungsmodus. Geben Sie dazu die folgende Zeile in den Abschnitt [mysqld] ein:
#innodb_force_recovery=…
Schritt 3: Speichern Sie die Änderungen in der Datei my.cnf und starten Sie den MySQL-Dienst mit dem folgenden Befehl neu:
dienst mysqld start
Stellen Sie die Datenbanktabelle aus dem soeben erstellten Dump (d.h. der Sicherungsdatei) wieder her.
Was ist zu tun, wenn die manuellen Tipps zur InnoDB-Fehlerbehebung keine Daten wiederherstellen können?
Wenn Sie bei der manuellen Reparatur von InnoDB-Tabellen der MySQL-Datenbank auf Schwierigkeiten stoßen oder eine der Datenbankkomponenten fehlt, können Sie die MySQL repair software ausprobieren, um beschädigte InnoDB-Tabellen zu reparieren und wiederherzustellen.
Hauptmerkmale von Stellar Repair For MySQL
- Stellt alle Datenbankobjekte wieder her, einschließlich Tabellen, Schlüssel, Datentypen, Tabelleneigenschaften, Auslöser, Ansichten usw.
- Repariert sowohl InnoDB- als auch MyISAM-Tabellen.
- Kann alle Arten von MySQL-Korruptionsfehlern behandeln, wie z.B. Korruption des InnoDB-Tablespace, fehlende Datenbankdatei, Korruption der MySQL-Indexdatei, etc.
- Repariert MySQL-Datenbanken, die auf Windows (10, 8.1, 8, 7, Vista und XP) und Linux-basierten Systemen erstellt wurden.
- Unterstützt die Stapelverarbeitung von beschädigten MySQL-Datenbankdateien gleichzeitig in einem einzigen Versuch.
Einpacken
Die manuelle Reparatur einer beschädigten InnoDB-Tabelle kann zu Datenverlust führen. Wenn Sie also nicht riskieren wollen, Daten zu verlieren, verwenden Sie die Software Stellar Repair for MySQL, um die Beschädigung der InnoDB-Tabelle in MySQL zu reparieren. Die Software hilft bei der Reparatur beschädigter Datenbanktabellen und stellt Tabelleneigenschaften, Beziehungseinschränkungen und Schlüssel wieder her.
Nachdem Sie die InnoDB-Dateibeschädigung behoben haben, befolgen Sie diese bewährten Methoden, um eine InnoDB-Beschädigung zu verhindern.
- Es empfiehlt sich, mit DML-Aufgaben verbundene Sätze in Transaktionen zu gruppieren. Dies kann durch Einklammerung der DML-Operationen mit START TRANSACTION- und COMMIT-Anweisungen erreicht werden.
- Wenn Sie die am häufigsten abgefragten Spalten verwenden, geben Sie den Primärschlüssel für jede Tabelle an. Sie können auch einen Auto-Inkrement-Wert verwenden, falls kein Primärschlüssel vorhanden ist.
- Aktivieren Sie die Option innodb_file_per_table, um Indizes und Daten für einzelne Tabellen in verschiedene Dateien zu speichern.
- Wenn ein Problem mit der in der ENGINE=-Klausel von CREATE TABLE angegebenen Engine auftritt, führen Sie den Server mit der Option -sql_mode=NO_ENGINE_SUBSTITUTION aus, um zu verhindern, dass Tabellen mit einer anderen Speicher-Engine erstellt werden.
- Es ist ratsam, die LOCK TABLES-Anweisung nicht zu verwenden und die SELECT … FOR UPDATE-Syntax für die Entsperrung der Zeilen zu verwenden, die aktualisiert werden müssen, um exklusiven Schreibzugriff auf eine Reihe von Zeilen zu erhalten. InnoDB besitzt die Fähigkeit, mehrere Schreibsitzungen auf dieselbe Tabelle gleichzeitig zu verarbeiten.
- Führen Sie MySQL von der Eingabeaufforderung aus, wenn Sie Innodb-Probleme beheben wollen, und nicht über den Windows-Dienst oder mysqld_safe
- Stellen Sie sicher, dass die InnoDB-Monitore aktiviert sind, um Informationen über das bestehende Problem zu erhalten. Wenn das anhaltende Problem mit der Leistung zusammenhängt und der Server einfriert, stellen Sie sicher, dass der Standardmonitor zum Drucken von Informationen zum internen Zustand von InnoDB aktiviert ist. Aktivieren Sie andernfalls die Lock-Monitore, wenn das Problem mit Sperren zu tun zu haben scheint.
Was this article helpful?