Wie man korrupte MySQL-Datenbanktabellen Schritt für Schritt reparieren

In der modernen Welt sind Unternehmen nicht nur von einer bestimmten Datenbank-Server-Plattform abhängig. Es gibt viele Datenbank-Plattformen, die ausreichend sind, um mäßige Workloads und Kundenanforderungen an High Availability und Datenverlustsicherung zu bewältigen. MySQL ist eine dieser Datenbankplattformen, die viele Features bietet und hohe Leistung bringt.

Genau wie andere RDBMS, ist MySQL auch anfällig für Datenbank- und Tabelle Korruption. Der jüngste Ausfall durch Microsoft und CrowdStrike hat auch MySQL-Datenbankserver beeinträchtigt. Durch Betriebssystemfehler kommt es zu Korruption von Datenbanktabellen oder ganzen Datenbanken.

In diesem Artikel gehe ich darauf ein, wie man eine MySQL-Datenbanktabelle korrumpieren und reparieren kann. Dieser Artikel ist für DBAs hilfreich, um Fehler zu simulieren und die beste mögliche Methode zu ermitteln, um eine korrupte MySQL-Tabelle zu restaurieren oder zu reparieren.

Verstehen von MySQL-Datenbankkorruption

MySQL-Datenbankkorruption kann in verschiedener Weise manifestieren, einschließlich:

Nicht zugängliche Tabellen

Die gesamte Tabelle oder ein bestimmter Unterbereich der Tabelle ist nicht zugänglich. Wenn du versuchst, auf die korrupte Tabelle zuzugreifen, werden Fehler auftreten, die auf die Korruption des Indexdateien oder Datendateien einer Tabelle hinweisen.

Fehler aufgrund von Daten inkonsistenz

Wenn die Tabelle korrupt ist, könnten Ihre Abfragen anstatt sinnvoller Daten einige unerwarteten Werten oder inkonsistente oder unvollständige Ergebnisse zurückgeben.

Unerwartete Herunterfahrten

In manchen Fällen kann MySQL während des Zugriffs auf die Tabelle oder beim Verwenden von mysqldump für den Datensicherungsvorgang abstürzen. Eine solche Panne beobachte ich einmal, während ich das Korruptscenario simulierte. Ich habe die Datendatei einer Tabelle korrupted. Nachdem ich den Dienst gestartet hatte, brach MySQL automatisch ab, als ich versuchte, die Tabelle mit einem SELECT-Statement zu betrachten.

Fehlermeldungen Während der Datenbankoperationen

Beim Zugriff auf die korruptede Tabelle könnten Sie bestimmte Fehler wie folgendes erwarten:

Plain Text

 

Diese Fehler zeigen an, dass die Datendatei oder die zugehörigen Indexdateien korrupt sind.

Es ist wichtig, die Ursache der Korruption zu verstehen, um zukünftige Vorkommnisse zu vermeiden und die Datenintegrität zu gewährleisten.

Voraussetzungen für die Wiederherstellung von MySQL-Tabellen

Bevor Sie versuchen, Reparaturen durchzuführen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen haben:

  • Complete backup of your MySQL database
  • Sufficient disk space
  • Administrative access to the MySQL server

Nun simulieren wir die Korruption der Tabelle.

Korrupte MySQL-Tabelle

Bevor wir uns die Prozedur der Datenbankreparatur anschauen, lernen wir zuerst, wie man eine Datenbank korrodiert. Für die Demonstration habe ich eine Datenbank mit dem Namen „CorruptDB“ auf einem MySQL-Datenbankserver erstellt. Ich habe auch eine Tabelle namens corrupt_table in der CorruptDB-Datenbank erstellt.

Hier ist der Code, um eine Datenbank und eine Tabelle zu erstellen.

MySQL

 

Ich habe eine Million Datensätze zur Tabelle hinzugefügt, indem ich den folgenden SQL-Befehl ausführte.

MySQL

 

Beachten Sie, dass die Simulation der Tabelle Korruption auf meinem Laptop durchgeführt wurde. Versuchen Sie dies nicht in der Produktion, Entwicklung oder auf anderen Umgebungen auszuführen. Die Tabelle, die ich in dieser Demonstration verwende, wurde mit dem MyISAM-Datenbank-Engine erstellt. Sie können über Alternative Speicher-Engines mehr über die Datenbank-Engines des MySQL-Servers erfahren.

Ich habe die folgenden Schritte durchgeführt, um die Tabelle zu korrompieren.

Schritt 1: Stoppen der MySQL-Serverdienste

