Czy mogę skopiować bazę danych MySQL, kopiując pliki? Co dokładnie zawierają pliki?


13

Korzystam z bazy danych MySQL i maszyny z systemem Ubuntu Linux.

Moja baza danych o nazwie db_test, zauważam, że w ramach ścieżki /var/lib/mysql/db_testistnieją pliki sufiks z .frm, .MYD, .MYIjak następuje:

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

Wydaje się .frm, że .MYD, .MYIgrupa plików odwzorowana z jedną tabelą w bazie danych.

Mam dwa następujące pytania:

  1. Co dokładnie robią trzy pliki?

  2. Jeśli utworzę nowy katalog pod ścieżką, /var/lib/mysql/powiedzmy db_test_2i skopiuję każdy plik z db_test_1katalogu do db_test_2, czy utworzy on również nową bazę danych, db_test_2która ma dokładnie taką samą zawartość (tabele) jak db_test_1?

Czy ta fizycznie przesuwająca się operacja na plikach bazy danych daje taki sam wynik jak następujące akcje w wierszu poleceń:

  1. dump bazy db_test_1out

  2. utwórz nową bazę danych db_test_2

  3. następnie zrzucić db_test_1bazę danych z powrotem do nowej bazy danych db_test_2?

Jeśli tak, wydaje się, że przenoszenie plików jest znacznie szybsze niż przy mysqldumpkopiowaniu baz danych (lub importowaniu danych z jednego DB do innego DB w MySQL). Jakieś opinie na ten temat?

Odpowiedzi:


5
  1. AFAIR, .frm to plik opisu (w którym opisano strukturę tabeli bazy danych), .MYD to plik z danymi, .MYI to plik z indeksami.

  2. Tak, kopiowanie będzie znacznie szybsze. Ale jest jeden problem: nie jest atomowy. Przy dużym obciążeniu skopiowane pliki będą niespójne, a może nawet w ogóle uszkodzone. Zwłaszcza jeśli używasz jakiegoś bardziej „inteligentnego” silnika, takiego jak InnoDB.

Edycja: ps Możesz bezpiecznie skopiować te pliki, ale zanim powinieneś zatrzymać serwer mysql.


4

Masz narzędzie cmd-line, które robi dokładnie to: mysqlhotcopy

Działa dobrze tabele wy myisam, ale nie z tabelami InnoDb.

Jeśli skonfigurowałeś swój serwer za pomocą lvm i umieściłeś / var / lib / mysql na dedykowanym woluminie, oto sposób, w jaki zalecam tworzenie kopii zapasowych bardzo szybko i bez blokowania wszystkich baz danych:

mysql -U root -p
  > flush tables with read lock;

Spowoduje to opróżnienie wszystkich tabel na dysk i zablokuje wszelkie operacje r / w

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

Musi być dostosowany do konfiguracji, tworzy to migawkę systemu plików bazy danych. To nie zajmuje czasu

  > unlock tables;

Dokonuje się tego, operacja R / W zostaje wznowiona.

Teraz możesz zamontować / dev / vg_myserver / lvMysql_snap i utworzyć archiwum tar swojej bazy danych!


Wydaje się, że to szybki sposób na wykonanie kopii zapasowej bazy danych. Ale co z ponownym włączeniem tej migawki, aby ponownie stała się moją bazą danych na żywo? To jest część, o którą naprawdę się martwię. Mogę mysqldumpdbać w mniej niż 2 sekundy. Przywrócenie go jest powolne, zajmuje 5-10 minut.
Buttle Butkus

w ostatnich dystrybucjach migawki lvm można przywrócić do źródła, ale prawdopodobnie nie jest to potrzebne do zarządzania kopiami zapasowymi bazy danych.
Olivier S

Odnośnie mysqlhotcopy: „To narzędzie jest przestarzałe w MySQL 5.6.20 i usunięte w MySQL 5.7” Od: [ dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html]
zeusstl

0

Będzie to działać dla MyISAM, ale nie dla InnoDB. Zobacz https://serverfault.com/a/367321/57569

Z tej odpowiedzi na temat InnoDB:

Jeśli zastanawiasz się nad skopiowaniem pliku .frm i .ibd, czeka Cię świat cierpienia. Skopiowanie pliku .frm i .ibd tabeli InnoDB jest dobre 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.