Import gigabajtowych baz danych MySQL/MariaDB: Jak obejść limity serwera?

Przenosisz stronę na nowy serwer i Twoja baza danych waży grubo ponad 1 GB? Jeśli tak, prawdopodobnie zdążyłeś już zauważyć, że standardowe narzędzia po prostu sobie z tym nie radzą. W tym artykule pokażę Ci sprawdzoną, inżynieryjną metodę na import potężnych baz MySQL i MariaDB – idealną podczas migracji ze zwykłego hostingu współdzielonego na serwer VPS, maszynę dedykowaną czy zaawansowaną chmurę.

Dlaczego phpMyAdmin „krztusi się” przy dużych bazach?

Przeniesienie samych plików strony internetowej jest zazwyczaj proste. Schody zaczynają się przy imporcie bazy danych. Narzędzia obsługiwane przez przeglądarkę (takie jak popularny phpMyAdmin) są napisane w języku PHP. Oznacza to, że podlegają one rygorystycznym limitom, narzuconym przez konfigurację serwera WWW – m.in. maksymalnemu czasowi wykonywania skryptu (max_execution_time), przydzielonej pamięci RAM (memory_limit) czy wreszcie rozmiarowi wgrywanego pliku (upload_max_filesize).

Na współdzielonych kontach hostingowych restrykcje te celowo chronią maszyny przed przeciążeniem. Efekt? Przy próbie wgrania pliku o rozmiarze 1 GB (lub nawet o połowę mniejszego), proces często urywa się w połowie, zwracając błąd typu timeout (przekroczenie czasu połączenia).

Rozwiązanie: Połączenie SSH (Dostęp do powłoki)

Najlepszą i najbardziej profesjonalną metodą na import ogromnych baz danych jest całkowite ominięcie przeglądarki i komunikacja bezpośrednio z systemem operacyjnym serwera.

Aby to zrobić, potrzebujesz dostępu do tzw. powłoki (SSH / Shell). Wykupując serwer VPS lub serwer dedykowany, dostęp ten otrzymujesz w standardzie (jako użytkownik root lub inny wyznaczony administrator). Jeśli wybierasz pakiet hostingowy, upewnij się przed zakupem, że usługodawca przewidział możliwość połączenia przez SSH.

Import ogromnej bazy krok po kroku

Zakładamy, że posiadasz już wyeksportowaną bazę danych (plik z rozszerzeniem .sql) na dysku swojego komputera.

Prześlij plik na serwer – Zamiast wgrywać plik przez przeglądarkę, użyj bezpiecznego klienta SFTP (np. WinSCP, FileZilla lub Cyberduck), aby umieścić plik .sql w wybranym katalogu na nowym serwerze.
(Wskazówka: Unikaj tradycyjnego połączenia FTP, które przesyła dane otwartym tekstem. Współczesnym, bezpiecznym standardem jest szyfrowane SFTP lub SCP).

Zaloguj się do serwera: Uruchom terminal (na Windowsie świetnie sprawdzi się systemowy PowerShell, wiersz polecenia cmd lub darmowy program PuTTY; na macOS i Linuxie użyj wbudowanej aplikacji Terminal) i połącz się ze swoim serwerem przez SSH.

Przejdź do katalogu z plikiem: Użyj polecenia cd, aby wejść do miejsca, w którym wgrałeś plik bazy, np.:

cd /sciezka/do/twojego/katalogu/

Wykonaj import (jedną komendą!): Zamiast logować się do interaktywnego panelu MySQL, jako profesjonalista użyj metody strumieniowej (tzw. „strzałki”). Wpisz poniższe polecenie:

$ mysql -u nazwa_uzytkownika -p nazwa_pustej_bazy < twoj_plik_z_baza.sql

(Podmień nazwa_uzytkownika na swój login do bazy, nazwa_pustej_bazy na nazwę bazy, do której chcesz wgrać dane, a twoj_plik_z_baza.sql na nazwę wgranego pliku).

Autoryzacja: System poprosi Cię o podanie hasła do bazy danych. Ważne: Ze względów bezpieczeństwa, podczas wpisywania hasła na ekranie nie pojawią się żadne znaki (nawet gwiazdki). To normalne – po prostu wpisz hasło „w ciemno” i wciśnij Enter.

Gdy terminal chwilę pomyśli i ponownie zwróci pusty znak zachęty (bez żadnych błędów), oznacza to, że proces zakończył się sukcesem!

Jak duże bazy można importować tą metodą?

Korzystając z linii poleceń, praktycznie nie ma żadnych limitów oprogramowania. Ponieważ omijamy interpreter PHP, jedynym ograniczeniem jest fizycznie wolna przestrzeń na dysku Twojego serwera. Możesz w ten sposób błyskawicznie importować struktury ważące dziesiątki, a nawet setki gigabajtów.

Co zrobić, jeśli wystąpi błąd?

Jeśli proces importu został przerwany (np. wyrzucając błąd „MySQL server has gone away”), najprawdopodobniej Twoja baza zawiera bardzo duże pakiety (np. zdjęcia zapisane bezpośrednio w kodzie bazy).

Rozwiązanie jest proste: w konfiguracji bazy danych na serwerze (najczęściej plik my.cnf) należy tymczasowo zwiększyć wartość parametru max_allowed_packet (np. na 256M). Jeśli posiadasz własnego VPS-a, zrobisz to sam; jeśli korzystasz z hostingu – poproś o to administratora.

Finał: Podpięcie bazy pod CMS

Baza zaimportowana. Ostatnim etapem jest uświadomienie Twojej stronie WWW, jak ma się do niej dostać. Podłączenie danych na nowym serwerze wygląda dokładnie tak samo, jak na starym. Otwórz główny plik konfiguracyjny (w przypadku WordPressa będzie to wp-config.php) i zaktualizuj wartości, przypisując nową nazwę bazy, użytkownika oraz hasło.

Artykuł pierwotnie opublikowany na stronie botset.pl dnia 21.09.2021 roku. Tekst został zaktualizowany i dopasowany do współczesnych standardów administracji serwerami.