So reparieren Sie beschädigte MySQL-Datenbankdateien schnell mit den Tools myisamchk und mysqlcheck

So reparieren Sie beschädigte MySQL-Datenbankdateien schnell mit den Tools myisamchk und mysqlcheck

Da der Festplattenspeicher der Server-Datenbank voll war, schlug das Schreiben einer großen Datenmenge fehl, was zu dem Fehler „Doppelter Eintrag ‚für Schlüssel ‚Benutzername‘“ führte.

Wenn ein solcher MySQL-Datenbankfehler auftritt, liegt wahrscheinlich ein Problem mit dem MySQL-Datenbankindex vor. Also, was ist ein MySQL-Datenbankindex?

Analyse: Wenn der Index primär oder eindeutig ist, muss das den Daten in der Datentabelle entsprechende Feld die Eindeutigkeit jedes Datensatzes sicherstellen. Andernfalls tritt dieser Fehler auf.

Dies tritt normalerweise beim Schreiben in die Datenbank auf. Beispielsweise erfordert das Discuz! 4.1-Forumprogramm, dass die Benutzernamen aller Mitglieder eindeutig sein müssen, d. h. der Benutzernamenindex ist eindeutig. Wenn Sie zu diesem Zeitpunkt zwangsweise einen vorhandenen Benutzernamendatensatz in die Tabelle cdb_members einfügen oder den Benutzernamen eines Datensatzes in einen vorhandenen Benutzernamen aktualisieren, wird dieser Fehler angezeigt.

Beispielsweise hatte ein Internetnutzer ein Problem mit der Website dedecms. Als er sie besuchte, wurde ihm im Vollbildmodus eine Fehlermeldung angezeigt. Er überprüfte das MySQL-Protokoll und fand die folgende Fehlermeldung:

Tabelle .dedecmsv4dede_archives ist als abgestürzt markiert und sollte repariert werden

Es weist darauf hin, dass die CMS-Artikeltabelle dede_archives als problematisch markiert ist und repariert werden muss.

Also habe ich schnell die historischen Daten wiederhergestellt und im Internet nach der Ursache gesucht. Endlich wurde das Problem gelöst.

Die Lösung lautet wie folgt:

Suchen Sie das Tool bin/myisamchk im MySQL-Installationsverzeichnis und geben Sie es in die Befehlszeile ein:

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

Anschließend hilft Ihnen das Tool myisamchk, den Index der Datentabelle wiederherzustellen. Starten Sie MySQL neu und das Problem ist gelöst.

Um die MySQL-Datenbank dann zu reparieren, können Sie im Allgemeinen das Tool myisamchk oder das Tool mysqlcheck auf diese beiden Arten verwenden:

1. myisamchk-Tool

Um myisamchk zu verwenden, müssen Sie den MySQL-Server vorübergehend stoppen . Beispielsweise möchten wir die Discuz-Datenbank überarbeiten. Gehen Sie folgendermaßen vor:

# service mysql stop (MySQL stoppen);

# myisamchk -r /absoluter Pfad der Datenbankdatei/*MYI

# Dienst MySQL starten

myisamchk prüft und repariert automatisch Indexfehler in Datentabellen.

2. MySQLCheck-Tool

Die Verwendung von mysqlcheck erfordert kein Stoppen von MySQL und ermöglicht Hotfixes . Die Schritte sind wie folgt:

# mysqlcheck -r discuz.*

# service mysql stop (MySQL stoppen);

# myisamchk -r /absoluter Pfad der Datenbankdatei/*MYI

# Dienst MySQL starten

myisamchk prüft und repariert automatisch Indexfehler in Datentabellen.

Hinweis: Verwenden Sie für myisamchk und mysqlcheck nicht -f, um eine Reparatur zu erzwingen. Der Parameter -f löscht einige fehlerhafte Daten, um das Problem zu beheben, wenn allgemeine Reparaturen fehlschlagen. Verwenden Sie -f daher nur, wenn es unbedingt nötig ist.

Nachfolgend finden Sie Ergänzungen von anderen Internetnutzern

Überprüfen und reparieren Sie alle Datenbanken:

# mysqlcheck -A -o -r -p
Passwort eingeben:
db1 OK
db2 OK
db3 OK
db4 OK
......
......
......

Reparieren Sie die angegebene Datenbank

# mysqlcheck -o -r DatenbankNAME -p

Du kannst

Befehlsdetails:

