Przywracanie bazy danych MySQL z plików fizycznych

139

Czy można przywrócić bazę danych MySQL z fizycznych plików bazy danych? Mam katalog zawierający następujące typy plików:

client.frm
client.MYD
client.MYI

ale na około 20 kolejnych stolików.

Zwykle używam mysqldump lub podobnego narzędzia, aby uzyskać wszystko w 1 pliku SQL, więc jaki jest sposób radzenia sobie z tego typu plikami?

Abdullah Jibaly
źródło
Mam ten sam problem: wiele plików z rozszerzeniami FRM, MYD i MYI. Mam też pliki ib_logfile0, ib_logfile1 i ibdata1. Nie mogę uzyskać dostępu do działającego serwera lub utworzyć zrzutu. Próbowałem uruchomić nowy serwer MySQL i użyć plików, ale nie udało mi się ... Czy ktoś ma jasne instrukcje?
flo5783

Odpowiedzi:

132

Tabela MySQL MyISAM to połączenie trzech plików:

  • Plik FRM jest definicją tabeli.
  • Plik MYD to miejsce, w którym przechowywane są rzeczywiste dane.
  • Plik MYI to miejsce, w którym przechowywane są indeksy utworzone w tabeli.

Powinieneś być w stanie przywrócić, kopiując je do folderu bazy danych (w systemie Linux domyślna lokalizacja to /var/lib/mysql/)

Powinieneś to zrobić, gdy serwer nie działa.

Vincent
źródło
64
dotyczy to tylko tabel MyISAM. InnoDB przechowuje swoje tabele i indeksy w pojedynczym obszarze tabel *, który domyślnie składa się z 3 plików ibdata1, ib_logfile0 i ib_logfile1. do przywrócenia bazy danych potrzebne są również te pliki. * obszary tabel dla poszczególnych tabel są możliwe, ale nie domyślnie
ax.
21
Mówi, że ma pliki .frm .myi i .myd. Wtedy założyłem, że to tabele MyISAM.
Vincent
5
Cenna odpowiedź, ale musiałem pójść o krok dalej, aby wszystko działało poprawnie: ponieważ musiałem zalogować się jako root, aby przywrócić pliki, mysqlużytkownik uruchamiający mysqldproces nie mógł uzyskać do nich dostępu. Wykonanie a chmod -R mysql:mysql .w katalogu danych mysql jest szybkie i łatwe, ale zastanowienie się wcześniej, dlaczego wszystkie moje bazy danych resoterd wydawały się nie mieć tabel, zajęło trochę więcej czasu.
Edurne Pascual
10
herenvardo Myślę, że miałeś na myśli chown, a nie chmod
Oliver M. Grech
2
Podsumowując niektóre ważne notatki, być może będziesz musiał chownskopiować skopiowane pliki, takie jak:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr
50

Z odpowiedzi @Vicent, już przywracam bazę danych MySQL, jak poniżej:

Krok 1. Zamknij serwer MySQL

Krok 2. Skopiuj bazę danych do folderu bazy danych (w Linuksie domyślna lokalizacja to / var / lib / mysql). Zachowaj tę samą nazwę bazy danych i tę samą nazwę bazy danych w trybie mysql.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Krok 3: Zmień własny i zmień tryb folderu:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Krok 4: Skopiuj ibdata1 do folderu bazy danych

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Krok 5: skopiuj pliki ib_logfile0 i ib_logfile1 do folderu bazy danych.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Pamiętaj, aby zmienić własne i zmienić katalog główny tych plików:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

lub

sudo chown -R mysql:mysql /var/lib/mysql

Krok 6 (opcjonalnie): Moja witryna ma konfigurację do przechowywania plików w określonej lokalizacji, a następnie dokładnie kopiuję je do odpowiedniej lokalizacji.

Krok 7: Uruchom serwer MySQL. Wszystko wraca i cieszy się tym.

To jest to.

Zobacz więcej informacji na: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/

biolinh
źródło
4
+1, aby uzyskać szczegółowe instrukcje krok po kroku. Ale zredagowałem kilka stwierdzeń, aby naprawdę odzwierciedlały to, jakie powinny być.
Peter
Wystąpił błąd # 1932, nie można uzyskać dostępu do danych. Pojawiają się bazy danych, ale dane nie są dostępne. Uruchamianie XAMPP 7.2.12 na MAC OS X Mojave.
Steve1754a
@ Steve1754a błąd może z wielu powodów 1. Czy przenosisz bazę danych z Mac OS do Mac OS? 2. Proszę sprawdzić uprawnienia do tych plików / danych / tabeli
biolinh
Odpowiedzi: 1. Tak; 2. Zrobiłem. Musiałem przeprowadzić całkowitą przebudowę mojego DB. Nie udało się znaleźć rozwiązania. Morał do tej historii: zawsze twórz kopię zapasową bazy danych. Chciałbym, żeby w XAMPP był łatwy sposób na zrobienie tego automatycznie.
Steve1754a
1
uratowałeś mi życie
SpongePablo
8

