MySQL to najpopularniejszy system zarządzania relacyjnymi bazami danych na świecie – używa go WordPress, WooCommerce, PrestaShop, Drupal, Joomla i większość aplikacji webowych. Twoja strona WordPress przechowuje w MySQL wszystko: wpisy, strony, komentarze, użytkowników, ustawienia, menu, metadane wtyczek – dosłownie każda informacja oprócz plików (obrazki, motywy, wtyczki = system plików). Kiedy MySQL nie odpowiada – strona nie istnieje.
Spis treści
ToggleCzym jest MySQL i jak się go używa
MySQL (My Structured Query Language) to serwer bazy danych, który przechowuje dane w tabelach (jak arkusze Excel) powiązanych ze sobą relacjami (klucze obce). Komunikujesz się z MySQL językiem SQL – wpisujesz polecenie, MySQL zwraca dane.
W kontekście WordPress: nie musisz znać SQL żeby prowadzić stronę – WordPress komunikuje się z MySQL za Ciebie. Ale: znajomość podstaw SQL pomaga w diagnozie problemów (błąd bazy danych), migracji (przenoszenie WP), optymalizacji (wolna strona = wolne zapytania SQL) i awaryjnej zmianie hasła admina.
MySQL vs MariaDB – jaka różnica
MariaDB to fork MySQL stworzony przez oryginalnego twórcę MySQL (Michael „Monty” Widenius) po przejęciu MySQL przez Oracle w 2010. MariaDB jest w 99% kompatybilny z MySQL – te same polecenia SQL, te same narzędzia (phpMyAdmin), te same sterowniki. Większość hostingów w 2026 używa MariaDB zamiast MySQL – ale nazywa to nadal „MySQL” (bo użytkownicy znają tę nazwę).
Różnice techniczne: MariaDB ma lepszą wydajność w niektórych scenariuszach (Aria storage engine, thread pool), jest w pełni open source (GPL, bez zamkniętych komponentów Oracle). Dla użytkownika WordPress: zero różnicy – WordPress działa identycznie na obu.
Tabele WordPress w MySQL
WordPress tworzy 12 tabel w bazie MySQL (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/wtyczki, 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 ↔ termin (który post jest w której kategorii) |
wp_links |
Blogroll (przestarzałe, zwykle puste) |
wp_termmeta |
Metadane kategorii/tagów |
Wtyczki mogą dodawać własne tabele: WooCommerce dodaje ~15 tabel (zamówienia, produkty, koszyk). WooCommerce od wersji 8+ przechowuje zamówienia w osobnych tabelach (HPOS) zamiast w wp_posts – lepsza wydajność.
phpMyAdmin – graficzny interfejs do MySQL
phpMyAdmin to webowa aplikacja do zarządzania MySQL – otwierasz w przeglądarce, widzisz tabele, klikasz, edytujesz, importujesz/eksportujesz. Zainstalowany domyślnie na każdym hostingu z cPanel/DirectAdmin/Plesk.
Jak otworzyć: panel hostingu → sekcja „Bazy danych” → „phpMyAdmin” → otwiera się interfejs z listą baz i tabel.
Typowe operacje w phpMyAdmin:
Zmiana hasła admina WordPress – tabela wp_users → wiersz z loginem admina → edytuj user_pass → funkcja MD5 → nowe hasło.
Eksport bazy (backup) – kliknij bazę → zakładka „Eksport” → metoda „Szybka” → format SQL → „Eksportuj”. Dostajesz plik .sql z całą bazą. Przydatne do: backupu, migracji.
Import bazy – zakładka „Import” → wybierz plik .sql → „Importuj”. Przywraca bazę z backupu.
Uruchomienie zapytania SQL – zakładka „SQL” → wpisz polecenie → „Wykonaj”. Np.:
-- 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 MySQL – dlaczego strona jest wolna
WordPress z każdym miesiącem zbiera w bazie śmieci: rewizje wpisów (każdy zapis = nowa wersja), transienty (tymczasowe dane wtyczek, które wygasają ale nie są usuwane), spam, komentarze w koszu, osierocone postmeta (dane po usuniętych wtyczkach). Na blogu działającym 2 lata: 50 000+ zbędnych wierszy w bazie.
Efekt: zapytania SQL trwają dłużej → TTFB rośnie → strona wolna. Rozwiązanie:
WP-Optimize (darmowa wtyczka) → jednorazowe czyszczenie: usuń rewizje (zostaw ostatnie 3), usuń automatyczne szkice, usuń wygasłe transienty, usuń spam i komentarze z kosza, OPTIMIZE TABLE (defragmentacja tabel). Ustaw automatyczne czyszczenie co tydzień.
Ogranicz rewizje: w wp-config.php: define('WP_POST_REVISIONS', 3); – WordPress trzyma max 3 wersje per wpis zamiast nieskończonej liczby.
Redis Object Cache – cache’uje wyniki zapytań SQL w pamięci RAM. WordPress nie odpytuje MySQL o te same dane wielokrotnie → dramatyczny spadek obciążenia bazy → szybsza strona.
Indeksy – na dużych bazach (10 000+ postów) brak indeksów na kolumnach wyszukiwanych (meta_key, post_type, post_status) spowalnia zapytania. WP-Optimize i inne narzędzia potrafią dodać brakujące indeksy. Zaawansowane: analiza slow query log (SET GLOBAL slow_query_log = 'ON';) → identyfikacja wolnych zapytań → optymalizacja indeksów.
Tworzenie bazy MySQL na hostingu
Przy instalacji WordPressa (autoinstalator) baza tworzy się automatycznie. Jeśli potrzebujesz ręcznie (np. druga strona na tym samym hostingu):
cPanel: MySQL Databases → „Create New Database” → wpisz nazwę → „Create”. Potem: „Add New User” → login + hasło → „Create User”. Potem: „Add User to Database” → wybierz bazę i użytkownika → „ALL PRIVILEGES” → „Make Changes”.
DirectAdmin: MySQL Management → Create New Database → nazwa, użytkownik, hasło → Create.
Dane do wp-config.php: DB_NAME = nazwa bazy, DB_USER = użytkownik, DB_PASSWORD = hasło, DB_HOST = localhost (na większości hostingów; niektóre: mysql.serwer.pl).
MySQL na VPS – instalacja i zarządzanie
Na VPS (w odróżnieniu od shared hostingu) musisz zainstalować MySQL sam:
# Ubuntu / Debian
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation # ustaw hasło root, usuń testową bazę
# Lub MariaDB (zamiennik)
sudo apt install mariadb-server
sudo mysql_secure_installation
Zarządzanie: mysql -u root -p → CLI MySQL. Tworzenie bazy: CREATE DATABASE wordpress; → tworzenie użytkownika: CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'haslo'; → uprawnienia: GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; → FLUSH PRIVILEGES;
Backup bazy MySQL
Z phpMyAdmin: kliknij bazę → Eksport → SQL → pobierz plik. Ręcznie, ale łatwo.
Z terminala (VPS):
mysqldump -u root -p nazwa_bazy > backup-$(date +%Y-%m-%d).sql
Plik .sql zawiera kompletną bazę – struktura + dane. Można go zaimportować na dowolnym innym serwerze MySQL: mysql -u root -p nazwa_bazy < backup.sql.
Automatyczny backup: UpdraftPlus robi backup bazy WordPress automatycznie (co dzień/tydzień → Google Drive). Na VPS: cron job: 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 do użytkownika bazy – nie password123. Menedżer haseł generuje losowe hasła. Hasło jest w wp-config.php – chroń ten plik (.htaccess deny from all).
Unique prefix – domyślny prefix tabel WP: wp_. Atakujący zna strukturę (wp_users, wp_options). Zmień na losowy przy instalacji (np. x7k_) – utrudnia SQL injection (ale nie zastępuje prawidłowego zabezpieczenia!).
Minimalne uprawnienia – użytkownik bazy WordPress nie potrzebuje GRANT, FILE, SUPER. Wystarczą: SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP. Na shared hostingu: zwykle ustawiasz „All Privileges" (bo nie masz granulowanej kontroli). Na VPS: ogranicz.
Nie wystawiaj MySQL na internet. MySQL domyślnie słucha na porcie 3306. Na VPS: upewnij się, że firewall blokuje port 3306 z zewnątrz (sudo ufw deny 3306). MySQL powinien być dostępny tylko z localhost (aplikacja na tym samym serwerze) – nie z całego internetu.
Najczęściej zadawane pytania
Czy muszę znać SQL żeby używać WordPress?
Nie – WordPress obsługuje bazę danych „pod spodem", Ty pracujesz w panelu (wp-admin). SQL przydaje się do: awaryjnej zmiany hasła, migracji, optymalizacji, debugowania. Dla codziennego prowadzenia bloga/sklepu: zero SQL potrzebne.
MySQL vs PostgreSQL – co wybrać?
Dla WordPress: MySQL/MariaDB – WordPress oficjalnie wspiera tylko MySQL/MariaDB. PostgreSQL nie jest kompatybilny z WordPress (bez specjalnych pluginów). Dla Next.js, Django, Ruby on Rails: PostgreSQL jest często lepszym wyborem (zaawansowane typy danych, JSONB, full-text search). Porównanie: rodzaje baz danych.
Jak sprawdzić rozmiar bazy MySQL?
phpMyAdmin → kliknij bazę → na dole: „Rozmiar" (Size). Lub 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 WordPress: 10–100 MB. Sklep WooCommerce z 10 000 zamówień: 200–500 MB. Duży portal: 1+ GB.
Co robić gdy baza MySQL jest zbyt duża?
Wyczyść: rewizje (WP-Optimize), transienty, spam, osierocone postmeta, stare logi wtyczek. Zoptymalizuj tabele (OPTIMIZE TABLE). Jeśli WooCommerce: włącz HPOS (High-Performance Order Storage) – osobne tabele zamówień, lżejsze niż wp_posts. Jeśli baza >1 GB: rozważ archiwizację starych danych lub migrację na dedykowany serwer bazy.
Czy mogę mieć kilka baz MySQL na jednym hostingu?
Tak – większość hostingów pozwala na wiele baz (zwykle limit: 5–20 na shared, bez limitu na VPS). Każda strona WordPress potrzebuje osobnej bazy (lub przynajmniej osobnego prefixu tabel w tej samej bazie – ale osobna baza jest czystsza).






