Die MySQL-Tabelle ist als abgestürzt markiert und die letzte (automatische?) Reparatur fehlgeschlagen


126

Ich habe diese Tabelle repariert. Der Server ist plötzlich hängen geblieben. Als ich zurückkam, waren alle Tabellen in Ordnung, aber diese zeigt "in Verwendung" an und wenn ich versuche, sie zu reparieren, wird sie nicht fortgesetzt.

FEHLER 144 - Die Tabelle './extas_d47727/xzclf_ads' ist als abgestürzt markiert und die letzte (automatische?) Reparatur fehlgeschlagen

Was kann ich tun, um es zu reparieren?


1
Ich habe gesehen, dass dies meistens passiert, wenn das zugrunde liegende Dateisystem keine freien Inodes mehr hat. Fragen Sie bei df -hi nach. Normalerweise füllt es etwas mit vielen kleinen Dateien, wie z. B. PHP-Sitzungsdateien, die nicht bereinigt werden.
Zrin

Antworten:


260

Wenn Ihr MySQL-Prozess ausgeführt wird, stoppen Sie ihn. Auf Debian:

sudo service mysql stop

Gehen Sie zu Ihrem Datenordner. Auf Debian:

cd /var/lib/mysql/$DATABASE_NAME

Versuchen Sie zu laufen:

myisamchk -r $TABLE_NAME

Wenn das nicht funktioniert, können Sie versuchen:

myisamchk -r -v -f $TABLE_NAME

Sie können Ihren MySQL-Server erneut starten. Auf Debian:

sudo service mysql start

3
Ich habe den obigen Befehl ausprobiert. Ich erhalte diesen Fehler. Es kann kein neues Tempfile erstellt werden: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Ist die Festplatte wirklich voll? Können Sie versuchen, "df -h" auszuführen? Höchstwahrscheinlich ist dies der Fall, und Sie sollten Speicherplatz freigeben ... Während der Tabellenreparatur wird Speicherplatz zum Schreiben in eine temporäre Tabelle verwendet. Wie Sie aus der Fehlermeldung sehen können, schreibt es in Ihren / tmp / Ordner
Aleksandar Vucetic

13
Ich musste navigieren /var/lib/mysql/<database>und rennen myisamchk -r -v -f ./<table name>.
Linus Oleander

5
Ich habe einen myisam_sort_buffer_size is too smallFehler, also funktionierte dieser Befehl für mich:myisamchk -r -v --sort_buffer_size=2G <table_name>
Dusan

1
Wow, ich dachte meine ganze Website wäre abgespritzt. So eine einfache Lösung. Sie sind mein Held!
Anthony

105

Versuchen Sie, die folgende Abfrage auszuführen:

repair table <table_name>;

Ich hatte das gleiche Problem und es löste mich das Problem.


Dies war eine schnelle Lösung! Hatte eine "schlechte" Optionstabelle. Stellen Sie sicher, dass Sie zuerst die richtige Datenbank auswählen!
Jyllstuart

12

Wenn Sie beim Umzug nach / var / lib / mysql die Berechtigung verweigern, verwenden Sie die folgende Lösung

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

4

Ich musste USE_FRM zur Reparaturanweisung hinzufügen, damit es funktioniert.

REPAIR TABLE <table_name> USE_FRM;

3

Ich habe myisamchk: error: myisam_sort_buffer_size is too smallals Fehler bekommen.

Die Lösung

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

Gehen Sie zu data_dirund entfernen Sie die Your_table.TMPDatei, nachdem Sie die <Your_table>Tabelle repariert haben .


Wo liegt data_dir?
CMCDragonkai

1
Suchen Sie mit diesem Befehl danach grep -r datadir /etc/mysql/. Sollte /var/lib/mysqlunter Debian und Ubuntu sein.
ThorstenS

1

Dies ist eine 100% ige Lösung. Ich habe es selbst versucht.

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql / databasename / tabloname


0

Ich habe die Optionen in den vorhandenen Antworten ausprobiert, hauptsächlich die als korrekt markierte, die in meinem Szenario nicht funktioniert hat. Was jedoch funktionierte, war die Verwendung von phpMyAdmin. Wählen Sie die Datenbank und dann die Tabelle aus. Wählen Sie im unteren Dropdown-Menü "Tabelle reparieren".

  • Servertyp: MySQL
  • Serverversion: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Versionsinformationen: 4.7.7
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.