Tabela MySQL jest oznaczona jako awaria i ostatnia (automatyczna?) Naprawa nie powiodła się


126

Naprawiałem tę tabelę, nagle serwer się zawiesił, a kiedy wróciłem, wszystkie tabele są w porządku, ale ten pokazuje, że jest używany, a kiedy próbuję naprawić, nie kontynuuje.

BŁĄD 144 - Tabela './extas_d47727/xzclf_ads' jest oznaczona jako awaria i ostatnia (automatyczna?) Naprawa nie powiodła się

Co mogę zrobić, żeby to naprawić?


1
Widziałem, że dzieje się tak głównie wtedy, gdy podstawowy system plików wychodzi z wolnych i-węzłów. Sprawdź za pomocą df -hi. Zwykle coś wypełnia go mnóstwem małych plików, jak np. Pliki sesji php, które nie są czyszczone.
Zrin

Odpowiedzi:


260

Jeśli Twój proces MySQL jest uruchomiony, zatrzymaj go. W Debianie:

sudo service mysql stop

Przejdź do folderu danych. W Debianie:

cd /var/lib/mysql/$DATABASE_NAME

Spróbuj biegać:

myisamchk -r $TABLE_NAME

Jeśli to nie zadziała, możesz spróbować:

myisamchk -r -v -f $TABLE_NAME

Możesz ponownie uruchomić serwer MySQL. W Debianie:

sudo service mysql start

3
Wypróbowałem powyższe polecenie. Otrzymuję ten błąd Nie mogę utworzyć nowego pliku tymczasowego: „xzclf_ads.TMD”
CryptoMiningPoolSetupYiimp

2
Cóż, czy dysk jest naprawdę pełny? Czy możesz spróbować uruchomić „df -h”? Najprawdopodobniej tak jest i powinieneś zwolnić trochę miejsca ... Podczas naprawy tabeli wykorzystuje trochę miejsca na dysku do zapisywania w tabeli tymczasowej. Jak widać z komunikatu o błędzie, zapisuje go do folderu / tmp /
Aleksandar Vucetic

13
Musiałem nawigować /var/lib/mysql/<database>i biec myisamchk -r -v -f ./<table name>.
Linus Oleander

5
Mam myisam_sort_buffer_size is too smallbłąd, więc to polecenie zadziałało:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Wow, myślałem, że cała moja strona internetowa została zerwana. Taka prosta poprawka. Jesteś moim bohaterem!
Anthony,

105

Spróbuj uruchomić następujące zapytanie:

repair table <table_name>;

Miałem ten sam problem i to mnie rozwiązało.


To była szybka naprawa! Miałem „złą” tabelę opcji. Upewnij się, że najpierw wybrałeś właściwą bazę danych!
jyllstuart

12

Jeśli daje ci odmowę uprawnień podczas przenoszenia do / var / lib / mysql, użyj następującego rozwiązania

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

4

Musiałem dodać USE_FRM do oświadczenia o naprawie, aby działało.

REPAIR TABLE <table_name> USE_FRM;

3

Otrzymałem myisamchk: error: myisam_sort_buffer_size is too smalljako błąd.

Rozwiązanie

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

2

Przejdź do data_diri usuń Your_table.TMPplik po naprawie <Your_table>tabeli.


Gdzie jest data_dir?
CMCDragonkai

1
wyszukaj go za pomocą tego polecenia grep -r datadir /etc/mysql/. Powinien znajdować się /var/lib/mysqlpod debianem i ubuntu.
ThorstenS,

1

To jest 100% rozwiązanie. Sam tego spróbowałem.

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


0

Wypróbowałem opcje w istniejących odpowiedziach, głównie tę oznaczoną jako poprawna, która nie działa w moim scenariuszu. Jednak to, co zadziałało, to użycie phpMyAdmin. Wybierz bazę danych, a następnie zaznacz tabelę, z rozwijanego menu dolnego wybierz opcję „Napraw tabelę”.

  • Typ serwera: MySQL
  • Wersja serwera: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Informacje o wersji: 4.7.7
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.