Um den MySQL-Server zu stoppen, müssen Sie PowerShell als Administrator ausführen und den folgenden Befehl ausführen.

Plain Text

 

Alternativ können Sie auch von den Diensten stoppen.

Schritt 2: Korrompieren des Indexdateis von der Tabelle

Jetzt müssen wir die Indexdatei der Tabelle korrompieren. Wenn Sie jede Tabelle im MyISAM-Datenbank-Engine erzeugen, werden drei Dateien erstellt, wenn Sie eine Tabelle mit dem MyISAM-Datenbank-Engine erzeugen.

  • MYD-Dateien: Diese Datei enthält die tatsächlichen Daten.
  • MYI-Dateien: Dies ist eine Indexdatei.
  • Frm-Dateien: Die Datei enthält eine Tabellenstruktur.

Wir werden die Indexdatei korrodiert. Die Datendateien befinden sich am Standardort, der ist „C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb„. Für die Korrosion verwenden wir einen Hex-Editor.

Herunterladen und installieren Sie den Hex-Editor. Verwenden Sie ihn, um die MYI-Dateien zu öffnen. Die Datei sieht wie folgendes Bild aus:

Ersetzen Sie die ersten 5 Bytes mit einigen zufälligen Werten. Speichern Sie die Datei und schließen Sie den Editor.

Nun starten wir den Dienst und versuchen, auf die Tabelle zuzugreifen.

Schritt 3: Starten des MySQL-Dienstes und Zugriff auf die Tabelle

Zunächst starten Sie die MySQL-Dienste, indem Sie den folgenden Befehl in PowerShell ausführen.

Plain Text

 

Sobald der Dienst gestartet ist, führen Sie den folgenden Abfrage auf der MySQL-Befehlszeile aus.

MySQL

 

Die Abfrage lieferte folgenden Fehler:

Der Fehler zeigt an, dass der Index der corrupt_table korrupt ist und repariert werden muss.

Manuelle Methoden zur Reparatur von MySQL-Tabellen

Es gibt bestimmte Methoden, die Sie verwenden können, um eine korrupte MySQL-Tabelle zu reparieren. Die erste Methode besteht darin, die Befehle CHECK TABLE und REPAIR TABLE zu verwenden.

Check Table und Repair Table Befehle

Sie können die Tabelle mithilfe der integrierten MySQL-Befehle CHECK TABLE und REPAIR TABLE wiederherstellen. Diese Befehle werden verwendet, um Diagnosen und Reparaturen an jeder MyISAM-Tabelle durchzuführen.

Die `CHECK TABLE`-Anweisung prüft die Integrität einer Tabelle. Sie überprüft die Tabellenstruktur, Indizes und Daten auf mögliche Korruption und zeigt Details an. Die Syntax lautet wie unten gezeigt:

Plain Text

 

Sie können verschiedene Optionen angeben.

  1. QUICK: Diese Option ermittelt schnell Probleme wie korrupte Indizes.
  2. FAST: Sie prüft Tabellen, die nicht ordnungsgemäß geschlossen wurden.
  3. CHANGED: Diese Option prüft nur Tabellen, die seit der letzten Ausführung von CHECK TABLE geändert wurden.
  4. MEDIUM: Diese Option prüft die Datensätze und überprüft, dass die Verbindungen zwischen der Tabelle und den Daten korrekt sind.
  5. EXTENDED: Diese Option durchsucht gründlich und überprüft die Tabellenstruktur und Inhalte.

In dieser Demo werden wir einen schnellen Scan durchführen. Hier ist der Befehl.

Plain Text

 

Bildschirmfoto:

Wie Sie in dem oben gezeigten Bildschirmfoto sehen können, zeigt der Fehler an, dass der Index der Tabelle corrupt_table korrupt ist und behoben werden muss.

Wir werden den Befehl REPAIR TABLE verwenden, um die Korruption in der Tabelle zu beheben. Der Befehl REPAIR TABLE wird verwendet, um die Tabellenstruktur und Daten von Korruption zu erholen, insbesondere die Tabellen, die den MyISAM-Datenbankmotor verwenden. Wenn der Index einer Tabelle korrupt ist, baut der REPAIR TABLE-Befehl die Indizes neu auf.

Die Syntax von REPAIR TABLE lautet wie folgt:

Plain Text

 

Sie können die folgenden Optionen angeben:

  • QUICK: Es repariert nur die Indexdatei einer Tabelle. Es greift nicht in die Datendatei einer Tabelle ein.
  • ERWEITERT: Wenn wir diese Option verwenden, führt der Befehl eine gründliche Reparatur durch. Er repariert oder erstellt auch die Indexdatei, indem er durch alle Datensätze der Tabelle geht.

