Baza danych MySQL - phpMyAdmin, import i eksport

Baza danych MySQL na hostingu: jak utworzyć bazę w DirectAdmin, zrobić eksport i import w phpMyAdmin, przenieść duży plik i naprawić błędy importu.

Autor: McProdukt · Opublikowano:

Baza danych MySQL to zbiór tabel, w którym WordPress, sklep internetowy czy inny CMS przechowuje treści, ustawienia, konta klientów i zamówienia. Na hostingu tworzysz ją w panelu, strona łączy się z nią przez localhost, a kopię robisz eksportem w phpMyAdmin albo poleceniem mysqldump. Niżej: kroki, różnice MySQL i MariaDB oraz naprawa typowych błędów importu.

W skrócie:

  • Bazę tworzysz w DirectAdmin w sekcji „MySQL Management”, a panel dodaje do jej nazwy przedrostek nazwy konta.
  • Bazy do kilkudziesięciu MB wyeksportujesz i zaimportujesz w phpMyAdmin, a większe przeniesiesz poleceniami mysqldump i mysql, jeśli masz dostęp SSH.
  • MariaDB jest zgodna z MySQL, ale nie wszystkie porównania znaków są wspólne - błąd Unknown collation: 'utf8mb4_0900_ai_ci' naprawisz, zamieniając tę nazwę w kopii zrzutu na utf8mb4_unicode_ci.
  • Adresy w bazie WordPressa zmieniaj narzędziem obsługującym dane serializowane, a przed każdą zmianą zrób kopię bazy.

Co to jest baza danych MySQL i do czego służy na hostingu?

MySQL to serwer baz danych, który przechowuje dane w tabelach i odpowiada na zapytania w języku SQL. Na hostingu spotkasz cztery pojęcia:

  • Baza danych - zestaw tabel jednej aplikacji, np. jednej instalacji WordPressa.
  • Tabela - wiersze o tej samej budowie; w WordPressie wpisy trafiają do wp_posts, a ustawienia do wp_options.
  • Użytkownik bazy - login i hasło, którymi aplikacja łączy się z bazą (to nie login do panelu).
  • Uprawnienia - operacje, które użytkownik może wykonać w bazie: odczyt, zapis, zmiany tabel.

Pełna kopia strony to pliki (motyw, wtyczki, zdjęcia) i zrzut bazy, czyli plik .sql z poleceniami odtwarzającymi tabele i ich zawartość. Jakiej bazy wymaga WordPress, opisujemy we wpisie wymagania WordPressa - PHP, MySQL i hosting.

MySQL czy MariaDB - czym się różnią i czy to ma znaczenie?

Dla strony różnica jest zwykle niewidoczna: MariaDB powstała jako zgodny zamiennik MySQL, aplikacje PHP łączą się z nią tak samo, a kody błędów są wspólne. MariaDB tworzą pierwotni twórcy MySQL, a WordPress w zalecanych wymaganiach wymienia oba systemy.

CechaMySQLMariaDBZnaczenie dla Ciebie
Połączenie z aplikacji PHPmysqli, PDO MySQLte same rozszerzeniaprzy przeprowadzce zmieniasz tylko dane dostępowe
Kody błędównp. #1062 Duplicate entryte same numery i komunikatyporadniki do błędów MySQL pasują też do MariaDB
Porównania znaków (collation)w MySQL 8.0 domyślnie utf8mb4_0900_ai_ciwłasny zestaw, nie wszystkie porównania są wspólne z MySQLzrzut z MySQL 8.0 może zgłosić błąd #1273
Typ JSONzapis binarnyalias typu LONGTEXT, porównywany jak tekstoperatory JSON z MySQL mogą w zapytaniach nie działać
Programy w wierszu poleceńmysql, mysqldumpmariadb, mariadb-dump (stare nazwy nadal działają)polecenia z poradnika działają w obu

Na hostingu McProdukt działa serwer MariaDB, zgodny z MySQL. Strona z MySQL nie wymaga zmian w kodzie - sprawdź tylko porównania znaków w zrzucie.

