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:
ERROR 1016: Can't open file: 'table_name.MYI' (errno: 145)
Table ‘table_name’ is marked as crashed and should be repaired
Got error 28 from storage engine
ERROR 1030: Got error 127 from storage engine
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.
Create database corruptDB;
Use corruptdb;
CREATE TABLE corrupt_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
Ich habe eine Million Datensätze zur Tabelle hinzugefügt, indem ich den folgenden SQL-Befehl ausführte.
INSERT INTO corrupt_table (data)
SELECT CONCAT('RandomData-', FLOOR(1000 + (RAND() * 9000)))
FROM corrupt_table;
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.
net stop MySQL
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.
net start MySQL
Sobald der Dienst gestartet ist, führen Sie den folgenden Abfrage auf der MySQL-Befehlszeile aus.
mysql> use corruptdb;
Database changed
mysql> select count(1) from corrupt_table;
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:
CHECK TABLE [option]
Sie können verschiedene Optionen angeben.
QUICK
: Diese Option ermittelt schnell Probleme wie korrupte Indizes.FAST
: Sie prüft Tabellen, die nicht ordnungsgemäß geschlossen wurden.CHANGED
: Diese Option prüft nur Tabellen, die seit der letzten Ausführung vonCHECK TABLE
geändert wurden.MEDIUM
: Diese Option prüft die Datensätze und überprüft, dass die Verbindungen zwischen der Tabelle und den Daten korrekt sind.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.
CHECK TABLE corrupt_table
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:
REPAIR TABLE [option]
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.
REPAIR TABLE corrupt_table
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:
use corruptdb;
select count(1) from corrupt_table;
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 -u [username] -p [database_name] < [table_dump.sql]
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 -u root -p corruptdb < C:\MySQLData\Backup\corrupt_table.sql
Nach erfolgreichem Ausführen des Befehls können Sie auf die Tabelle zugreifen. Führen Sie die folgende Abfrage aus, um zu überprüfen.
use corruptdb;
select count(1) from corrupt_table;
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