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.
Spis treści
ToggleCzym 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).