Hosting bazy danych - co dostajesz w pakiecie?

Na hostingu współdzielonym baza danych jest częścią pakietu: nie kupujesz osobnego serwera, tylko tworzysz bazy w panelu w ramach limitu konta. W McProdukt dostajesz:

  • Serwer MariaDB - liczbę baz w poszczególnych pakietach podajemy w tabeli parametrów na stronie hostingu.
  • Połączenie lokalne - strona łączy się z bazą przez localhost, a zdalne połączenia z zewnątrz są domyślnie zamknięte ze względów bezpieczeństwa.
  • phpMyAdmin w panelu - phpMyAdmin to narzędzie w przeglądarce do zarządzania bazą MySQL/MariaDB: przeglądania tabel, zapytań SQL, eksportu i importu.
  • Automatyczne kopie i dyski NVMe - kopie obejmują pliki i bazy danych. Kiedy rodzaj dysku ma znaczenie dla bazy, wyjaśniamy w porównaniu hosting SSD czy NVMe.

Jak utworzyć bazę danych i użytkownika w DirectAdmin?

Bazę i użytkownika tworzysz jednym formularzem w sekcji „MySQL Management” panelu DirectAdmin.

  1. Zaloguj się do DirectAdmin, np. przyciskiem „Zaloguj” w Panelu Klienta McProdukt.
  2. Otwórz „MySQL Management” i kliknij „Create new Database”.
  3. Wpisz nazwę bazy. Panel doda przedrostek nazwy konta, więc z nazwy „sklep” powstanie np. konto_sklep.
  4. Ustaw silne hasło, najlepiej wygenerowane, i kliknij „Create”.
  5. Zapisz nazwę bazy, nazwę użytkownika i hasło. Panel tworzy bazę oraz użytkownika z uprawnieniami do niej.

W konfiguracji aplikacji podajesz cztery wartości: host localhost, nazwę bazy, użytkownika i hasło. W WordPressie to stałe DB_HOST, DB_NAME, DB_USER i DB_PASSWORD w pliku wp-config.php. Jeśli strona pokaże wtedy Error establishing a database connection, zajrzyj do poradnika błąd połączenia z bazą danych w WordPressie. Kroki opisujemy też w Pomocy: jak utworzyć bazę danych.

Jak zrobić eksport bazy danych w phpMyAdmin?

Eksport w phpMyAdmin tworzy plik .sql z kompletem tabel i danych - to najprostsza kopia bazy. Dokumentacja phpMyAdmin wskazuje format SQL jako ten, z którego odtwarza się bazę.

  1. W „MySQL Management” kliknij „phpMyAdmin” przy bazie. Jeśli pojawi się ekran logowania, podaj nazwę użytkownika bazy i jego hasło, a nie dane konta hostingowego.
  2. Wybierz bazę po lewej stronie i otwórz zakładkę „Eksport”.
  3. Wybierz metodę „Szybko” i format „SQL”, a potem kliknij „Wykonaj” - przeglądarka pobierze plik .sql.

Metoda „Dostosuj” pokazuje wszystkie opcje. Lista „Tabele” pozwala eksportować bazę w częściach, „Kompresja” gzip daje mniejszy plik .sql.gz, a opcja dodająca instrukcje DROP TABLE sprawi, że kopia nadpisze istniejące tabele. Opcję z instrukcjami CREATE DATABASE / USE zostaw odznaczoną, bo baza docelowa na hostingu ma zwykle inną nazwę. O kopiach całej strony piszemy we wpisie kopie zapasowe strony WWW - jak robić backup.

Jak zaimportować bazę danych przez phpMyAdmin?

