MySQL: jak działa baza danych pod WordPressem i jak ją utrzymać w formie

MySQL – co to jest, jak działa i jak zarządzać bazą danych na hostingu

MySQL to najpopularniejszy system relacyjnych baz danych. Stoi pod WordPressem, WooCommerce, PrestaShopem, Drupalem, Joomlą i większością aplikacji webowych. Twój WordPress trzyma w MySQL praktycznie wszystko: wpisy, strony, komentarze, użytkowników, ustawienia, menu, metadane wtyczek. Każdą informację oprócz plików (obrazki, motywy i wtyczki siedzą w systemie plików). Kiedy MySQL nie odpowiada, strona przestaje istnieć z perspektywy odwiedzającego.

Czym jest MySQL i jak się go używa

MySQL (My Structured Query Language) to serwer bazy, który przechowuje dane w tabelach (jak arkusze Excela) powiązanych relacjami przez klucze obce. Komunikujesz się z bazą językiem SQL: wpisujesz polecenie, MySQL zwraca dane.

W kontekście WordPressa nie musisz znać SQL, żeby prowadzić stronę. WP załatwia komunikację z bazą za ciebie. Podstawy SQL przydają się jednak do diagnozy problemów (błąd „Error establishing a database connection”), migracji, optymalizacji (wolna strona to często wolne zapytania) i awaryjnej zmiany hasła admina.

MySQL vs MariaDB

MariaDB to fork MySQL stworzony przez oryginalnego autora (Monty’ego Wideniusa) po przejęciu MySQL przez Oracle w 2010. MariaDB jest w 99% kompatybilna z MySQL: te same polecenia, te same narzędzia (phpMyAdmin), te same sterowniki. W 2026 większość hostingów stoi na MariaDB, ale nazywa to nadal „MySQL” (klienci znają tę nazwę).

Różnice techniczne są: MariaDB ma lepszą wydajność w niektórych scenariuszach (Aria storage engine, thread pool) i jest w pełni open source na GPL bez zamkniętych komponentów Oracle. Dla użytkownika WordPressa: zero realnej różnicy.

Tabele WordPressa w bazie

WordPress tworzy 12 tabel z domyślnym prefixem wp_:

Tabela Co przechowuje
wp_posts Wpisy, strony, produkty WooCommerce, media, rewizje. Każdy „content” WP
wp_postmeta Metadane postów (custom fields, SEO, ceny produktów, ustawienia wtyczek per post)
wp_options Ustawienia WP i wtyczek (nazwa strony, URL, aktywne motywy, konfiguracja)
wp_users Użytkownicy (login, email, hasło zahashowane)
wp_usermeta Metadane użytkowników (rola, imię, preferencje)
wp_comments Komentarze
wp_commentmeta Metadane komentarzy
wp_terms Kategorie i tagi
wp_term_taxonomy Definicje taksonomii (która term jest kategorią, a która tagiem)
wp_term_relationships Relacje post ↔ term (który post jest w której kategorii)
wp_links Blogroll (przestarzałe, zwykle puste)
wp_termmeta Metadane kategorii i tagów

Wtyczki dorzucają własne tabele. WooCommerce dorzuca jakieś 15 (zamówienia, produkty, koszyki). Od wersji 8+ WooCommerce trzyma zamówienia w osobnych tabelach (HPOS) zamiast w wp_posts, co daje wyraźnie lepszą wydajność na sklepach z większą liczbą zamówień.

phpMyAdmin: graficzny interfejs

phpMyAdmin to webowa aplikacja do zarządzania MySQL. Otwierasz w przeglądarce, widzisz tabele, klikasz, edytujesz, importujesz, eksportujesz. Stoi domyślnie na każdym hostingu z cPanelem, DirectAdminem albo Pleskiem.

Otwieranie: panel hostingu, sekcja „Bazy danych”, „phpMyAdmin”, interfejs się otwiera z listą baz i tabel.

Typowe operacje.

