Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak dodać bardzo duże zapytanie?
Forum PHP.pl > Forum > Bazy danych > MySQL
xPatryk
Witam !

Od jakiegoś czasu robię regularne kopie bazy danych zapisując je do plików .sql (zapytanie dodające strukture i dane).
niestety w tym moemencie jej rozmiar dochodzi do 450 mb, a serwer padł...

jak dodać tak dużą bazę do mysql'a?
jesli uzywam np. Navicat czy MySQL Client to zawsze mam "Out of Memory"...

chciłbym uniknąć dzielenia tego pliku na kilkadziesiąt mniejszych...

Pozdrawiam i proszę o pomoc
Patryk
spenalzo
Z linii komend.
kszychu
blink.gif A ja myślałem, że moje 13-sto megowe (przed spakowaniem) zrzuty są duże. Innej możliwości niż podał spenalzo raczej nie ma.
xPatryk
Witam,

z lini komend tzn z shella czy z mysql console ?

jakim poleceniem ?


Pozdrawiam
Patryk
Fixer
Kopie można wykonywać z wielu powodów. Najczęściej tworzy się kopie bezpieczeństwa, która pozwoli odtworzyć stan bazy z ostatniego dnia lub godziny. Ta czynność powinna być wykonywana tym częściej im ważniejsze dane przechowywane są w bazie.

Innym powodem może być chęć przeniesienia zawartości bazy danych pomiędzy różnymi systemami lub na inne serwery. Wtedy również wykonanie kopii tabel i baz jest konieczne aby nie wprowadzać wszystkich danych od nowa.

MySQL pozwala wykonywać kopie z wieloma parametrami, ale najczęściej wykorzystuje się tylko kilka z nich, które omówię na przykładach. Zobaczysz także jak odtworzyć kopię z naszego archiwum.

Tworzymy kopię

Aby wykonać kopię bazy należy uruchomić program mysqldump, który jest dołączony do dystrybucji MySQL. Tworzy on kopię bazy lub jej fragmentu w zwykłym pliku tekstowym. Składnia polecenia jest prosta:

Kod
mysqldump --all-databases -u root -ptajne45 >/kopie/wszystkie_bazy.txt


Przełącznik --all-databases informuje program, że robimy kopię wszystkich baz danych logując się jako użytkownik root (-u root) z hasłem "tajne45" podanym zaraz po przełącznikiem -p.

Po uruchomieniu polecenia zrzuci zawartość wszystkich baz do pliku. Taki "zrzut" w slangu komputerowym nazywany jest "dumpem". Jeżeli baz danych jest dużo proces może być bardzo czasochłonny.

W praktyce niezbyt często robi się kopię wszystkich baz. Zwykle wykonuje się kopię tylko konkretnej bazy. Aby w całości zachować jej strukturę i zawartość (rekordy) użyj przełącznika --all i podaj nazwę bazy danych:

Kod
mysqldump --all -u root -phaslo nazwa_bazy >/kopie/plik.txt


Przełącznik --all informuje program, że robimy kopię wszystkiego w wybranej bazie danych. W poleceniu podajemy nazwę bazy danych do skopiowania i miejsce docelowe, np. plik.txt w wybranym katalogu.

Oczywiście opcji i przełączników programu mysqldump jest sporo w zależności od zastosowań i potrzeb. Aby zrzucić tylko strukturę tabel w bazie, bez zawartości rekordów - możesz użyć przełącznika -d zamiast -all:

Kod
mysqldump -d -u root -phaslo nazwa_bazy >/kopie/plik.txt


W zasadzie te trzy polecenia stosuje się w praktyce najczęściej. Pierwsze do wykonania kopii wszystkich baz MySQL, drugie do kopiowania wybranych baz, a trzecie do kopiowania struktury wybranych baz danych.

Odtwarzamy kopie

Odtworzenie bazy danych nie jest skomplikowane. Wystarczy uruchomić klienta MySQL z przekierowaniem zawartości pliku do bazy danych:

Kod
mysql -u root -p < wszystkie_bazy.txt


Albo dla wybranej bazy:

Kod
mysql -u root -p baza < kopiabazy.txt


Warto znać te kilka poleceń aby szybko i sprawnie wykonać kopię bazy do pliku i odtworzyć bazę gdy będzie to konieczne.

Inny sposób to fizyczne przeniesienie plików z jednego komputera do inny. W katalogu z bazą danych znajduje się katalog data/ gdzie składowane są bazy (każdy katalog odpowiada nazwie bazy). Wewnątrz katalogów bazy znajdują się pliki z tabelami. Każda tabela składa się z trzech plików:

Kod
c:\mysql\data\baza1\tabela1.frm  - definicja tabeli
c:\mysql\data\baza1\tabela1.myi - indeks tabeli
c:\mysql\data\baza1\tabela1.myd - dane w tabeli


Wystarczy skopiować całą bazę lub wybrane tabele i wgrać do innego komputera, gdzie też zainstalowany jest MySQL.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.