Der mysqlcheck-Client kann MyISAM-Tabellen überprüfen und reparieren. Es kann auch Tabellen optimieren und analysieren.
mysqlcheck funktioniert ähnlich wie myisamchk, arbeitet aber anders. Der Hauptunterschied besteht darin, dass mysqlcheck verwendet werden muss, wenn der mysqld-Server ausgeführt wird, während myisamchk verwendet werden sollte, wenn der Server nicht ausgeführt wird. Der Vorteil der Verwendung von mysqlcheck besteht darin, dass Sie den Server nicht anhalten müssen, um Tabellen zu überprüfen oder zu reparieren.
MySQLcheck bietet Benutzern eine bequeme Möglichkeit, die SQL-Anweisungen CHECK TABLE, REPAIR TABLE, ANALYZE TABLE und OPTIMIZE TABLE zu verwenden. Es bestimmt, welche Anweisung in der auszuführenden Operation verwendet werden soll, und sendet die Anweisung dann zur Ausführung an den Server.
Es gibt drei Möglichkeiten, mysqlcheck aufzurufen:

Shell> mysqlcheck [Optionen] db_name [Tabellen]
Shell> mysqlcheck [Optionen] ---Datenbank DB1 [DB2 DB3...]
Shell> mysqlcheck [Optionen] --all --database

Wenn keine Tabelle angegeben ist oder die Option --database oder --all-database verwendet wird, wird die gesamte Datenbank überprüft.
Im Vergleich zu anderen Clients verfügt mysqlcheck über eine Besonderheit. Durch das Umbenennen der Binärdatei kann das Standardverhalten der Checkliste (--check) geändert werden. Wenn Sie ein Tool möchten, das Tabellen standardmäßig reparieren kann, kopieren Sie mysqlcheck einfach zurück nach mysqlrepair oder verwenden Sie einen symbolischen Link mysqlrepair, um mysqlcheck zu verknüpfen. Durch den Aufruf von mysqlrepair können Sie die Tabelle entsprechend dem Befehl reparieren.

Die folgenden Namen können verwendet werden, um das Standardverhalten von mysqlcheck zu ändern:

MySQL-Reparatur

Die Standardoption ist --repair

mysqlanalyze
Die Standardoption ist --analyze

mysqloptimize
Die Standardoption ist --optimize