Import wykonujesz w zakładce „Import” do wcześniej utworzonej, najlepiej pustej bazy. Jeśli baza ma już tabele, najpierw zrób jej eksport - import nadpisze albo zdubluje dane.

  1. Utwórz nową bazę albo opróżnij istniejącą po zrobieniu kopii („Struktura” → „Zaznacz wszystko” → „Usuń”).
  2. W phpMyAdmin kliknij bazę docelową po lewej stronie i otwórz zakładkę „Import”.
  3. W polu „Wyszukaj w komputerze” wskaż plik .sql lub .sql.gz. Obok pola widać maksymalny rozmiar pliku, a nad nim obsługiwane formaty kompresji.
  4. Sprawdź „Kodowanie znaków pliku” (dla współczesnych zrzutów utf-8) i w sekcji „Częściowy import” zaznacz przerwanie importu przy zbliżaniu się do limitu czasu PHP.
  5. Kliknij „Wykonaj” i poczekaj na komunikat „Import zakończony sukcesem”.

Częściowy import pozwala dokończyć duży import na raty: po przerwaniu phpMyAdmin poprosi o ponowne przesłanie tego samego pliku i wznowi pracę od miejsca przerwania. Program ostrzega, że ten tryb może przerwać transakcje, więc po imporcie sprawdź stronę. Szczegóły w Pomocy: import i eksport bazy danych oraz zarządzanie bazą przez phpMyAdmin.

Co zrobić, gdy plik bazy jest za duży dla phpMyAdmin?

Gdy plik przekracza limit phpMyAdmin albo import nie mieści się w limicie czasu, masz trzy wyjścia: kompresję, eksport w częściach albo wiersz poleceń. Praktyczna granica importu przez przeglądarkę to kilkadziesiąt MB, bo skrypt PHP ma ograniczony czas działania.

  • Kompresja - plik .sql.gz łatwiej zmieści się w limicie przesyłania, ale nie skróci wykonywania zapytań.
  • Eksport w częściach - w metodzie „Dostosuj” eksportujesz grupy tabel do osobnych plików i importujesz je po kolei.
  • Wiersz poleceń - jeśli masz dostęp SSH, użyj programów mysqldump i mysql, których nie ogranicza limit czasu skryptu PHP.

Eksport do skompresowanego pliku (przy -p bez wartości program sam zapyta o hasło, więc nie trafi ono do historii poleceń):

mysqldump -u konto_uzytkownik -p --single-transaction --default-character-set=utf8mb4 konto_sklep | gzip > kopia.sql.gz

Import do pustej bazy, z pliku zwykłego albo skompresowanego:

mysql -u konto_uzytkownik -p --default-character-set=utf8mb4 konto_sklep < kopia.sql
gunzip -c kopia.sql.gz | mysql -u konto_uzytkownik -p konto_sklep

Opcja --single-transaction tworzy spójną kopię tabel InnoDB bez blokowania strony. Zrzut jednej bazy, zrobiony bez opcji --databases, nie zawiera poleceń CREATE DATABASE i USE, więc wgrasz go do bazy o innej nazwie.

Jakie błędy pojawiają się przy imporcie bazy i jak je naprawić?

Większość błędów importu ma cztery źródła: polecenia odwołujące się do innej bazy, istniejące już tabele, nieznane porównania znaków oraz limity rozmiaru i czasu.

KomunikatPrzyczynaRozwiązanie
#1044 - Access denied for user ... to database ...Plik zawiera polecenia CREATE DATABASE i USE z nazwą bazy ze starego serwera.Usuń te wiersze z kopii pliku albo zrób eksport bez nich.
#1046 - No database selectedNie wskazano bazy, a plik nie zawiera polecenia USE.Kliknij bazę docelową w lewym panelu, a potem „Import”.
#1050 - Table '...' already existsW bazie są już tabele o tych nazwach, np. po świeżej instalacji WordPressa.Importuj do pustej bazy albo użyj zrzutu z opcją DROP TABLE.
#1062 - Duplicate entry '...' for key ...W tabelach są już wiersze o tych samych kluczach, zwykle po powtórzonym imporcie.Usuń tabele i zaimportuj cały plik ponownie.
#1273 - Unknown collation: 'utf8mb4_0900_ai_ci'Zrzut pochodzi z MySQL 8.0, a serwer docelowy nie zna tego porównania znaków.Zamień nazwę porównania w kopii pliku (instrukcja niżej).
#1153 - Got a packet bigger than 'max_allowed_packet' bytes albo MySQL server has gone awayPojedyncze zapytanie, zwykle długi INSERT, przekracza limit max_allowed_packet serwera albo połączenie zerwało się podczas długiego importu.Zrób zrzut z opcją --skip-extended-insert (jeden wiersz na polecenie) i importuj przez wiersz poleceń.
Nie otrzymano żadnych danych do importu... albo Limit czasu wykonania skryptu minął...Plik przekracza limit przesyłania albo import trwa dłużej niż limit czasu PHP.Przy limicie czasu prześlij ten sam plik ponownie, a przy dużym pliku użyj kompresji, eksportu w częściach lub wiersza poleceń.
Krzaki zamiast polskich liter, np. „Å‚” zamiast „ł”Plik zapisano albo odczytano w kodowaniu innym niż UTF-8.Wybierz kodowanie utf-8, eksportuj z opcją --default-character-set=utf8mb4 i nie zapisuj zrzutu w edytorze zmieniającym kodowanie.

