Mam MySQL InnoDB, który ma wszystkie pliki tabel bazy danych, ale MySQL ich nie widzi i nie ładuje ich.
Problemem stało bo usunięte te trzy pliki: ibdata1
, ib_logfile0
iib_logfile1
ponieważ miałem problemy z uruchamianiem mysql, a przeczytałem je, aby je usunąć, ponieważ MySQL po prostu je zregeneruje (wiem, że powinienem je utworzyć, ale tego nie zrobił).
Co mogę zrobić, aby MySQL ponownie zobaczył tabele?
about_member.frm site_stories.frm
about_member.ibd site_stories.ibd
db.opt stories.frm
FTS_00000000000000bb_BEING_DELETED_CACHE.ibd stories.ibd
FTS_00000000000000bb_BEING_DELETED.ibd story_comments.frm
FTS_00000000000000bb_CONFIG.ibd story_comments.ibd
FTS_00000000000000bb_DELETED_CACHE.ibd story_likes.frm
FTS_00000000000000bb_DELETED.ibd story_likes.ibd
FTS_00000000000000f5_BEING_DELETED_CACHE.ibd story_tags.frm
FTS_00000000000000f5_BEING_DELETED.ibd story_tags.ibd
FTS_00000000000000f5_CONFIG.ibd story_views.frm
FTS_00000000000000f5_DELETED_CACHE.ibd story_views.ibd
FTS_00000000000000f5_DELETED.ibd story_view_totals.frm
member_favorites.frm story_view_totals.ibd
member_favorites.ibd tags.frm
members.frm tags.ibd
members.ibd
Odpowiedzi:
Oto dlaczego MySQL nie widzi tych plików: Systemowy obszar tabel (ibdata1) ma słownik danych specyficzny dla silnika pamięci, który pozwala InnoDB odwzorować potencjalne użycie tabeli:
Przenoszenie tabel InnoDB z jednego miejsca do drugiego wymaga poleceń takich jak
Oto część dokumentacji MySQL 5.5 wyjaśniająca, co należy wziąć pod uwagę
Biorąc pod uwagę te zastrzeżenia i protokoły, oto sugerowany sposób działania
W tym przykładzie spróbujmy przywrócić
tags
tabelę domydb
bazy danychKROK 1
Upewnij się, że masz kopie zapasowe tych
.frm
i.ibd
plików/tmp/innodb_data
KROK 2
Pobierz
CREATE TABLE tags
instrukcję i wykonaj ją jakoCREATE TABLE mydb.tags ...
. Upewnij się, że ma dokładnie taką samą strukturę jak oryginałtags.frm
KROK 3
Usuń puste
tags.ibd
za pomocą MySQLKROK 4
Przynieś kopię zapasową
tags.ibd
KROK 5
Dodaj
tags
tabelę do słownika danych InnoDBKROK 6
Przetestuj dostępność stołu
Jeśli otrzymasz normalne wyniki, gratulacje importujesz tabelę InnoDB.
KROK 7
W przyszłości nie usuwaj ibdata1 i jego dzienników
Spróbuj !!!
Rozmawiałem już o takich sprawach
Apr 23, 2012
: MySQL: jak przywrócić tabelę przechowywaną w pliku .frm i .ibd?Sep 28, 2011
: Jak odzyskać tabelę InnoDB, której pliki zostały przeniesioneCAVEAT
Co jeśli nie znasz struktury tabeli
tags
?Istnieją narzędzia do uzyskania instrukcji CREATE TABLE przy użyciu samego
.frm
pliku. Napisałem również o tym post: Jak wyodrębnić schemat tabeli tylko z pliku .frm? . W tym poście skopiowałem plik .frm na maszynę z systemem Windows z systemu Linux, uruchomiłem narzędzie Windows i otrzymałemCREATE TABLE
instrukcję.źródło
weblyize
.tags
„istnieje. ODRZUCAJ obszar tabel przed IMPORTEM. Więc najpierw próbuję uruchomić obszar tabel alter i otrzymuję ten błąd: ERROR 1146 (42S02): Tabela „weblyize.tags” nie istnieje . Co mogę zrobić?CREATE TABLE ...
a następnie postępowałem zgodnie z instrukcjami! Uratowałeś mnie przed koniecznością przepisywania ich w 100% od zera! Nie zaimportował kluczy obcych, ale nie ma problemu, mogę to zrobić sam! Jeszcze raz dzięki!Mam tę samą sytuację, nie mogę upuścić ani utworzyć określonej nazwy tbl. Moja procedura naprawy to:
Zatrzymaj MySQL.
Usuń ib_logfile0 i ib_logfile1.
Usuń pliki tblname. OSTRZEŻENIE: TO PONOWNIE USUNĄ TWOJE DANE
Uruchom MySQL.
źródło
Też miałem ten problem. Usunąłem
ibdata1
przypadkowo i wszystkie moje dane zostały utracone.Po 1-2 dniach wyszukiwania w Google i SO, w końcu znalazłem rozwiązanie, które uratowało mi życie (miałem tak wiele baz danych i tabel z ogromnymi rekordami).
wziąć kopię zapasową z
/var/lib/mysql
odzyskać schemat tabeli z
.frm
pliku z dbsake (była inna opcja! mysqlfrm . ale to nie działało dla mnie)utwórz nową tabelę (o nowej nazwie) z wyeksportowanym schematem.
odrzuć nowe dane tabeli za pomocą tego polecenia:
/var/lib/mysql/database-name
a jeśli istnieją dane (.ibd
plik) dla starej tabeli, usuń ją.źródło