wake-up-neo.com

Wie behebt man einen MySQL-Fehler "Inkorrekte Schlüsseldatei", wenn die Tabelle nicht repariert werden kann?

Ich versuche, eine ziemlich große Abfrage auszuführen, die nachts ausgeführt werden soll, um eine Tabelle zu füllen. Ich erhalte die Fehlermeldung Incorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it aber die von mir verwendete Speicher-Engine (was auch immer die Standard-Engine ist, schätze ich?) unterstützt das Reparieren von Tabellen nicht.

wie behebe ich das, damit ich die Abfrage ausführen kann?

36
Wayne Molina

Die Speicher-Engine (MyISAM) unterstützt die Reparaturtabelle. Sie sollten es reparieren können.

Wenn die Reparatur fehlschlägt, ist dies ein Zeichen dafür, dass die Tabelle stark beschädigt ist. Sie müssen sie nur aus Sicherungen wiederherstellen.

Wenn Sie andere Systeme (z. B. Nichtproduktionssysteme mit denselben Softwareversionen und demselben Schema) mit einer identischen Tabelle haben, können Sie dies möglicherweise mit etwas Hackergefahr beheben (Kopieren der Frm- und MYI-Dateien, gefolgt von einer Reparatur).

Im Wesentlichen besteht der Trick darin, zu vermeiden, dass Tische kaputt gehen. Dies bedeutet, dass Sie Ihre Datenbank immer sauber herunterfahren, niemals abstürzen und niemals Hardware- oder Stromprobleme haben müssen. In der Praxis ist dies nicht sehr wahrscheinlich. Wenn es also auf die Haltbarkeit ankommt, sollten Sie eine absturzsichere Speichermaschine in Betracht ziehen.

2
MarkR

Sie müssen den Speicherort des temporären Ordners von MySQL, der in den meisten Fällen '/ tmp' ist, in einen Speicherort mit einem größeren Speicherplatz ändern. Ändern Sie es in der Konfigurationsdatei von MySQL.

Grundsätzlich ist auf Ihrem Server nicht genügend Speicherplatz vorhanden, wo sich/tmp befindet.

48
marknt15

Sie müssen diesen Befehl über die MySQL-Eingabeaufforderung ausführen:

REPAIR TABLE tbl_name USE_FRM;

From MySQLs Dokumentation zum Repair-Befehl :

Die USE_FRM-Option kann verwendet werden, wenn die . MYI-Indexdatei fehlt oder deren Header beschädigt ist . Diese Option weist MySQL an, den Informationen im Header der .MYI-Datei nicht zu vertrauen und sie unter Verwendung der Informationen aus der .frm-Datei neu zu erstellen. Diese Art der Reparatur kann nicht mit myisamchk durchgeführt werden.

32
Drew

Ihre Abfrage generiert eine Ergebnismenge, die so groß ist, dass eine temporäre Tabelle erstellt werden muss, die entweder einige der Ergebnisse oder ein Zwischenprodukt für die Generierung des Ergebnisses enthält.

Die temporäre Tabelle wird in/var/tmp generiert. Diese temporäre Tabelle scheint beschädigt zu sein. Vielleicht hatte das Gerät, auf dem der temporäre Tisch aufgebaut wurde, nicht mehr genügend Platz. In der Regel führt dies jedoch normalerweise zu einem Fehler "Nicht genügend Speicherplatz". Möglicherweise hat etwas anderes, das auf Ihrem Computer ausgeführt wird, die temporäre Tabelle überlastet.

Überarbeiten Sie Ihre Abfrage, um weniger Speicherplatz zu belegen, oder konfigurieren Sie Ihre Datenbank neu, damit eine größere oder sicherere Partition für temporäre Tabellen verwendet wird.

MySQL Manual - B.5.4.4. Wo MySQL temporäre Dateien speichert

8
Martin

Einfaches "REPAIR the table" von PHPMYADMIN löste dieses Problem für mich.

  1. gehe zu phpmyadmin
  2. offene problematische Tabelle
  3. gehe zur Registerkarte "Operationen" (in meiner Version von PMA)
  4. unten finden Sie den Link "Tabelle reparieren"
1

REPAIR TABLE Tabellenname USE_FRM;

Der Befehl wird nur ausgeführt, wenn der MySQL-Typ "Storage Engine" "MyISAM" sein soll.

Hoffe das hilft

1
BhavyaSoft

In meinem Fall gab es ein Problem mit dem Speicherplatz. Ich habe einige unerwünschte Kriegsdateien von meinem Server gelöscht und es hat danach funktioniert.

1
Ninad Pingale

dieses Problem ist auf die geringe Verfügbarkeit von Speicherplatz auf einem bestimmten Laufwerk (c:\oder d:\usw.) zurückzuführen. Geben Sie Speicher frei, dann funktioniert es.

Vielen Dank, Saikumar.P

1
sai kumar

Ordnungsgemäßen Zeichensatz und Sortierung auf Datenbank, Tabelle und Spalten/Felder anwenden.

Ich erstelle eine Datenbank- und Tabellenstruktur mit SQL-Abfragen von einem Server auf einen anderen. Es erstellt eine Datenbankstruktur wie folgt:

  1. datenbank mit Zeichensatz von "utf8", Kollation von "utf8_general_ci"
  2. tabellen mit dem Zeichensatz "utf8" und der Sortierung "utf8_bin".
  3. tabellenspalten/-felder haben den Zeichensatz "utf8" und die Sortierung "utf8_bin".

Ich ändere die Sortierung von Tabelle und Spalte in utf8_general_ci und es behebt den Fehler.