Awaryjna zmiana hasła admina WordPress. Tabela wp_users, wiersz z loginem admina, edytuj kolumnę user_pass, funkcja MD5, nowe hasło. Klasyk, kiedy klient zapomni, a nie ma dostępu do skrzynki, na którą szła reset password.

Eksport bazy (backup). Klikasz bazę, zakładka „Eksport”, metoda „Szybka”, format SQL, „Eksportuj”. Dostajesz plik .sql z całą bazą. Idealne do backupu albo migracji.

Import. Zakładka „Import”, wybierasz plik .sql, „Importuj”. Przywraca bazę z backupu.

Zapytanie SQL. Zakładka „SQL”, wpisujesz polecenie, „Wykonaj”:

-- Znajdź użytkownika admina
SELECT * FROM wp_users WHERE user_login = 'admin';

-- Zmień URL strony po migracji
UPDATE wp_options SET option_value = 'https://nowadomena.pl' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://nowadomena.pl' WHERE option_name = 'home';

Optymalizacja: dlaczego strona zwalnia

WordPress z miesiąca na miesiąc zbiera w bazie śmieci. Rewizje wpisów (każdy zapis to nowa wersja), transienty (tymczasowe dane wtyczek, które wygasają, ale nie są usuwane), spam, komentarze w koszu, osierocone postmeta po skasowanych wtyczkach. Po dwóch latach blog ma 50 000+ zbędnych wierszy, a zapytania SQL trwają coraz dłużej. TTFB rośnie, strona się ślimaczy.

WP-Optimize (darmowa wtyczka) robi jednorazowe sprzątanie: usuwa rewizje (zostawia ostatnie 3), automatyczne szkice, wygasłe transienty, spam i komentarze z kosza, plus OPTIMIZE TABLE (defragmentacja). Ustawiasz auto-czyszczenie raz w tygodniu i zapominasz.

Limit rewizji. W wp-config.php: define('WP_POST_REVISIONS', 3);. Trzymane są maksymalnie 3 wersje per wpis zamiast nieskończenie wielu.

Redis Object Cache. Cache wyników zapytań SQL w pamięci RAM. WordPress nie pyta MySQL o te same dane wielokrotnie, baza dostaje wyraźnie mniej obciążenia, strona przyspiesza. Sam wpinam Redisa zawsze, kiedy klient ma więcej niż 50 odsłon dziennie i ruchu z kampanii.

Indeksy. Na bazach z 10 000+ postami brak indeksów na często wyszukiwanych kolumnach (meta_key, post_type, post_status) potrafi zabić wydajność. WP-Optimize dodaje brakujące indeksy. Dla bardziej zaawansowanych: SET GLOBAL slow_query_log = 'ON';, analiza, optymalizacja.

Tworzenie bazy MySQL na hostingu

Przy instalacji WordPressa autoinstalator tworzy bazę sam. Jeśli musisz ręcznie (np. druga strona na tym samym hostingu):

cPanel. MySQL Databases, „Create New Database”, nazwa, „Create”. Potem „Add New User”, login plus hasło, „Create User”. Potem „Add User to Database”, wybierasz bazę i użytkownika, „ALL PRIVILEGES”, „Make Changes”.

DirectAdmin. MySQL Management, Create New Database, nazwa, użytkownik, hasło, Create.

Do wp-config.php wpisujesz: DB_NAME (nazwa bazy), DB_USER, DB_PASSWORD, DB_HOST (na większości hostingów localhost, na niektórych np. mysql.serwer.pl).

MySQL na VPS-ie

Na VPS-ie instalujesz sam:

# Ubuntu / Debian
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation   # hasło root, usunięcie testowej bazy

# Albo MariaDB jako zamiennik
sudo apt install mariadb-server
sudo mysql_secure_installation

Zarządzanie: mysql -u root -p. Tworzenie bazy: CREATE DATABASE wordpress;. Użytkownik: CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'haslo';. Uprawnienia: GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';, FLUSH PRIVILEGES;.

Backup bazy

Z phpMyAdmin. Klikasz bazę, Eksport, SQL, pobierasz plik. Ręcznie, ale prosto.

Z terminala (VPS).

