Z jakiegoś powodu, gdy próbuję otworzyć moje tabele, które są przechowywane .frm
i .ibd
pliki (czy to na MySQL, czy phpmyadmin), pojawia się błąd składniowy lub mówi, że nie istnieje.
Przeczytałem inny post, który miał podobny problem, ale nie wiem, jak sprawdzić, czy innodb_file_per_table
jest włączony, i ogólnie jestem po prostu zdezorientowany. Przekształciłem również kopię mojego mysql-bin.000002
pliku do pliku txt, więc widzę, że dane z mojej bazy danych nie zostały całkowicie utracone.
Baza danych została utworzona w zeszłym roku. Mam 6 takich mysql-bin.00000
plików, ale z jakiegoś powodu .000002
jest największy. W tej chwili mam pliki .ibd
i .frm
dla wszystkich moich baz danych, ale nie wiem, jak mogę je przywrócić z powrotem do MySQL, a przynajmniej do czegoś, co mogę przeczytać.
Używam WampServer 2.4 i MySQL 5.6.12 na Windows 2003 Server. Czy mam też pobrać wtyczkę do InnoDB?
Odpowiedzi:
W końcu zorientowałem się i rozwiązałem swój problem poprzez wiele prób i błędów. Dla tych, którzy nie mają oryginalnego pliku ibdata1 i mają tylko swoje pliki .frm i .ibd, oto sposób, w jaki przywróciłem moje dane.
Mam nadzieję, że to pomogło i daj mi znać, jeśli masz jakieś pytania lub komentarze! Sprawdź także http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file, aby uzyskać więcej informacji.
źródło
Got error -1 from storage engine
podczas uruchamianiaIMPORT TABLESPACE
. Ale dla mnie MySQL 5.6 działał dla tabel utworzonych przy pomocy MySQL 5.5, więc wszystko jest dobrze;). Jeśli utkniesz z 5.5, musisz postępować zgodnie z instrukcjami w linku chriscender, który podałeś.innodb_file_per_table
włączonej.Główny plik danych InnoDB - zwykle nazywany
ibdata
- jest niezbędny, aby MySQL mógł zrozumieć twoje pliki .ibd.Jeśli chcesz przenosić dane między serwerami za pomocą plików binarnych, powinieneś zatrzymać MySQL w czystym porządku, a następnie przenieść wszystkie pliki danych, w tym pliki ibdata , między katalogami.
Bardziej niezawodnym mechanizmem przenoszenia danych między serwerami w systemie Windows byłoby użycie (
mysqldump
) lub eksportu bazy danych z PHPMyAdmin (lub podobnego narzędzia).Jeśli rejestrowanie binarne jest włączone przez cały czas działania serwera (na podstawie komentarzy, może nie być tak), można również użyć
mysqlbinlog
do odzyskania każdej instrukcji SQL uruchomionej na serwerze z plików mysql-bin i w ten sposób utwórz ponownie bazę danych. W plikach mysql-bin powinny znajdować się znaczniki czasu unix, które pomogą ci określić, jak daleko się cofają.Jeśli utraciłeś oryginalne pliki bazy danych i pozostały tylko pojedyncze pliki .ibd, być może będziesz musiał skorzystać z odzyskiwania danych zgodnie z sugestiami akuzminsky w komentarzach.
MySQL 5.6 ma kilka nowych funkcji do przenoszenia plików danych InnoDB .ibd ( przenośne przestrzenie tabel ), ale wymagają one trochę wysiłku, a dla wystarczająco małej bazy danych przesyłanie danych będzie znacznie łatwiejsze
mysqldump
.źródło
Odpowiedź Wiki wygenerowana z komentarzy do pytania autorstwa akuzminsky
Jeśli widzisz
*.ibd
pliki,innodb_file_per_table
oznacza toON
, że w przeciwnym razie wszystkie tabele byłyby w nimibdata1
.Jeśli powie, że tabela nie istnieje, tabeli brakuje w słowniku InnoDB. Spróbuj zrzucić wszystkie tabele na osobne zrzuty sql (jedna tabela - jeden plik). Tabele, których nie można zrzucić, można przywrócić za pomocą zestawu narzędzi odzyskiwania TwinDB .
Nie ma jeszcze pakietów binarnych. Musisz pobrać kod źródłowy z GitHub i skompilować go. Zobacz instrukcje w słowniku Odzyskaj InnoDB . To całkiem proste:
i wtedy
źródło