Chociaż odpowiedziałem na to, to naprawdę należy do Serverfault.
derobert
31
@chandrajeet powinieneś naprawdę zaakceptować najczęściej głosowaną odpowiedź.
Wieża
2
Hej, Chandrajeet, dlaczego nie akceptujesz odpowiedzi Deroberta? Potwierdzam, że to też działa dla mnie. Czy to nie dla ciebie? stackoverflow.com/help/someone-answers
Taz
Odpowiedzi:
173
Jeśli są to tabele MyISAM, umieszczenie plików .FRM, .MYD i .MYI w katalogu bazy danych (np. /var/lib/mysql/dbname) Spowoduje udostępnienie tej tabeli. Nie musi to być ta sama baza danych, z której pochodzą, ten sam serwer, ta sama wersja MySQL lub ta sama architektura. Może być również konieczna zmiana właściciela folderu (np. chown -R mysql:mysql /var/lib/mysql/dbname)
Pamiętaj, że uprawnienia ( GRANTitp.) Są częścią mysqlbazy danych. Więc nie zostaną przywrócone wraz ze stołami; może być konieczne uruchomienie odpowiednich GRANTinstrukcji w celu utworzenia użytkowników, udzielenia dostępu itp. (Przywracanie mysqlbazy danych jest możliwe, ale należy zachować ostrożność w przypadku wersji MySQL i wszelkich potrzebnych uruchomień mysql_upgradenarzędzia).
W rzeczywistości prawdopodobnie potrzebujesz tylko .FRM (struktura tabeli) i .MYD (dane tabeli), ale będziesz musiał naprawić tabelę, aby odbudować .MYI (indeksy).
Jedynym ograniczeniem jest to, że w przypadku obniżenia wersji najlepiej sprawdzić informacje o wersji (i prawdopodobnie uruchomić tabelę napraw). Nowsze wersje MySQL oczywiście dodają funkcje.
[Chociaż powinno być oczywiste, że mieszając i dopasowując tabele, problemem jest integralność relacji między tymi tabelami; MySQL nie będzie się tym przejmować, ale Twoja aplikacja i użytkownicy mogą. Ponadto ta metoda w ogóle nie działa w przypadku tabel InnoDB. Tylko MyISAM, ale biorąc pod uwagę posiadane pliki, masz MyISAM]
Czy to naprawdę zadziałałoby bez dodania odpowiednich wpisów do tabeli information_schema? Mam na myśli, że MySQL musi wiedzieć, aby szukać tych plików, prawda?
Wow, czułem się brudny, ale upuszczenie całego katalogu z instalacji MySQL4 na MySQL5.1 po prostu magicznie odtworzyło tabele. Bez restartu lub czegokolwiek (w systemie Windows).
Dave
4
Działa, musisz tylko pamiętać, aby uruchomić (dla każdej tabeli): check table sometable; a następnie uruchomić naprawę (tylko w razie potrzeby): repair table sometable;
Nux
3
To działało świetnie! Umieściłem pliki na miejscu, ale mysql ich nie „widział”, dopóki nie zmieniłem właściciela na „mysql: mysql”.
sean.boyer
26
Pamiętaj, że jeśli chcesz odbudować plik MYI, prawidłowe użycie TABELI NAPRAW jest następujące:
NAPRAWA TABELI czasem USE_FRM;
W przeciwnym razie prawdopodobnie pojawi się kolejny błąd.
Wykonał te kroki (po tym, jak wszystko inne zawiodło) i użył innodb_force_recovery = 4poziomu (nie jestem pewien, czy w tym przypadku był potrzebny). Dzięki Bogu!
Joshua Stewardson,
6
FYI: ibdata1to InnoDB, nie MyISAM.
derobert
14
Jedną rzecz do zapamiętania:
Plik .FRM ma strukturę tabeli i jest specyficzny dla twojej wersji MySQL.
Plik .MYD NIE jest specyficzny dla wersji, a przynajmniej nie dla mniejszych wersji.
Plik .MYI jest specyficzny, ale można go pominąć i zregenerować, REPAIR TABLEtak jak mówią inne odpowiedzi.
Celem tej odpowiedzi jest poinformowanie, że jeśli masz zrzut schematu swoich tabel, możesz go użyć do wygenerowania struktury tabeli, a następnie zastąpić te pliki .MYD kopiami zapasowymi, usunąć pliki MYI i naprawić je wszystko. W ten sposób możesz przywrócić kopie zapasowe do innej wersji MySQL lub całkowicie przenieść bazę danych bez użycia mysqldump. Uważam to za bardzo pomocne przy przenoszeniu dużych baz danych.
Skopiuj wszystkie pliki .myd, .myi, .frm do mysql \ data \ abc, gdzie mysql \ data \ to miejsce, w którym przechowywane są pliki .myd, .myi, .frm dla wszystkich baz danych.
Następnie przejdź do phpMyadmin, przejdź do db abc i znajdziesz swoją bazę danych.
Najlepszy sposób na odzyskanie danych ... Zainstalowałem WAMP, a następnie utworzyłem nową bazę danych, skopiowałem pliki do nowego katalogu bazy danych C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase otwórz phpmyadmin i twoja nowa baza danych, będziesz zobacz dane
Alexandre George
7
Myślę, że .myi można naprawić od wewnątrz mysql.
Jeśli widzisz tego rodzaju komunikaty o błędach z MySQL: Baza danych nie wykonała zapytania (zapytania) 1016: Nie można otworzyć pliku: „ableable.MYI ”. (errno: 145) Błąd Msg: 1034: Niepoprawny plik klucza dla tabeli: „able ”. Spróbuj to naprawić, a prawdopodobnie masz uszkodzony lub uszkodzony stół.
Możesz sprawdzić i naprawić tabelę za pomocą monitu mysql w następujący sposób:
checktable sometable;+------------------+-------+----------+----------------------------+|Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------------------------+ | yourdb.sometable |check| warning |Tableis marked as crashed || yourdb.sometable |check| status | OK |+------------------+-------+----------+----------------------------+
repair table sometable;+------------------+--------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+--------+----------+----------+ | yourdb.sometable | repair | status | OK |+------------------+--------+----------+----------+
a teraz twój stół powinien być w porządku:
checktable sometable;+------------------+-------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------+ | yourdb.sometable |check| status | OK |+------------------+-------+----------+----------+
Znalazłem rozwiązanie do konwersji plików do .sqlpliku (możesz następnie zaimportować .sqlplik na serwer i odzyskać bazę danych), bez potrzeby dostępu do /varkatalogu, dlatego nie musisz być administratorem serwera, aby to zrobić.
Wymaga XAMPP lub MAMP zainstalowanych na twoim komputerze.
Po zainstalowaniu XAMPP przejdź do katalogu instalacyjnego (zwykle C:\XAMPP) i do podkatalogu mysql\data. Pełna ścieżka powinna byćC:\XAMPP\mysql\data
Wewnątrz zobaczysz foldery innych utworzonych przez ciebie baz danych. Kopiuj i Wklej folder pełen .myd, .myii .frmpliki do tam. Ścieżka do tego folderu powinna być
C:\XAMPP\mysql\data\foldername\.mydfiles
Następnie odwiedź localhost/phpmyadminw przeglądarce. Wybierz bazę danych, którą właśnie wkleiłeś do mysql\datafolderu, i kliknij Eksportuj na pasku nawigacyjnym. Wybiera eksport jako .sqlplik. Następnie pojawi się pytanie, gdzie zapisać plik
I to jest to! Powinieneś (aś) teraz mieć .sqlplik zawierający bazę danych, która była pierwotnie .myd, .myii .frmpliki. Następnie możesz zaimportować go na inny serwer przez phpMyAdmin, tworząc nową bazę danych i naciskając „Importuj” na pasku nawigacyjnym, a następnie postępując zgodnie z instrukcjami, aby go zaimportować
Możesz skopiować pliki do odpowiednio nazwanego katalogu podkatalogowego folderu danych, o ile jest to DOKŁADNA ta sama wersja mySQL i zachowałeś wszystkie powiązane pliki w tym katalogu. Jeśli nie masz wszystkich plików, jestem pewien, że będziesz mieć problemy.
Powyższy opis nie był wystarczający, aby wszystko działało dla mnie (prawdopodobnie gęste lub leniwe), więc stworzyłem ten skrypt, gdy znalazłem odpowiedź, która pomoże mi w przyszłości. Mam nadzieję, że pomaga innym
vim fixperms.sh
#!/bin/sh
for D in`find .-type d`
do
echo $D;
chown -R mysql:mysql $D;
chmod -R 660$D;
chown mysql:mysql $D;
chmod 700$D;
done
echo Dont forget to restart mysql:/etc/init.d/mysqld restart;
Dla tych, którzy mają Windows XP i zainstalowany serwer MySQL 5.5 - bazą danych jest C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, chyba że zmieniłeś lokalizację w instalacji MySql Workbench GUI.
Odpowiedzi:
Jeśli są to tabele MyISAM, umieszczenie plików .FRM, .MYD i .MYI w katalogu bazy danych (np.
/var/lib/mysql/dbname
) Spowoduje udostępnienie tej tabeli. Nie musi to być ta sama baza danych, z której pochodzą, ten sam serwer, ta sama wersja MySQL lub ta sama architektura. Może być również konieczna zmiana właściciela folderu (np.chown -R mysql:mysql /var/lib/mysql/dbname
)Pamiętaj, że uprawnienia (
GRANT
itp.) Są częściąmysql
bazy danych. Więc nie zostaną przywrócone wraz ze stołami; może być konieczne uruchomienie odpowiednichGRANT
instrukcji w celu utworzenia użytkowników, udzielenia dostępu itp. (Przywracaniemysql
bazy danych jest możliwe, ale należy zachować ostrożność w przypadku wersji MySQL i wszelkich potrzebnych uruchomieńmysql_upgrade
narzędzia).W rzeczywistości prawdopodobnie potrzebujesz tylko .FRM (struktura tabeli) i .MYD (dane tabeli), ale będziesz musiał naprawić tabelę, aby odbudować .MYI (indeksy).
Jedynym ograniczeniem jest to, że w przypadku obniżenia wersji najlepiej sprawdzić informacje o wersji (i prawdopodobnie uruchomić tabelę napraw). Nowsze wersje MySQL oczywiście dodają funkcje.
[Chociaż powinno być oczywiste, że mieszając i dopasowując tabele, problemem jest integralność relacji między tymi tabelami; MySQL nie będzie się tym przejmować, ale Twoja aplikacja i użytkownicy mogą. Ponadto ta metoda w ogóle nie działa w przypadku tabel InnoDB. Tylko MyISAM, ale biorąc pod uwagę posiadane pliki, masz MyISAM]
źródło
check table sometable;
a następnie uruchomić naprawę (tylko w razie potrzeby):repair table sometable;
Pamiętaj, że jeśli chcesz odbudować plik MYI, prawidłowe użycie TABELI NAPRAW jest następujące:
NAPRAWA TABELI czasem USE_FRM;
W przeciwnym razie prawdopodobnie pojawi się kolejny błąd.
źródło
Właśnie odkryłem rozwiązanie tego problemu. Używam MySQL 5.1 lub 5.6 w systemie Windows 7.
Nie ma potrzeby lokalizowania plików .MYI i .MYD dla tego odzyskiwania.
źródło
innodb_force_recovery = 4
poziomu (nie jestem pewien, czy w tym przypadku był potrzebny). Dzięki Bogu!ibdata1
to InnoDB, nie MyISAM.Jedną rzecz do zapamiętania:
Plik .FRM ma strukturę tabeli i jest specyficzny dla twojej wersji MySQL.
Plik .MYD NIE jest specyficzny dla wersji, a przynajmniej nie dla mniejszych wersji.
Plik .MYI jest specyficzny, ale można go pominąć i zregenerować,
REPAIR TABLE
tak jak mówią inne odpowiedzi.Celem tej odpowiedzi jest poinformowanie, że jeśli masz zrzut schematu swoich tabel, możesz go użyć do wygenerowania struktury tabeli, a następnie zastąpić te pliki .MYD kopiami zapasowymi, usunąć pliki MYI i naprawić je wszystko. W ten sposób możesz przywrócić kopie zapasowe do innej wersji MySQL lub całkowicie przenieść bazę danych bez użycia
mysqldump
. Uważam to za bardzo pomocne przy przenoszeniu dużych baz danych.źródło
Prosty! Utwórz obojętną bazę danych (powiedz abc)
Skopiuj wszystkie pliki .myd, .myi, .frm do mysql \ data \ abc, gdzie mysql \ data \ to miejsce, w którym przechowywane są pliki .myd, .myi, .frm dla wszystkich baz danych.
Następnie przejdź do phpMyadmin, przejdź do db abc i znajdziesz swoją bazę danych.
źródło
Myślę, że .myi można naprawić od wewnątrz mysql.
Jeśli widzisz tego rodzaju komunikaty o błędach z MySQL: Baza danych nie wykonała zapytania (zapytania) 1016: Nie można otworzyć pliku: „ableable.MYI ”. (errno: 145) Błąd Msg: 1034: Niepoprawny plik klucza dla tabeli: „able ”. Spróbuj to naprawić, a prawdopodobnie masz uszkodzony lub uszkodzony stół.
Możesz sprawdzić i naprawić tabelę za pomocą monitu mysql w następujący sposób:
a teraz twój stół powinien być w porządku:
źródło
Znalazłem rozwiązanie do konwersji plików do
.sql
pliku (możesz następnie zaimportować.sql
plik na serwer i odzyskać bazę danych), bez potrzeby dostępu do/var
katalogu, dlatego nie musisz być administratorem serwera, aby to zrobić.Wymaga XAMPP lub MAMP zainstalowanych na twoim komputerze.
C:\XAMPP
) i do podkatalogumysql\data
. Pełna ścieżka powinna byćC:\XAMPP\mysql\data
Wewnątrz zobaczysz foldery innych utworzonych przez ciebie baz danych. Kopiuj i Wklej folder pełen
.myd
,.myi
i.frm
pliki do tam. Ścieżka do tego folderu powinna byćC:\XAMPP\mysql\data\foldername\.mydfiles
Następnie odwiedź
localhost/phpmyadmin
w przeglądarce. Wybierz bazę danych, którą właśnie wkleiłeś domysql\data
folderu, i kliknij Eksportuj na pasku nawigacyjnym. Wybiera eksport jako.sql
plik. Następnie pojawi się pytanie, gdzie zapisać plikI to jest to! Powinieneś (aś) teraz mieć
.sql
plik zawierający bazę danych, która była pierwotnie.myd
,.myi
i.frm
pliki. Następnie możesz zaimportować go na inny serwer przez phpMyAdmin, tworząc nową bazę danych i naciskając „Importuj” na pasku nawigacyjnym, a następnie postępując zgodnie z instrukcjami, aby go zaimportowaćźródło
Możesz skopiować pliki do odpowiednio nazwanego katalogu podkatalogowego folderu danych, o ile jest to DOKŁADNA ta sama wersja mySQL i zachowałeś wszystkie powiązane pliki w tym katalogu. Jeśli nie masz wszystkich plików, jestem pewien, że będziesz mieć problemy.
źródło
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Mówi się, aby zmienić nazwę plików ib_ *. Zrobiłem to i to zwróciło mi db.
źródło
Powyższy opis nie był wystarczający, aby wszystko działało dla mnie (prawdopodobnie gęste lub leniwe), więc stworzyłem ten skrypt, gdy znalazłem odpowiedź, która pomoże mi w przyszłości. Mam nadzieję, że pomaga innym
źródło
Dla tych, którzy mają Windows XP i zainstalowany serwer MySQL 5.5 - bazą danych jest C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, chyba że zmieniłeś lokalizację w instalacji MySql Workbench GUI.
źródło