mysqldump -u root -p nazwa_bazy > backup-$(date +%Y-%m-%d).sql

Plik .sql ma kompletną bazę: strukturę plus dane. Importujesz go na dowolnym MySQL: mysql -u root -p nazwa_bazy < backup.sql.

Automatyczny backup. UpdraftPlus robi backup z poziomu WP, automatycznie, na Google Drive. Na VPS-ie cron: 0 3 * * * mysqldump -u root -pHASLO baza > /backups/db-$(date +\%Y-\%m-\%d).sql (backup co noc o 3:00).

Bezpieczeństwo MySQL

Silne hasło bazy. Nie password123. Menedżer haseł generuje losowe. Hasło siedzi w wp-config.php, więc ten plik chronisz dodatkowo (.htaccess, deny from all).

Unikalny prefix tabel. Domyślny wp_ jest znany każdemu atakującemu. Przy instalacji ustaw losowy (np. x7k_). To utrudnia automatyczne SQL injection, ale nie zastępuje porządnego zabezpieczenia, traktuj to jako warstwę dodatkową.

Minimalne uprawnienia. Użytkownik bazy WordPressa nie potrzebuje GRANT, FILE ani SUPER. Wystarczą SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP. Na shared zwykle nie da się tego granulować, na VPS-ie spokojnie ograniczasz.

Nie wystawiaj MySQL na internet. MySQL słucha na 3306. Na VPS-ie firewall: sudo ufw deny 3306. Baza powinna być dostępna tylko z localhosta (aplikacja na tym samym serwerze), nie z całego internetu. To jeden z błędów, na które łapie się wielu samodzielnych adminów na początku.

Najczęściej zadawane pytania

Czy muszę znać SQL, żeby używać WordPressa

Nie. WordPress obsługuje bazę pod spodem, ty pracujesz w panelu wp-admin. SQL przydaje się przy awaryjnej zmianie hasła, migracji, optymalizacji i debugowaniu. Do codziennego prowadzenia bloga albo sklepu zero SQL.

MySQL vs PostgreSQL

Pod WordPressa: MySQL/MariaDB. WordPress oficjalnie wspiera tylko te dwa. PostgreSQL bez specjalnych wtyczek nie zadziała. Pod Next.js, Django, Ruby on Rails: PostgreSQL często wygrywa (zaawansowane typy, JSONB, full-text search z definicji).

Jak sprawdzić rozmiar bazy

phpMyAdmin, klikasz bazę, na dole "Rozmiar". Albo SQL: SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.tables GROUP BY table_schema;. Typowy blog WP: 10-100 MB. WooCommerce z 10000 zamówień: 200-500 MB. Duży portal: 1+ GB.

Co robić, kiedy baza jest za duża

Sprzątasz: rewizje (WP-Optimize), transienty, spam, osierocone postmeta, stare logi wtyczek. Optymalizujesz tabele (OPTIMIZE TABLE). Na WooCommerce włączasz HPOS (High-Performance Order Storage), osobne tabele zamówień są lżejsze niż wp_posts. Baza powyżej 1 GB? Pomyśl o archiwizacji starych danych albo wydzieleniu serwera bazodanowego.

Czy mogę mieć kilka baz na jednym hostingu

Tak. Większość hostingów pozwala na kilka baz (limit 5-20 na shared, bez limitu na VPS). Każda strona WordPress potrzebuje osobnej bazy (albo przynajmniej osobnego prefixu tabel w jednej bazie, ale osobne bazy są czystsze i bezpieczniejsze).

Picture of Tomasz Zieliński
Tomasz Zieliński

Tomasz zajmuje się tematyką SEO, sztucznej inteligencji i automatyzacji pracy w marketingu internetowym. W swoich artykułach analizuje zmiany w algorytmach wyszukiwarek, rozwój narzędzi AI oraz nowe sposoby tworzenia i optymalizacji treści. Interesuje go przede wszystkim to, jak technologia wpływa na codzienną pracę specjalistów SEO, marketerów i twórców internetowych.

Facebook
Twitter
LinkedIn
Pinterest

Najnowsze Wpisy

Śledź nas