Jak przywrócić jedną z moich baz danych MySQL z .myd, .myi, .frmplików?
Jak przywrócić jedną z moich baz danych MySQL z .myd, .myi, .frmplikó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 ( 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]
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 = 4poziomu (nie jestem pewien, czy w tym przypadku był potrzebny). Dzięki Bogu!
ibdata1to 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 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.
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 .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.
C:\XAMPP) i do podkatalogu mysql\data. Pełna ścieżka powinna byćC:\XAMPP\mysql\dataWewną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.
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.