mysqlcheck unterstützt die folgenden Optionen:
---helfen, -?
Zeigt eine Hilfemeldung an und beendet das Programm.
--alle--Datenbank, -A
Überprüfen Sie alle Tabellen in allen Datenbanken. Entspricht der Verwendung der Option --database, mit der Ausnahme, dass alle Datenbanken in der Befehlszeile benannt werden.
--alles-in-1, -1
Anstatt für jede Tabelle eine Anweisung auszugeben, wird für jede Datenbank eine Anweisung ausgeführt, die alle zu verarbeitenden Tabellen der Datenbank benennt.
--analyze, -a
Analysetabelle.
--auto-reparatur
Wenn eine überprüfte Tabelle beschädigt ist, wird sie automatisch repariert. Nach der Überprüfung aller Tabellen werden ggf. notwendige Reparaturen automatisch durchgeführt.
--character-sets-dir=Pfad
Das Verzeichnis, in dem die Zeichensätze installiert sind. Siehe Abschnitt 5.10.1, „Zeichensätze für Daten und Sortierung“.
--check, -c
Überprüfen Sie die Tabelle auf Fehler.
--check-only-changed, -C
Es werden nur Tabellen geprüft, die seit der letzten Prüfung geändert wurden oder die nicht ordnungsgemäß geschlossen wurden.
--Kompresse
Komprimiert alle zwischen Client und Server gesendeten Informationen (sofern beide Komprimierung unterstützen).
---Datenbank, -B
Verarbeitet alle in der Datenbank genannten Tabellen. Mit dieser Option werden alle Zeichenfolgenargumente als Datenbanknamen und nicht als Tabellennamen behandelt.
---debug[=Debugoptionen], -#[Debugoptionen]
Debug-Protokoll schreiben. Die Zeichenfolge „Debugoptions“ lautet normalerweise „d:t:o,file_name“.
--default-character-set=Zeichensatz
Verwenden Sie charset als Standardzeichensatz. Siehe Abschnitt 5.10.1, „Zeichensätze für Daten und Sortierung“.
--extended, -e
Wenn Sie diese Option zum Überprüfen von Tabellen verwenden, können Sie sicherstellen, dass diese hundertprozentig konsistent sind. Dies kann jedoch lange dauern.
Wenn Sie diese Option zum Reparieren einer Tabelle verwenden, dauert die Ausführung einer erweiterten Reparatur nicht nur sehr lange, sondern generiert auch eine große Anzahl wertloser Zeilen.
--fast, -F
Es werden nur Tabellen geprüft, die nicht ordnungsgemäß geschlossen wurden.
--force, -f
Fahren Sie fort, auch wenn SQL-Fehler auftreten.
--host=Hostname, -h Hostname
Stellen Sie eine Verbindung zum MySQL-Server auf dem angegebenen Host her.
--medium-check, -m
Führt eine schnellere Prüfung durch als --extended. Es werden nur 99,99 % der Fehler gefunden, was in den meisten Fällen gut genug ist.
--optimieren, -o
Optimieren Sie die Tabelle.
--password[=Passwort], -p[Passwort]
Das für die Verbindung mit dem Server zu verwendende Kennwort. Wenn die kurze Optionsform (-p) verwendet wird, darf zwischen der Option und dem Passwort kein Leerzeichen stehen. Wenn auf die Option --password oder -p in der Befehlszeile kein Kennwortwert folgt, werden Sie zur Eingabe eines Kennworts aufgefordert.
--port=Portnummer, -P Portnummer
Die für die Verbindung zu verwendende TCP/IP-Portnummer.
--protocol={TCP | SOCKET | PIPE | SPEICHER}
Das zu verwendende Verbindungsprotokoll.
--schnell, -q
Wenn Sie diese Option für eine Prüftabelle verwenden, wird verhindert, dass die Prüfung Zeilen nach falschen Verknüpfungen durchsucht. So lässt sich dies am schnellsten überprüfen.
Wenn Sie eine Tabelle mit dieser Option reparieren, wird versucht, nur den Indexbaum zu reparieren. Dies ist die schnellste Lösung.
--repair, -r
Führen Sie eine Korrektur durch, die die meisten Probleme behebt, außer wenn die eindeutigen Werte nicht eindeutig sind.
--silent, -s
Lautloser Modus. Es werden nur Fehlermeldungen ausgedruckt.
--socket=Pfad, -S Pfad
Die für die Verbindung zu verwendende Socket-Datei.
--tables
Überschreibt die Option --database oder -B. Alle der Option folgenden Argumente werden als Tabellennamen behandelt.
--user=Benutzername, -u Benutzername
Der für die Verbindung mit dem Server zu verwendende MySQL-Benutzername.
--verbose, -v
Ausführlicher Modus. Druckt Informationen zu jeder Phase des Programmbetriebs.
--version, -V
Versionsinformationen anzeigen und beenden.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
  • 5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden
  • Detaillierte Erklärung des MySQL-Überwachungstools mysql-monitor
  • Eine detaillierte Einführung in den Aufbau und die Verwendung des Tools Anemometer zeigt MySQL Slow Logs grafisch an
  • So verwenden Sie MySQL-Stresstest-Tools
  • Das Pycharm-Tool konnte keine Verbindung zur MySQL-Datenbank herstellen
  • Analyse von Mysql-Datenmigrationsmethoden und -Tools
  • Eine schnelle Lösung zum versehentlichen Löschen von MySQL-Daten (MySQL Flashback Tool)
  • Das KTL-Tool realisiert die Methode zum Synchronisieren von Daten von MySQL zu MySQL
  • So stellen Sie eine Verbindung zum MySQL-Visualisierungstool Navicat her
  • Empfehlen Sie mehrere MySQL-bezogene Tools

<<:  Detailliertes Tutorial zur Installation des Jenkins-Containers in einer Docker-Umgebung

>>:  Natives JS zum Erreichen von Spezialeffekt-Meldungsfeldern

Artikel empfehlen

Gruselige Halloween-Linux-Befehle

Auch wenn nicht Halloween ist, lohnt es sich, sic...

Schnelles Verständnis und Beispielanwendung der Vuex-Zustandsmaschine

Inhaltsverzeichnis 1. Schnelles Verständnis von K...

Probleme und Lösungen bei der Installation von Mininet auf Ubuntu 16.04.4LTS

Mininet Mininet ist eine leichtgewichtige, softwa...

Führt das Laden von CSS zu einer Blockierung?

Vielleicht weiß jeder, dass die JS-Ausführung die...

Der Prozess der Bereitstellung eines Projekts auf einem anderen Host mit Jenkins

Umfeld Hostname IP-Adresse Aufschlag Jenkins 192....

Schritte zum Erstellen des Projekts vite+vue3+element-plus

Verwenden Sie vite, um ein vue3-Projekt zu erstel...

VMware Workstation ist nicht mit Device/Credential Guard kompatibel

Beim Installieren einer virtuellen Maschine wird ...

HTML-Tabelle_Powernode Java Academy

Um eine Tabelle in HTML zu zeichnen, verwenden Si...

Linux implementiert den Quellcode des Zahlenratespiels

Ein einfacher Linux-Ratespiel-Quellcode Spielrege...

MySQL-Transaktionskontrollfluss und ACID-Eigenschaften

Inhaltsverzeichnis 1. ACID-Eigenschaften Syntax d...

JavaScript verwendet Canvas zum Zeichnen von Koordinaten und Linien

In diesem Artikel wird der spezifische Code zur V...