Unknown collation utf8mb4_0900_ai_ci - jak to bezpiecznie naprawić?

Najbezpieczniej zamienić nazwę porównania w kopii zrzutu na utf8mb4_unicode_ci, które znają i MySQL, i MariaDB. Porównanie znaków (collation) to reguły, według których baza porównuje i sortuje teksty, np. czy „Kraków” i „kraków” to przy wyszukiwaniu to samo słowo. MySQL 8.0 domyślnie używa zestawu utf8mb4 z porównaniem utf8mb4_0900_ai_ci, więc ta nazwa trafia do poleceń CREATE TABLE w zrzucie. Starsze wydania MariaDB jej nie znają, a nowsze traktują ją jako alias - dlatego ten sam plik na jednym serwerze się wgra, a na innym nie.

  1. Oryginalny plik zostaw bez zmian, pracuj na kopii.
  2. W kopii zamień wszystkie wystąpienia utf8mb4_0900_ai_ci na utf8mb4_unicode_ci - w edytorze obsługującym duże pliki (z zapisem w UTF-8) albo poleceniem sed.
  3. Sprawdź, czy nie zostały inne nazwy z _0900_ (np. utf8mb4_0900_as_cs), i zamień je na porównania dostępne na serwerze docelowym.
  4. Zaimportuj kopię do pustej bazy i sprawdź wyszukiwarkę oraz sortowanie na stronie.
sed 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' kopia.sql > kopia-poprawiona.sql
grep -c '_0900_' kopia-poprawiona.sql

Polecenie sed zapisuje wynik do nowego pliku, więc oryginał zostaje nietknięty, a grep liczy wiersze z _0900_ - wynik 0 oznacza gotowy plik. Obie nazwy mają po 18 znaków, więc zamiana nie psuje danych serializowanych. Porównania nie są identyczne: utf8mb4_0900_ai_ci korzysta z nowszych reguł sortowania Unicode i inaczej traktuje spacje na końcu tekstu. Możesz też zmienić porównanie tabel na starym serwerze i powtórzyć eksport, ale nowy plik i tak sprawdź poleceniem grep.

Jak zmienić adres strony w bazie po imporcie?

Adresy w bazie WordPressa zmieniaj poleceniem wp search-replace albo wtyczką obsługującą dane serializowane, a nie zwykłym „znajdź i zamień” w pliku SQL. WordPress zapisuje część ustawień jako dane serializowane PHP, w których przy każdym tekście zapisana jest jego długość. Zamiana adresu na dłuższy lub krótszy psuje takie ustawienia. Według dokumentacji WP-CLI wp search-replace obsługuje dane serializowane i nie zmienia wartości kluczy głównych.

Jeśli masz dostęp SSH i WP-CLI, uruchom w katalogu domains/twojadomena.pl/public_html:

wp db export kopia-przed-zmiana.sql
wp search-replace 'https://stara-domena.pl' 'https://nowa-domena.pl' --dry-run
wp search-replace 'https://stara-domena.pl' 'https://nowa-domena.pl' --skip-columns=guid

