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:
mysqldump i mysql, jeśli masz dostęp SSH.Unknown collation: 'utf8mb4_0900_ai_ci' naprawisz, zamieniając tę nazwę w kopii zrzutu na utf8mb4_unicode_ci.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:
wp_posts, a ustawienia do wp_options.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.
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.
| Cecha | MySQL | MariaDB | Znaczenie dla Ciebie |
|---|---|---|---|
| Połączenie z aplikacji PHP | mysqli, PDO MySQL | te same rozszerzenia | przy przeprowadzce zmieniasz tylko dane dostępowe |
| Kody błędów | np. #1062 Duplicate entry | te same numery i komunikaty | poradniki do błędów MySQL pasują też do MariaDB |
| Porównania znaków (collation) | w MySQL 8.0 domyślnie utf8mb4_0900_ai_ci | własny zestaw, nie wszystkie porównania są wspólne z MySQL | zrzut z MySQL 8.0 może zgłosić błąd #1273 |
| Typ JSON | zapis binarny | alias typu LONGTEXT, porównywany jak tekst | operatory JSON z MySQL mogą w zapytaniach nie działać |
| Programy w wierszu poleceń | mysql, mysqldump | mariadb, 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.
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:
localhost, a zdalne połączenia z zewnątrz są domyślnie zamknięte ze względów bezpieczeństwa.Bazę i użytkownika tworzysz jednym formularzem w sekcji „MySQL Management” panelu DirectAdmin.
konto_sklep.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.
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ę.
.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.
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.
.sql lub .sql.gz. Obok pola widać maksymalny rozmiar pliku, a nad nim obsługiwane formaty kompresji.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.
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.
.sql.gz łatwiej zmieści się w limicie przesyłania, ale nie skróci wykonywania zapytań.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.
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.
| Komunikat | Przyczyna | Rozwią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 selected | Nie wskazano bazy, a plik nie zawiera polecenia USE. | Kliknij bazę docelową w lewym panelu, a potem „Import”. |
#1050 - Table '...' already exists | W 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 away | Pojedyncze 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. |
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.
utf8mb4_0900_ai_ci na utf8mb4_unicode_ci - w edytorze obsługującym duże pliki (z zapisem w UTF-8) albo poleceniem sed._0900_ (np. utf8mb4_0900_as_cs), i zamień je na porównania dostępne na serwerze docelowym.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.
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.
Bazę chronią głównie osobne dane dostępowe dla każdej aplikacji, brak dostępu z zewnątrz i aktualna kopia zapasowa.
-p bez wartości..sql w katalogu strony da się pobrać przez przeglądarkę, jeśli ktoś pozna jego adres.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).
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.
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.
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.
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.
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.
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.
Wszystkie poradniki z kategorii: Hosting od podstaw