Otrzymałem następujący błąd z zapytania MySQL.
#126 - Incorrect key file for table
Nawet nie zadeklarowałem klucza do tej tabeli, ale mam indeksy. Czy ktoś wie, co może być problemem?
mysql
mysql-error-126
Brian
źródło
źródło
REPAIR TABLE
i nadal to otrzymujesz, a dodatkowo jest wolne miejsce,/tmp
możesz spróbować po prostu ponownie uruchomić serwer.Odpowiedzi:
Za każdym razem, gdy to się stało, z mojego doświadczenia wynika, że był to pełny dysk.
EDYTOWAĆ
Warto również zauważyć, że może to być spowodowane pełnym ramdyskiem, gdy robisz takie rzeczy, jak zmienianie dużej tabeli, jeśli masz skonfigurowany ramdysk. Możesz tymczasowo zakomentować linię ramdysku, aby zezwolić na takie operacje, jeśli nie możesz zwiększyć jej rozmiaru.
źródło
/tmp
jest mały system plików tmpfs i mysql zabrakło miejsca na zapisanie tam tabeli tymczasowej. Musiałem ustawićtmpdir
zmienną konfiguracyjną, jak wspomniano na mysql.comPrzede wszystkim powinieneś wiedzieć, że klucze i indeksy są synonimami w MySQL. Jeśli spojrzysz na dokumentację dotyczącą składni CREATE TABLE , możesz przeczytać:
Teraz rodzaj błędu, który otrzymujesz, może wynikać z dwóch rzeczy:
W pierwszym przypadku zobaczysz, że dodanie ograniczenia do zapytania może tymczasowo rozwiązać problem. Jeśli to zrobi za Ciebie, prawdopodobnie masz
tmp
folder, który jest za mały w stosunku do rozmiaru zapytań, które próbujesz wykonać. Możesz wtedy zdecydować lub zrobićtmp
powiększyć lub zmniejszyć zapytania! ;)Czasami,
tmp
jest wystarczająco duży, ale nadal się zapełnia, w takich sytuacjach należy wykonać ręczne czyszczenie.W drugim przypadku istnieją rzeczywiste problemy z danymi MySQL. Jeśli możesz łatwo ponownie wstawić dane, radziłbym po prostu upuścić / ponownie utworzyć tabelę i ponownie wstawić dane. Jeśli nie możesz, możesz spróbować naprawić stół na miejscu za pomocą stołu REPAIR . Jest to ogólnie długotrwały proces, który może się nie powieść.
Spójrz na pełny komunikat o błędzie, jaki otrzymujesz:
Wspomina w komunikacie, że możesz spróbować go naprawić. Ponadto, jeśli spojrzysz na rzeczywistą otrzymaną ścieżkę FILEPATH, możesz dowiedzieć się więcej:
jeśli jest coś podobnego
/tmp/#sql_ab34_23f
, oznacza to, że MySQL musi utworzyć tabelę tymczasową ze względu na rozmiar zapytania. Przechowuje go w / tmp i że w twoim / tmp nie ma wystarczającej ilości miejsca dla tej tymczasowej tabeli.jeśli zamiast tego zawiera nazwę rzeczywistej tabeli, oznacza to, że jest ona prawdopodobnie uszkodzona i należy ją naprawić.
Jeśli stwierdzisz, że problem dotyczy rozmiaru / tmp, po prostu przeczytaj tę odpowiedź na podobne pytanie w celu rozwiązania problemu: MySQL, Błąd 126: Nieprawidłowy plik klucza dla tabeli .
źródło
Wykonanie tych instrukcji pozwoliło mi ponownie utworzyć katalog tmp i rozwiązać problem:
Wyświetl wszystkie systemy plików i ich wykorzystanie na dysku w postaci czytelnej dla człowieka:
Znajdź procesy, w których są otwarte pliki
/tmp
Następnie umount
/tmp
i/var/tmp
:Następnie usuń uszkodzony plik partycji:
Następnie utwórz nowy ładny:
Zwróć uwagę, że edytując skrypt securetmp Perl, możesz ręcznie ustawić rozmiar katalogu tmp, jednak samo uruchomienie skryptu zwiększyło rozmiar katalogu tmp na naszym serwerze z około 450 MB do 4,0 GB.
źródło
Błąd # 126 zwykle występuje, gdy masz uszkodzoną tabelę. Najlepszym sposobem rozwiązania tego problemu jest naprawa. Ten artykuł może pomóc:
http://dev.mysql.com/doc/refman/5.0/en/repair-table.html
źródło
Dostałem ten błąd, gdy ustawiony
ft_min_word_len = 2
wmy.cnf
, co obniża Minimalna długość słowa w pełnym indeksu tekstowego do 2, od dnia 4 domyślnie.Naprawienie stołu rozwiązało problem.
źródło
Spróbuj użyć limitu w swoim zapytaniu. To z powodu pełnego dysku, jak powiedział @Monsters X.
Zmierzyłem się również z tym problemem i rozwiązałem go przez ograniczenie zapytania, ponieważ były tam tysiące rekordów. Teraz działa dobrze :)
źródło
Wiem, że to stary temat, ale żadne z wymienionych rozwiązań nie zadziałało. Zrobiłem coś innego, co zadziałało:
Musisz:
źródło
źródło
Naprawiłem ten problem z:
Może pomaga
źródło
table
ENGINE = MyISAM;Przejdź do
/etc/my.cnf
i skomentujtmpfs
To rozwiązuje problem.
Uruchomiłem polecenie zasugerowane w innej odpowiedzi i chociaż katalog jest mały, był pusty, więc nie było problemu.
źródło
Spróbuj uruchomić polecenie naprawy dla każdej tabeli, której dotyczy zapytanie.
Użyj administratora MySQL, przejdź do Katalog -> Wybierz katalog -> Wybierz tabelę -> Kliknij przycisk Konserwacja -> Napraw -> Użyj FRM.
źródło
Teraz inne odpowiedzi rozwiązały to za mnie. Okazuje się, że zmiana nazwy kolumny i indeksu w tym samym zapytaniu spowodowała błąd.
Nie działa:
Prace (2 wypowiedzi):
To było w MariaDB 10.0.20. Nie było błędów w tym samym zapytaniu w MySQL 5.5.48.
źródło
Wystąpił błąd:
mysql> tabela napraw f_scraper_banner_details;
To zadziałało dla mnie
źródło
Mój problem pochodzi ze złego zapytania. Odwołałem się do tabeli w FROM, do której nie odwołano się w SELECT.
przykład:
, users u
jest przyczyną tego problemu. Usunięcie tego rozwiązało problem.Dla porównania było to w środowisku deweloperskim CodeIgniter.
źródło
Otrzymałem ten komunikat podczas pisania do tabeli po zmniejszeniu ft_min_word_len (minimalna długość słowa w pełnym tekście). Aby go rozwiązać, ponownie utwórz indeks, naprawiając tabelę.
źródło
mysqlcheck -r -f -uroot -p --use_frm nazwa_bazy
normalnie załatwi sprawę
źródło