Zmieniłem katalog danych instalacji MySQL i wszystkie bazy zostały poprawnie przeniesione, z wyjątkiem jednej. Mogę połączyć się USE
z bazą danych. SHOW TABLES
zwraca mi również wszystkie tabele poprawnie, a pliki każdej tabeli istnieją w katalogu danych MySQL.
Jednak gdy próbuję SELECT
coś z tabeli, pojawia się komunikat o błędzie, że tabela nie istnieje. Nie ma to jednak sensu, ponieważ byłem w stanie wyświetlić tę samą tabelę za pomocą SHOW TABLES
instrukcji.
Domyślam się, że SHOW TABLES
wyświetla listę istnienia pliku, ale nie sprawdza, czy plik jest uszkodzony, czy nie. W związku z tym mogę wyświetlić listę tych plików, ale nie mam do nich dostępu.
Niemniej jednak jest to tylko przypuszczenie. Nigdy wcześniej tego nie widziałem. Teraz nie mogę zrestartować bazy danych w celu przetestowania, ale każda inna aplikacja, która z niej korzysta, działa poprawnie. Ale to tylko przypuszczenie, nigdy wcześniej tego nie widziałem.
Czy ktoś wie, dlaczego tak się dzieje?
Przykład:
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database |
+-----------------------+
| TABLE_ONE |
| TABLE_TWO |
| TABLE_THREE |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist
źródło
Odpowiedzi:
Na wypadek, gdyby ktoś nadal się przejmował:
Miałem ten sam problem po skopiowaniu katalogu bazy danych bezpośrednio za pomocą polecenia
Jeśli zrobisz to z bazą danych, która korzysta z
InnoDB
tabel, otrzymasz zwariowany błąd „tabela nie istnieje” wspomniany powyżej.Problem jest, że trzeba te
ib*
pliki w katalogu głównym datadir MySQL (npibdata1
,ib_logfile0
iib_logfile1
).Kiedy skopiowałem te, zadziałało to dla mnie.
źródło
chown _mysql:wheel
użyć nazwy bazy danych katalog, ibdata i wszystkich plików w katalogu (użyjchown -R ...
). Podobnie, uprawnienia były niepoprawne w katalogu, więcchmod -R 660 databasename
było potrzebne, aby tabele pojawiły się w bazie danych.chown
!!! Tak więc wszystko pocp
użyciu tego polecenia ->chown mysql:mysql /var/lib/mysql/ -R
sudo chmod -R 600 /var/lib/mysql
Dla mnie w systemie Mac OS (instalacja MySQL DMG) proste ponowne uruchomienie serwera MySQL rozwiązało problem. Zgaduję, że spowodowała to hibernacja.
źródło
sudo /usr/local/mysql/support-files/mysql.server restart
check table TABLE_ONE;
Mam błędy „partycja p2 zwróciła błąd”, „idx_blah_1 jest oznaczony jako uszkodzony”, a „idx_blah_2 jest oznaczony jako uszkodzony”. Teraz wracam do działaniaoptimize table TABLE_ONE;
i pojawia się komunikat o błędzie „Baza danych tabeli”. TABELA_ON „nie istnieje”.Pojawia się ten problem, gdy sprawa nazwy tabeli, której używam, jest wyłączona. Tak więc tabela nazywa się „db”, ale użyłem „DB” w instrukcji select. Upewnij się, że sprawa jest taka sama.
źródło
Ten błąd może również wystąpić podczas ustawiania
lower_case_table_names
się1
, a następnie próbuje tabel dostępu, które zostały utworzone z wartością domyślną dla tej zmiennej. W takim przypadku możesz przywrócić poprzednią wartość i będziesz mógł odczytać tabelę.źródło
cp -a /var/lib/mysql /var/lib/mysql-backup
/var/lib/mysql
mysqldump >dbase.mysql
/var/lib/mysql
/var/lib/mysql-backup
na/var/lib/mysql
mysqldump < dbase.mysql
źródło
Uruchom zapytanie:
Niestety MySQL pozwala na stosowanie znaków Unicode i niedrukowalnych w nazwie tabeli. Jeśli utworzyłeś tabele, kopiując kod tworzenia z jakiegoś dokumentu / strony internetowej, istnieje szansa, że ma on gdzieś miejsce o zerowej szerokości.
źródło
Właśnie spędziłem trzy dni na tym koszmarze. Najlepiej jest mieć kopię zapasową, którą można przywrócić, a następnie po prostu upuścić uszkodzoną tabelę. Tego rodzaju błędy mogą spowodować, że rozmiar ibdata1 będzie ogromny ( ponad 100 GB dla skromnych tabel)
Jeśli nie masz najnowszej kopii zapasowej, na przykład w przypadku polegania na mySqlDump, prawdopodobnie w pewnym momencie kopie zapasowe po cichu zepsuły się. Będziesz musiał wyeksportować bazy danych, czego oczywiście nie możesz zrobić, ponieważ podczas uruchamiania mySqlDump wystąpią błędy blokady.
Aby obejść ten problem, przejdź do
/var/log/mysql/database_name/
i usuń nazwę_tabeli. *Następnie natychmiast spróbuj zrzucić stół; robienie tego powinno teraz działać. Teraz przywróć bazę danych do nowej bazy danych i odbuduj brakujące tabele. Następnie zrzuć zepsutą bazę danych.
W naszym przypadku ciągle otrzymywaliśmy
mysql has gone away
wiadomości w przypadkowych odstępach czasu we wszystkich bazach danych; po usunięciu uszkodzonej bazy danych wszystko wróciło do normy.źródło
Nie znam przyczyny, ale w moim przypadku rozwiązałem po prostu wyłączenie i włączenie sprawdzania kluczy obcych
źródło
Miałem ten sam problem i szukałem 2-3 dni, ale dla mnie rozwiązanie było naprawdę głupie.
$ sudo service mysql restart
Teraz tabele stają się dostępne.
źródło
Ok, to zabrzmi dość absurdalnie, ale humor mnie.
Dla mnie problem został rozwiązany, kiedy zmieniłem moje oświadczenie na:
Wprowadziłem dwie zmiany
1.) Nazwa tabeli została zapisana małymi literami - wiem !!
2.) Użyłem określonego symbolu cytatu = ` : To jest klucz nad TAB
Rozwiązanie brzmi absurdalnie, ale zadziałało i jest sobotni wieczór i pracuję od 9 rano - więc wezmę to :)
Powodzenia.
źródło
Miałem ten problem po aktualizacji WAMP, ale nie miałem kopii zapasowej bazy danych.
To działało dla mnie:
Zatrzymaj nowy WAMP
Skopiuj potrzebne katalogi bazy danych i plik ibdata1 ze starej instalacji WAMP
Usuń
ib_logfile0
iib_logfile1
Uruchom WAMP
Powinieneś być teraz w stanie tworzyć kopie zapasowe swoich baz danych. Jednak po ponownym uruchomieniu serwera nadal będziesz mieć problemy. Teraz zainstaluj ponownie WAMP i zaimportuj swoje bazy danych.
źródło
Spróbuj uruchomić kwerendę SQL, aby odrzucić obszar tabel przed skopiowaniem pliku idb:
Skopiuj plik idb
Uruchom ponownie MySql
źródło
Po ponownej instalacji MySQL miałem ten sam problem, wydaje się, że podczas instalacji niektóre pliki konfiguracyjne, które przechowują dane o plikach dziennika InnoDB, te pliki ib_logfile * (są to pliki dziennika, prawda?), Są zastępowane. Aby rozwiązać ten problem, właśnie usunąłem pliki ib_logfile *.
źródło
To, co zadziałało dla mnie, to po prostu upuszczenie stołu, mimo że nie istniał. Następnie utworzyłem tabelę i ponownie wypełniłem zrzut pamięci SQL wykonany wcześniej.
Musi istnieć metabaza nazw tabel i najprawdopodobniej istniała tam, dopóki jej nie upuściłem.
źródło
Miałem podobny problem ze stołem-widmem. Na szczęście miał zrzut SQL sprzed awarii.
W moim przypadku musiałem:
/var/mysql
off do kopii zapasowej/var/mysql/{dbname}
UWAGA: Wymaga pliku zrzutu.
źródło
/var/lib/mysql
zamiast/var/mysql
Czy mysqldump do bazy danych:
Przywróć bazę danych
Teraz wszystkie tabele w bazie danych zostały całkowicie przywrócone. Próbować..
źródło
Zainstalowałem MariaDB na nowym komputerze, zatrzymałem usługę Mysql zmieniłem nazwę folderu danych na dane - Rozwiązałem problem z kopiowaniem tylko Mysql \ data \ table_folders i ibdata1 z uszkodzonego folderu danych HD MySql do nowego zainstalowanego folderu danych mysql.
Zrezygnowałem ib_logfile0 i ib_logfile1 (inaczej serwer nie rozpocznie usługa)
Uruchomiono usługę mysql.
Następnie serwer działa.
źródło
Wygląda na to, że problem dotyczy (przynajmniej mojego i kilku innych) nieprawidłowych (uszkodzonych?) Plików dziennika innodb. Ogólnie rzecz biorąc, po prostu trzeba je odtworzyć.
Oto rozwiązania, z których większość wymaga ponownego uruchomienia mysql.
źródło
Oto inny scenariusz (aktualizacja wersji) :
Ponownie zainstalowałem swój system operacyjny (Mac OS El Captain) i zainstalowałem nową wersję mysql (używając homebrew). Zainstalowana wersja (5.7) okazała się nowsza niż moja poprzednia. Następnie skopiowałem tabele, w tym pliki ib *, i ponownie uruchomiłem serwer. Widziałem tabele w środowisku mysql workbench, ale kiedy próbowałem coś wybrać, otrzymałem komunikat „Tabela nie istnieje”.
Rozwiązanie:
mysql.server stop
lubbrew services stop mysql
mysqld_safe --user=mysql --datadir=/usr/local/var/mysql/
(w razie potrzeby zmień ścieżkę)mysql_upgrade -u root -p password
(w innym oknie terminala)mysqladmin -u root -p password shutdown
mysql.server start
lubbrew services start mysql
Odpowiednie dokumenty są tutaj .
źródło
W moim przypadku zdefiniowałem wyzwalacz w tabeli, a następnie próbowałem wstawić wiersz do tabeli. wygląda na to, że jakoś wyzwalacz był błędny, a zatem wstawianie dawało błąd, tabela nie istnieje.
źródło
Możliwe, że masz w nazwie tabeli ukrytą postać. Te nie pojawiają się, gdy robisz tabele pokazowe. Czy możesz zrobić „POKAŻ UTWÓRZ TABELĘ_TABELĘ” i wypełnij zakładkę „TABELA_TABELI” i sprawdź, czy zawiera ukryte znaki. Czy próbowałeś również upuścić i przerobić tabele. Tylko po to, aby upewnić się, że nie ma nic złego w uprawnieniach i że nie ma ukrytych postaci.
źródło
Ten sam dokładny problem po imporcie kopii zapasowej TimeMachine. Moje rozwiązanie polegało na zatrzymaniu serwera MySQL i naprawieniu uprawnień do odczytu i zapisu w plikach ib *.
źródło
Jeszcze jedna odpowiedź, którą moim zdaniem warto tu przywołać (ponieważ przyszedłem tutaj z tym samym problemem i ta okazała się dla mnie odpowiedzią):
Sprawdź dokładnie, czy nazwa tabeli w zapytaniu jest napisana dokładnie tak samo, jak w bazie danych.
To coś oczywistego, nowicjusz, ale takie rzeczy jak „użytkownik” kontra „użytkownicy” mogą wprawiać ludzi w osłupienie i pomyślałem, że będzie to przydatna odpowiedź na liście tutaj. :)
źródło
W moim przypadku, gdy importowałem eksportowany plik sql, otrzymywałem błąd, że tabela nie istnieje dla zapytania tworzenia tabeli.
Uświadomiłem sobie, że w nazwie mojej bazy danych znajduje się znak podkreślenia, a mysql umieścił tuż przed tym znak zmiany znaczenia.
Więc usunąłem podkreślenie w nazwie bazy danych, wszystko się udało.
Mam nadzieję, że pomoże to również komuś innemu.
źródło
Mój stolik został jakoś przemianowany na
' Customers'
np. Z wiodącym miejscemTo znaczyło
a) zapytania zostały zerwane
b) tabela nie pojawiła się zgodnie z oczekiwaniami w kolejności alfabetycznej moich tabel, co w mojej panice oznaczało, że jej nie widziałem!
źródło
W moim przypadku był to
SQLCA.DBParm
parametr.użyłem
ale musi być
Wyjaśnienie:
Zamierzasz połączyć trzy ciągi:
Nie używaj spacji w znakach czwartorzędowych. Dziękuję mojemu koledze Janowi
źródło
Idź do:
xampp\mysql\data\dbname
wewnątrz dbname mają plik tablename.frm i tablename.ibd.
usuń go, uruchom ponownie mysql i spróbuj ponownie.
źródło
Skopiuj tylko
ibdata1
plik ze starego katalogu danych. Nie kopiujib_logfile1
aniib_logfile0
plików. To spowoduje, że MySQL nie będzie się już uruchamiał.źródło
Dzisiaj spotkałem ten sam problem. Jest to problem „wrażliwości na wielkość liter” mysql.
Sprawdź odpowiedni plik danych. Jest bardzo prawdopodobne, że nazwa pliku jest zapisana małymi literami w systemie plików, ale nazwa tabeli wymieniona w poleceniu „pokaż tabele” jest pisana wielkimi literami. Jeśli zmienna systemowa „
lower_case_table_names
” wynosi 0, zapytanie zwróci „tabela nie istnieje”, ponieważ w porównaniach nazw rozróżniana jest wielkość liter, gdy „lower_case_table_names
” wynosi 0.źródło
Miałem ten sam problem w systemie Windows. Oprócz skopiowania plików ib * i katalogu mysql do katalogu danych, musiałem również dopasować plik my.ini.
Plik my.ini z mojej poprzedniej instalacji nie miał następującego wiersza:
Ale zrobiła to moja nowa instalacja. Być może dlatego, że nie miałem tej opcji w starszym instalatorze. Usunąłem to i ponownie uruchomiłem usługę, a tabele działały zgodnie z oczekiwaniami. Krótko mówiąc, upewnij się, że nowy plik my.ini jest repliką starego, z jedynym wyjątkiem jest katalog danych, katalog wtyczek i numer portu, w zależności od nowej instalacji.
źródło