In dieser Demo haben wir die Indexdatei der Tabelle beschädigt; daher werden wir die Schnell-Option verwenden. Führen Sie den folgenden Befehl aus.

Plain Text

 

Bildschirmfoto:

Wie Sie in dem oben gezeigten Bildschirmfoto sehen können, wurde die corrupt_table erfolgreich repariert. Um dies zu überprüfen, führen Sie auf dem MySQL Workbench den folgenden SQL-Befehl aus:

MySQL

 

Abfrageergebnis:

Wie Sie sehen können, ist die Tabelle jetzt zugänglich.

Tabelle mit dem Befehl mysqldump wiederherstellen

Der zweite Methode ist es, die gesamte Tabelle aus dem Backup wiederherzustellen. Diese Methode kann verwendet werden, wenn die Tabelle stark beschädigt ist und nicht durch den Befehl REPAIR TABLE repariert werden kann.

Um eine MySQL-Tabelle aus dem Backup wiederherzustellen, kann der mysqldump-Befehl verwendet werden. Sie können den Artikel „mysqldump — Ein Datenbank-Backup-Programm“ lesen, um mehr über die Nutzung des mysqldump-Befehls zu erfahren. Der Syntax, um die Tabelle wiederherzustellen, ist unten aufgeführt.

MySQL

 

In der Syntax:

  • Benutzername: Geben Sie den Benutzernamen an, den Sie verwenden, um mit der MySQL-Datenbank verbunden zu sein.
  • -p: Geben Sie das Passwort an. Wenn Sie es leer lassen, fragt MySQL nach einem Passwort.
  • [database_name]: Geben Sie den Namen der Datenbank an, in der Sie die Tabelle wiederherstellen möchten.
  • Table_dump.sql: Geben Sie den vollständigen Namen des Backupdateien an.

Für die Demonstration habe ich ein Backup der CorruptDB-Datenbank angelegt, die sich im Verzeichnis C:\MySQLData\Backup befindet.

Um die corrupt_table wiederherzustellen, können wir den folgenden Befehl verwenden.

MySQL

 

Nach erfolgreichem Ausführen des Befehls können Sie auf die Tabelle zugreifen. Führen Sie die folgende Abfrage aus, um zu überprüfen.

MySQL

 

Abfrageergebnis:

Wie Sie in der oben gezeigten Bildschirmfoto sehen können, wurde die Tabelle erfolgreich wiederhergestellt.

Mit phpMyAdmin

Sie können auch das phpMyAdmin-Werkzeug verwenden, um eine beschädigte MySQL-Datenbank zu reparieren. phpMyAdmin ist ein grafisches Benutzerinterface, um MySQL und MariaDB zu verwalten und zu pflegen. Für die Demonstration habe ich es auf meinem Laptop installiert.

  • Um die Tabelle zu reparieren, starten Sie phpMyAdmin und navigieren Sie zu der Datenbank, in der sich die beschädigte Tabelle befindet.
  • Im rechten Panel können Sie die Liste der Tabellen sehen, die in der CorruptDB-Datenbank erstellt wurden.
  • Wählen Sie Corrupt_table aus der Liste und wählen Sie die Option Tabelle reparieren aus dem Dropdown-Feld aus.

Hier ist ein Screenshot für Ihre Information:

Sobald die Tabelle repariert ist, können Sie den Status der corrupt_table auf OK sehen. Hier ist ein Screenshot dafür:

Fazit

In diesem Artikel haben wir erkundet, welche möglichen Gründe eine MySQL-Datenbankkorruption aufweisen und wie man diese beheben kann. Ich habe einen Schritt-für-Schritt-Prozess erläutert, um MySQL-Tabellen mit einem Hex-Editor zu korrompieren. Ich habe auch beschrieben, wie man sie mit den Befehlen CHECK TABLE und REPAIR TABLE beheben kann. Wir haben auch erkundet, wie man die Tabelle mit dem Werkzeug mysqldump wiederherstellen kann. 

Die Reparatur einer korrupten MySQL-Datenbanktabelle kann eine Herausforderung sein, aber mit den richtigen Werkzeugen und Methoden ist sie bewältigbar. Manuelles Arbeiten stellt eine grundlegende Lösung bereit, während phpMyAdmin eine umfassende und zuverlässige Wiederherstellungsmethode anbietet. Stellt immer sichere Backups ein und pflegt die Gesundheit Ihrer Datenbank, um das Risiko einer Korrosion zu minimieren.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step