Pierwsze polecenie robi kopię bazy, drugie (--dry-run) pokazuje raport bez zapisu, a trzecie zmienia adresy z pominięciem kolumny guid, której dokumentacja WordPressa każe nie zmieniać. Całą procedurę opisujemy we wpisie przeniesienie WordPressa na nową domenę, a więcej poleceń - w przewodniku WP-CLI w praktyce.

Jak zabezpieczyć bazę danych i jej kopie?

Bazę chronią głównie osobne dane dostępowe dla każdej aplikacji, brak dostępu z zewnątrz i aktualna kopia zapasowa.

  • Osobny użytkownik na aplikację - wyciek hasła jednej strony nie otwiera dostępu do pozostałych baz.
  • Hasło poza poleceniami - dokumentacja MySQL uznaje podawanie hasła w wierszu poleceń za niebezpieczne, więc używaj -p bez wartości.
  • Zrzuty poza public_html - plik .sql w katalogu strony da się pobrać przez przeglądarkę, jeśli ktoś pozna jego adres.
  • Kopia przed każdą zmianą - eksport przed aktualizacją, importem czy zamianą adresów pozwala szybko wrócić do poprzedniego stanu.

Hosting McProdukt robi też automatyczne kopie plików i baz danych (stan na październik 2026): w pakietach do 10 GB co 24 h (historia 30 dni), 20 i 50 GB co 12 h (45 dni), a od 100 GB co 6 h (60 dni). Kopię przywrócisz samodzielnie z panelu albo z naszą pomocą.

Przy przeprowadzce do McProdukt import bazy, razem z plikami i pocztą, robimy za Ciebie w ramach bezpłatnej migracji. Przebieg przeprowadzki opisujemy we wpisie migracja strony na nowy hosting bez przestoju. Dowolny pakiet przetestujesz też przez 14 dni za darmo, bez płatności (raz na konto).

Najczęściej zadawane pytania

Jak zaimportować bazę danych przez phpMyAdmin?

Utwórz pustą bazę, otwórz ją w phpMyAdmin, przejdź do zakładki „Import”, wskaż plik .sql lub .sql.gz i kliknij „Wykonaj”. Plik większy niż limit pokazany obok pola wyboru zaimportujesz poleceniem mysql.

Jak duży plik bazy można zaimportować w phpMyAdmin?

Limit phpMyAdmin pokazuje na ekranie „Import” obok pola wyboru pliku. W praktyce przez przeglądarkę zaimportujesz pliki do kilkudziesięciu MB, bo ogranicza ją limit czasu skryptu.

Jak zrobić kopię zapasową bazy danych MySQL?

Najprościej eksportem w phpMyAdmin: zakładka „Eksport”, metoda „Szybko”, format SQL. Dużą bazę zapiszesz poleceniem mysqldump z opcją --single-transaction, która tworzy spójną kopię tabel InnoDB.

Co oznacza błąd „Unknown collation: utf8mb4_0900_ai_ci”?

To zrzut z MySQL 8.0, którego domyślnego porównania znaków nie zna serwer docelowy, np. starsze wydanie MariaDB. W kopii pliku zamień utf8mb4_0900_ai_ci na utf8mb4_unicode_ci i zaimportuj ją do pustej bazy.

Czy MariaDB jest zgodna z MySQL?

Tak, w zakresie ważnym dla stron: aplikacje PHP łączą się z MariaDB tak samo jak z MySQL, a kody błędów są wspólne. Różnice dotyczą m.in. części porównań znaków i typu JSON.

Jaki host bazy danych wpisać w konfiguracji strony?

Na hostingu McProdukt wpisujesz localhost - baza jest dostępna tylko lokalnie, a połączenia z zewnątrz są domyślnie zamknięte ze względów bezpieczeństwa. W WordPressie to stała DB_HOST w pliku wp-config.php.

Powiązane poradniki

Wszystkie poradniki z kategorii: Hosting od podstaw

Powiązane usługi McProdukt

Zobacz również