Jeśli przywracasz folder, nie zapomnij zmienić plików na mysql: mysql, w

chown -R mysql:mysql /var/lib/mysql-data

przeciwnym razie pojawią się błędy podczas próby usunięcia bazy danych lub dodania nowej kolumny itp.

i zrestartuj MySQL

service mysql restart
Joel Davey
źródło
2
tak naprawdę nie jest to odpowiedź na pytanie, ale było bardzo pomocne.
ryantuck
w rzeczywistości nie powinieneś chować wszystkiego do mysql, folder bazy danych mysql powinien zachować grupę główną
Galvani
8

Mam ten sam problem, ale nie udało mi się pomyślnie odzyskać bazy danych w oparciu o powyższe instrukcje.

Udało mi się odzyskać foldery bazy danych mysql tylko z mojego systemu operacyjnego Ubuntu. Mój problem polega na tym, jak odzyskać moją bazę danych za pomocą tych nieczytelnych folderów danych mysql. Wróciłem więc do systemu operacyjnego win7 w środowisku programistycznym.

* UWAGA Mam istniejący serwer bazy danych działający w systemie win7 i potrzebuję tylko kilku plików bazy danych do odzyskania z odzyskanych plików. Aby pomyślnie odzyskać pliki bazy danych z systemu Ubuntu, muszę świeżo zainstalować serwer bazy danych mysql (ta sama wersja z systemu Ubuntu w moim systemie operacyjnym win7), aby odzyskać wszystko ze starego serwera bazy danych.

  1. Stwórz kolejny nowy serwer bazy danych mysql w tej samej wersji z odzyskanych plików.

  2. Zatrzymaj serwer mysql

  3. skopiuj odzyskany folder i wklej do (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) baza danych mysql jest przechowywana.

  4. skopiuj plik ibdata1 znajdujący się w folderze instalacyjnym linux mysql i wklej go do (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Po prostu nadpisz istniejącą lub wykonaj kopię zapasową przed wymianą.

  5. uruchom serwer mysql i sprawdź, czy udało Ci się odzyskać pliki bazy danych.

  6. Aby skorzystać z odzyskanej bazy danych na moim aktualnie używanym serwerze mysql, po prostu wyeksportuj odzyskaną bazę danych i zaimportuj ją do mojego istniejącego serwera mysql.

Mam nadzieję, że to pomoże, ponieważ nic innego nie działało dla mnie.

Ivan Igniter
źródło
1
działa również na ubuntu / debian z plikami ibdata1, ib_logfile0 i ib_logfile1 oraz folderem bazy danych. użytkownik nie zostanie skopiowany, ale wtedy możesz dodać nowego użytkownika do bazy danych i zrzucić go z tym.
bokorben
2

Z MySql 5.1 (Win7). Aby odtworzyć DB (InnoDbs), podmieniłem całą zawartość następujących katalogów (parametry my.ini):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Następnie uruchomiłem usługę MySql i wszystko działa dobrze.

sergey.olifirenko
źródło
1

Tak to jest! Po prostu dodaj je do folderu bazy danych (w zależności od systemu operacyjnego) i uruchom polecenie, takie jak „Uprawnienia do naprawy MySQL”. Spowoduje to ponowne zapisanie bazy danych. Zobacz też, że odpowiednie uprawnienia są ustawione również dla plików.

Filip Ekberg
źródło
Zrobiłem to, ale nie rozpoznaje tabel. Jak powiedziałem w komentarzu do poprzedniej odpowiedzi.
orezvani
0

Kiedyś skopiowałem te pliki do folderu przechowywania bazy danych dla działającej bazy danych mysql, uruchomiłem bazę danych i czekałem, aż „naprawi” pliki, a następnie rozpakowałem je za pomocą mysqldump.

Spikolynn
źródło
-1

W moim przypadku po prostu usunięcie tc.log w / var / lib / mysql wystarczyło, aby ponownie uruchomić mariadb / mysql.

SirJohnFranklin
źródło
nie jest to kwestia możliwości uruchomienia / ponownego uruchomienia serwera mysql.
Oluwatumbi