Wcześniej zapisałem kopię katalogu / var / lib / mysql / ddms („ddms” to nazwa schematu). Teraz zainstalowałem nowy MySQL na świeżo zainstalowanym Ubuntu 10.04.3 LTS, uruchamiając. apt-get install mysql-server
Myślę, że wersja 5.1 została zainstalowana. Po skopiowaniu katalogu ddms do katalogu / var / lib / mysql niektóre tabele działają poprawnie, są to tabele ze skojarzonym zestawem trzech plików: plik .frm, plik .MYD i plik .MYI.
Istnieją jednak dwie tabele z innym zestawem plików: plik .frm i plik .ibd. Te dwie tabele nie pojawiły się na liście tabel w phpMyAdmin. Kiedy patrzę na dziennik błędów, mówi:
[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
Proszę o pomoc w przywróceniu tych dwóch tabel. Dzięki.
Odpowiedzi:
Tabel InnoDB nie można skopiować w taki sam sposób, jak tabele MyISAM.
Samo kopiowanie plików .frm i .ibd z jednej lokalizacji do drugiej wymaga problemów. Kopiowanie plików .frm i .ibd tabeli InnoDB jest dobre tylko wtedy i tylko wtedy, gdy możesz zagwarantować, że identyfikator obszaru tabel pliku .ibd jest dokładnie zgodny z wpisem id obszaru tabel w metdanych pliku ibdata1 .
Napisałem dwa posty w DBA StackExchange na temat tej koncepcji identyfikatora obszaru tabel
Oto doskonały link, jak ponownie dołączyć dowolny plik .ibd do ibdata1 w przypadku niedopasowania identyfikatorów obszaru tabel: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Po przeczytaniu tego, powinieneś natychmiast uświadomić sobie, że kopiowanie plików .ibd jest po prostu szalone.
Możesz zastosować sugestie z linku do kalendarza Chrisa lub wrócić do starej instalacji mysql, uruchomić mysql, a następnie mysqldump
ddms
bazę danych. Następnie zaimportuj ten mysqldump do nowej instancji mysql. Zaufaj mi, byłoby to o wiele łatwiejsze.źródło
How to Recover an InnoDB table whose files were moved around
dosłownie uratował mi życie. Dziękuję Ci bardzo.Ostatnio doświadczyłem tego samego problemu. Oto kroki, których użyłem, aby go rozwiązać bez konieczności manipulowania identyfikatorem obszaru tabel, jak wspomniano powyżej w RolandoMySQLDBA. Jestem na komputerze Mac, więc użyłem MAMP, aby przywrócić bazę danych do punktu, w którym mógłbym ją wyeksportować w zrzutu MySQL.
Możesz przeczytać pełny post na ten temat tutaj: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
Ty musisz mieć:
-ibdata1
-ib_logfile0
-ib_logfile1
Pliki -.FRM z folderu mysql_database
- Świeża instalacja MAMP / MAMP Pro, którą chcesz zniszczyć (w razie potrzeby)
Skopiuj we wszystkich folderach i plikach zawartych w archiwum folderu mysql z serwera produkcyjnego (w moim przypadku środowisko Mt Plesk) Z WYJĄTKIEM:
- / Aplikacje / MAMP / db / mysql / mysql /
- / Aplikacje / MAMP / db / mysql / mysql_upgrade_info
- / Aplikacje / MAMP / db / mysql / performance_schema
I voila, powinieneś teraz mieć dostęp do baz danych z phpMyAdmin, co za ulga!
Ale nie skończyliśmy, musisz teraz wykonać mysqldump, aby przywrócić te pliki do środowiska produkcyjnego, a interfejs phpmyadmin przekroczył limit czasu dla dużych baz danych. Postępuj zgodnie z instrukcjami tutaj:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Skopiowano poniżej w celach informacyjnych. Pamiętaj, że w domyślnej instalacji MAMP hasło to „root”.
Jak uruchomić mysqldump dla MAMP przy użyciu terminalu
BAZA DANYCH EKSPORTOWYCH Z MAMPA [1]
Krok pierwszy: Otwórz nowe okno terminala
Krok drugi: Przejdź do instalacji MAMP, wprowadzając następujący wiersz w terminalu cd / application / MAMP / library / bin Naciśnij klawisz Enter
Krok trzeci: wpisz polecenie zrzutu ./mysqldump -u [NAZWA UŻYTKOWNIKA] -p [NAZWA_BAZU DANYCH]> [PATH_TO_FILE] Naciśnij klawisz Enter
Przykład:
Szybka wskazówka: aby szybko przejść do folderu, możesz przeciągnąć folder do okna terminala, aby zapisać lokalizację folderu. To był wspaniały dzień, kiedy ktoś mi to pokazał.
Krok czwarty: ten wiersz tekstu powinien pojawić się po naciśnięciu klawisza Enter Wprowadź hasło: Zgadnij co, wpisz hasło, pamiętaj, że litery nie pojawią się, ale tam są. Naciśnij klawisz Enter
Krok piąty: Sprawdź lokalizację, w której zapisałeś plik, jeśli jest, SUKCES Teraz możesz zaimportować bazę danych, która zostanie opisana poniżej.
Po wyeksportowaniu bazy danych mysql możesz ją zaimportować do środowiska produkcyjnego.
źródło
Odzyskałem moje pliki MySQL 5.5 * .ibd i * .frm za pomocą MySQL Utilites i MariaDB 10.
1) Generowanie Utwórz SQL.
Możesz pobrać swoje sql z pliku frm. Musisz użyć: https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfrm.html
shell> mysqlfrm --server = root: pass @ localhost: 3306 c: \ MY \ t1.frm - -port = 3310
Innym sposobem, w jaki możesz mieć swoje sql's.
2) Utwórz tabele
Utwórz tabele w bazie danych.
3) zmień tabelę xxx odrzuć tabelę
Odrzuć tabele, które chcesz zastąpić pliki * .ibd.
4) Skopiuj pliki * .ibd (MySQL lub MariaDB) na ścieżkę danych MariaDB
Najpierw próbuję użyć MySQL 5.5 i 5.6 w celu przywrócenia, ale baza danych ulega awarii i natychmiast zatrzymuje się w związku z błędem id obszaru tabel. ( BŁĄD 1030 (HY000): Wystąpił błąd -1 z silnika pamięci masowej )
Po użyciu MariaDB 10.1.8 i udało mi się odzyskać moje dane.
5) zmień tabelę xxx importuj obszar tabel
Po uruchomieniu tej instrukcji MariaDB ostrzega o pliku, ale nie jest ważne, aby odzyskać dane :) Baza danych nadal trwa i możesz zobaczyć swoje dane.
Mam nadzieję, że te informacje będą dla Ciebie pomocne.
źródło
mysqlfrm
(wypróbowane wersje 1.3.5 i 1.6.5 z MySQL 5.6 i 5.7) nie podały poprawnejCREATE
definicji, nawet przy użyciu MySQL 5.7 ( domyślna ROW_FORMAT zmieniła się w MySQL 5.7.9 ), co skutkowałoSchema mismatch (Expected FSP_SPACE_FLAGS=0x21, .ibd file contains 0x0.)
importem obszaru tabel. Sztuczka polegałaROW_FORMAT=compact
na ręcznym dodaniu na końcuCREATE
instrukcji.Manually adding ROW_FORMAT=compact at the end of the CREATE statement did the trick.
To też działało dla mnie. Dzięki! 👍Miałem dokładnie ten sam problem, mając tylko pliki jako kopię zapasową.
Aby to rozwiązać, skopiowałem pliki bazy danych do / var / lib / mysql / yourdb i ibdata1, który jest umieszczony w / var / lib / mysql.
Byłem wtedy w stanie zweryfikować, czy mogę uzyskać dostęp do tabel mysql -u root -p nazwa_db i zapytanie niektórych tabel, które były wcześniej uszkodzone.
Zrobiłem zrzut bazy danych później za pomocą mysqldump -u root -p [hasło_ root] [nazwa_bazy_danych]> dumpfilename.sql
źródło
Jeśli używasz MAMP i nie możesz uruchomić MySQL po skopiowaniu plików, umieściłem je w
innodb_force_recovery = 2
środku,my.ini
a następnie mogłem uzyskać mysql do uruchomienia i wyeksportowania mojej bazy danych .źródło
Jeśli możesz przywrócić plik * .ibd na oryginalny serwer MySQL, nie zapomnij również przywrócić praw dostępu do pliku. W moim przypadku (MySQL8 na CentOS7) przywróciłem plik do /var/lib/mysql/db/tablename.ibd i uruchomiłem:
Przed ustaleniem praw dostępu dostęp do tabeli spowodował błąd „Serwer MySQL 2006 zniknął”. Po ustaleniu praw dostępu tabela działała (nawet bez ponownego uruchomienia usługi mysqld).
źródło
Zebrałem posty z podobnych tematów (których odpowiedzi nie zamieszczono tutaj):
rozwiązanie 1: https://dba.stackexchange.com/a/59978
rozwiązanie 2: https://dba.stackexchange.com/a/71785 (+ inny post tam)
rozwiązanie 3: zestaw do odzyskiwania tabel: https://twindb.com/how-to-recover-innodb-dictionary/
rozwiązanie 4: Odzyskaj bazę danych MySQL z folderu danych bez ibdata1 z plików ibd
rozwiązanie 5: za pomocą
mysqlfrm
poleceniarozwiązanie 6: https://dba.stackexchange.com/a/159001
rozwiązanie 7: https://dba.stackexchange.com/a/144573
źródło
Chcę tylko dodać jeszcze jedną rzecz dla użytkowników Mac Caps El. Narzędzia MySQL nie są obsługiwane dla tej wersji, więc polecenie mysqlfrm nie jest pomocne. Odzyskałem struktury tabel za pomocą dbsake, jak pokazano w tym linku: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files-using-dbsake/
Wszystko, co musisz zrobić, to zainstalować dbsake:
następnie użyj polecenia frmdump i podaj ścieżkę do pliku .frm:
dostaniesz instrukcję create. Kiedy to zrobiłem, po prostu wykonałem kroki 2 do 5 wspomniane już przez @Ecd. Mam nadzieję, że to komuś pomoże.
źródło
Naprawdę doceniam Ecd. Co dla mnie zadziałało:
1.- Miałem kopię zapasową bazy kilka miesięcy temu, co pomogło mi podnieść tę kopię zapasową w xampp w Windows 10 i stworzyć tabele mające strukturę (konfiguracja: Windows 10, xampp-windows-x64-7.1.30- 5-VC14) plik konfiguracyjny mysql my.ini na końcu
2. - Po uruchomieniu starej bazy danych przystąpiłem do wykonania zmiany tabeli xxx odrzuć obszar tabel dla każdej tabeli w bazie danych, którą chciałem odzyskać, a następnie pliki .ibd folderu danych w C: / xampp / mysql / data / system został usunięty (w tym przypadku jest to ścieżka)
3.- Kontynuowałem kopiowanie plików .ibd z bazy danych, którą chciałem odzyskać do folderu xampp starej bazy danych
4. - Po skopiowaniu plików uruchom: zmień tabelę xxx importuj obszar tabel Dla każdej tabeli w bazie danych pojawi się ostrzeżenie, ale zignorujemy je, dane zostaną załadowane do tabeli i można je później wyeksportować.
5.- Wyeksportuj całą bazę danych do pliku sql i przystąp do budowania jej w produkcji i sukcesie!
Mam nadzieję, że pomoże to komuś, kto ma taką sytuację, pozdrawiam.
Angielski dostarczony przez Google
źródło
spróbuj uruchomić to z narzędziami mysql
polecenie / shell promt
źródło