Jak przywrócić jedną z moich baz danych MySQL z .myd
, .myi
, .frm
plików?
Jak przywrócić jedną z moich baz danych MySQL z .myd
, .myi
, .frm
plików?
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 odpowiednich GRANT
instrukcji w celu utworzenia użytkowników, udzielenia dostępu itp. (Przywracanie mysql
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]
check table sometable;
a następnie uruchomić naprawę (tylko w razie potrzeby): repair table sometable;
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.
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.
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.
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:
check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------------------------+
| yourdb.sometable | check | warning | Table is 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:
check table sometable;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
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 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
, .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ś do mysql\data
folderu, i kliknij Eksportuj na pasku nawigacyjnym. Wybiera eksport jako .sql
plik. Następnie pojawi się pytanie, gdzie zapisać plik
I 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ć
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.
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.
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.