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

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.

Czym 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).

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