MariaDB to serwer bazy danych zgodny z MySQL. Używają go strony WWW, serwery gier, boty Discord i pluginy. Pokażemy dwa sposoby instalacji, a potem zabezpieczenie, zarządzanie bazami i użytkownikami, bezpieczny dostęp z komputera i kopie zapasowe.
Czego potrzebujesz
- VPS w StormHost z Ubuntu 24.04 lub Debianem 13
- Do kroków ręcznych połączenie SSH jako root (poradnik)
- Około 25 minut
Jak to działa#
MariaDB działa na VPS jako usługa mariadb i domyślnie przyjmuje połączenia tylko z samego VPS (adres 127.0.0.1, port 3306 i lokalny socket). Aplikacje na tym samym VPS mogą się łączyć, nikt z internetu nie dosięgnie bazy. Zostaw to tak, dopóki naprawdę nie potrzebujesz dostępu z zewnątrz.
Wersja zależy od systemu: Ubuntu 24.04 instaluje MariaDB 10.11, Debian 13 instaluje MariaDB 11.8. Dla niczego w tym poradniku różnica nie ma znaczenia.
Zarówno na Ubuntu, jak i na Debianie użytkownik bazy root uwierzytelnia się przez unix socket: do bazy jako root może wejść tylko ktoś zalogowany na VPS jako systemowy root. Nie ma hasła do zgadnięcia, bo żadnego nie ma.
Opcja A: zakładka Baza danych w strefie klienta#
Najszybszy sposób, bez wiersza poleceń.
- W strefie klienta otwórz Moje usługi, kliknij swój VPS i przejdź do zakładki Baza danych.
- Jeśli na VPS nie działa żadna baza danych, zobaczysz „Na tym VPS nie działa jeszcze żaden serwer bazy danych”. Kliknij Zainstaluj MariaDB. Instalacja przebiega w tle i trwa zwykle 1–3 minuty; strona odświeża się sama.
- Kliknij Połącz automatycznie. Strefa klienta łączy się z bazą bezpiecznym połączeniem do wnętrza VPS, więc baza nie musi być dostępna z internetu.
- Masz teraz te podzakładki:
| Podzakładka | Co tam zrobisz |
|---|---|
| Bazy danych | Utworzysz (Nowa baza danych) lub usuniesz bazę. Opcja „Utwórz też użytkownika o tej samej nazwie z pełnym dostępem” od razu tworzy użytkownika z hasłem. |
| Użytkownicy | Utworzysz użytkownika, dasz mu dostęp do bazy, wygenerujesz nowe hasło lub go usuniesz. |
| Przeglądarka | Przejrzysz tabele i ich wiersze. |
| SQL | Wykonasz dowolne zapytanie SQL (Ctrl+Enter). Pokazywanych jest najwyżej pierwszych 500 wierszy wyniku. Zapytania usuwające dane trzeba potwierdzić. |
Ważne szczegóły:
- Nazwa bazy danych może zawierać tylko litery bez znaków diakrytycznych, cyfry i podkreślenia i nie może zaczynać się od cyfry.
- Bazy są tworzone z kodowaniem
utf8mb4(obsługuje cały Unicode, łącznie z emoji). - Po utworzeniu użytkownika hasło jest pokazywane tylko raz („Zapisz te dane — hasła nie zobaczysz ponownie”). Zapisz je w menedżerze haseł.
- Opcja Zezwól na połączenia zdalne tworzy użytkownika, który może łączyć się skądkolwiek (host
%). Aby to działało, MariaDB musi nasłuchiwać na adresie publicznym (bind-address), a port musi być dozwolony w firewallu. Kroki są niżej w sekcji Bezpośredni dostęp z zewnątrz. Jeśli nie potrzebujesz połączeń zdalnych, zostaw tę opcję niezaznaczoną.
Konto serwisowe strefy klienta
Przy automatycznym połączeniu tworzymy w MariaDB konto stormhost_panel z pełnymi uprawnieniami, które może logować się tylko z samego VPS. Strefa klienta zarządza przez nie Twoimi bazami. Na liście użytkowników jest oznaczone jako systemowe. Nie usuwaj go, inaczej zakładka Baza danych nie połączy się z bazą. Bazę możesz odłączyć od strefy klienta przyciskiem Odłącz; bazy na VPS pozostają nietknięte.
Reszta tego poradnika opisuje to samo z wiersza poleceń. Przydaje się, gdy chcesz pełnej kontroli nad bazą albo potrzebujesz rzeczy, których zakładka nie robi (kopie zapasowe, strojenie, tunel SSH).
Opcja B: instalacja ręczna#
Działa zarówno na Ubuntu 24.04, jak i na Debianie 13:
apt update
apt -y install mariadb-serverapt update– wczytuje aktualną listę pakietów.apt -y install mariadb-server– instaluje serwer bazy danych i klientamariadb. Usługa startuje sama po instalacji i jest włączona przy uruchomieniu VPS.
Sprawdź, czy działa:
systemctl status mariadb
mariadb --versionZobaczysz Active: active (running) i numer wersji (10.11 na Ubuntu, 11.8 na Debianie). Wyjście systemctl zamknij klawiszem q.
Zabezpieczenie: mariadb-secure-installation#
Skrypt mariadb-secure-installation usuwa testowe pozostałości, które nie mają miejsca w produkcji. Uruchom go:
mariadb-secure-installationOdpowiadaj według tabeli:
| Pytanie | Odpowiedź | Dlaczego |
|---|---|---|
Enter current password for root (enter for none): | Enter | Root loguje się przez unix socket i nie ma hasła. Skrypt wypisuje OK, successfully used password, moving on... |
Switch to unix_socket authentication [Y/n] | n | Root już używa unix socketu. Skrypt sam to mówi: „You already have your root account protected, so you can safely answer 'n'.” |
Change the root password? [Y/n] | n | Root nie potrzebuje hasła; zalogować się może tylko systemowy root. Jeśli jakiś program wyraźnie wymaga hasła roota, utwórz dla niego osobnego użytkownika. |
Remove anonymous users? [Y/n] | Y | Użytkownik anonimowy pozwalałby logować się bez nazwy. |
Disallow root login remotely? [Y/n] | Y | Root może logować się tylko z VPS, nie przez sieć. |
Remove test database and access to it? [Y/n] | Y | Usuwa bazę test, do której każdy ma dostęp. |
Reload privilege tables now? [Y/n] | Y | Zmiany zaczynają działać natychmiast. |
Na końcu zobaczysz All done!.
Logowanie do konsoli MariaDB#
Jako root na VPS:
mariadbPojawi się znak zachęty MariaDB [(none)]>. Polecenia SQL kończą się średnikiem ;. Konsolę opuścisz przez exit.
Jako inny użytkownik bazy:
mariadb -u <USER> -p-u <USER>– nazwa użytkownika bazy danych.-p– pyta o hasło (nie wyświetla się podczas wpisywania).
Jako zwykły użytkownik z sudo
Jeśli jesteś zalogowany jako zwykły użytkownik z sudo, a nie root, uruchom sudo mariadb. Polecenie mariadb -u root -p kończy się Access denied, bo root nie loguje się hasłem.
Baza danych i użytkownik dla aplikacji#
Każda aplikacja powinna mieć własną bazę danych i własnego użytkownika z uprawnieniami tylko do tej bazy. Jeśli ktoś przejmie aplikację, dostanie się tylko do jej danych.
Poniższe wykonaj w konsoli MariaDB (mariadb). Zamiast <SILNE_HASLO> wstaw hasło z generatora haseł (tylko litery i cyfry, co najmniej 24 znaki):
CREATE DATABASE aplikace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'aplikace'@'localhost' IDENTIFIED BY '<SILNE_HASLO>';
GRANT ALL PRIVILEGES ON aplikace.* TO 'aplikace'@'localhost';
SHOW GRANTS FOR 'aplikace'@'localhost';| Polecenie | Co robi |
|---|---|
CREATE DATABASE aplikace | Tworzy bazę danych aplikace. |
CHARACTER SET utf8mb4 | Kodowanie dla całego Unicode (znaki diakrytyczne, emoji). Starsze utf8 w MariaDB obsługuje tylko znaki 3-bajtowe i nie przechowa emoji. |
COLLATE utf8mb4_unicode_ci | Zasady sortowania i porównywania tekstu; ci = bez rozróżniania wielkości liter. |
CREATE USER 'aplikace'@'localhost' | Użytkownik aplikace, który może łączyć się tylko z VPS. |
IDENTIFIED BY '…' | Hasło użytkownika. |
GRANT ALL PRIVILEGES ON aplikace.* | Wszystkie uprawnienia, ale tylko do bazy aplikace (.* = wszystkie tabele). |
SHOW GRANTS FOR … | Pokazuje, jakie uprawnienia ma użytkownik (kontrola). |
Uprawnienia nadawaj według potrzeb aplikacji:
| Uprawnienia | Na co pozwalają | Kiedy nadać |
|---|---|---|
ALL PRIVILEGES ON db.* | Wszystko w jednej bazie, łącznie ze zmianami schematu. | Typowa aplikacja tworząca własne tabele (WordPress, pluginy, boty). |
SELECT, INSERT, UPDATE, DELETE ON db.* | Tylko odczyt i zapis danych, bez zmian tabel. | Aplikacja z gotowym schematem; konto raportowe. |
SELECT ON db.* | Tylko odczyt. | Statystyki, eksporty, podglądy. |
ALL PRIVILEGES ON *.* | Wszystko na całym serwerze. | Tylko administratorzy, nigdy aplikacja. |
WITH GRANT OPTION | Może nadawać uprawnienia innym. | Tylko narzędzia, które same tworzą bazy i użytkowników (na przykład panel gier na własnym VPS). |
Inne przydatne polecenia:
SHOW DATABASES;
SELECT User, Host FROM mysql.user;
ALTER USER 'aplikace'@'localhost' IDENTIFIED BY '<NOWE_HASLO>';
REVOKE ALL PRIVILEGES ON aplikace.* FROM 'aplikace'@'localhost';
DROP USER 'aplikace'@'localhost';SHOW DATABASES;– wypisuje bazy danych.SELECT User, Host FROM mysql.user;– wypisuje użytkowników i hosty, z których mogą się łączyć.ALTER USER … IDENTIFIED BY– zmienia hasło.REVOKE …– odbiera uprawnienia.DROP USER …– usuwa użytkownika (baza zostaje).
Usunięcie bazy danych jest nieodwracalne
DROP DATABASE aplikace; usuwa bazę ze wszystkimi tabelami i danymi bez ponownego pytania. Przed usunięciem zrób kopię zapasową (zobacz Kopie zapasowe bazy danych).
Host użytkownika: skąd może się łączyć#
Użytkownik MariaDB to nie tylko nazwa, ale para nazwa + host. 'jan'@'localhost' i 'jan'@'%' to dwaj różni użytkownicy, każdy z własnym hasłem i uprawnieniami.
| Host | Skąd użytkownik może się łączyć | Typowe użycie |
|---|---|---|
localhost | Z VPS przez socket lub TCP do 127.0.0.1 | Aplikacja na tym samym VPS. Zalecane domyślne. |
127.0.0.1 | Z VPS przez TCP | Aplikacje łączące się wyłącznie z 127.0.0.1. |
198.51.100.25 | Tylko z tego adresu IP | Twój komputer lub inny serwer ze statycznym IP. |
172.18.0.% | Z całego zakresu (symbol %) | Kontenery Dockera na tym samym VPS. |
% | Skądkolwiek | Tylko gdy nie ma innej drogi, i zawsze z firewallem. |
Dostęp z Twojego komputera#
Chcesz zajrzeć do bazy programem takim jak HeidiSQL lub DBeaver? Masz dwie opcje. Zalecamy tunel SSH: baza pozostaje niedostępna z internetu, a połączenie jest szyfrowane.
Tunel SSH (zalecane)#
Tunel SSH przekazuje port na Twoim komputerze przez szyfrowane połączenie SSH do portu bazy danych na VPS.
Na komputerze otwórz terminal (Windows Terminal, PowerShell, Terminal macOS) i uruchom:
bash ssh -L 3307:127.0.0.1:3306 -N [email protected]ssh– łączy się z VPS przez SSH.-L 3307:127.0.0.1:3306– port3307na Twoim komputerze jest przekazywany na adres127.0.0.1, port3306widziany z VPS (czyli do MariaDB). Port 3307 jest użyty, aby nie kolidował z bazą, którą możesz mieć uruchomioną na komputerze.-N– nie wykonuj na VPS żadnego polecenia, tylko trzymaj tunel otwarty.[email protected]– użytkownik i adres IP Twojego VPS (z zakładki Sieć).
Po zalogowaniu terminal nic nie wypisuje i wydaje się „wisieć”. To poprawne: tunel działa, dopóki nie zamkniesz okna albo nie naciśniesz Ctrl+C.
W programie bazodanowym połącz się z Host
127.0.0.1, Port3307, użytkownikiem bazy i hasłem (na przykładaplikace).
HeidiSQL i DBeaver potrafią też same utworzyć tunel. W HeidiSQL wybierz typ sieci MariaDB/MySQL przez tunel SSH (… (SSH tunnel)), na zakładce tunelu SSH wpisz adres IP VPS, port 22, użytkownika i hasło lub klucz SSH, a w ustawieniach głównych ustaw 127.0.0.1 jako host bazy. W DBeaver dodaj SSH w ustawieniach połączenia (przycisk plus, opcja SSH) i zaznacz Use SSH Tunnel.
Bezpośredni dostęp z zewnątrz#
Używaj tylko wtedy, gdy z bazą musi łączyć się inny serwer albo program, który nie obsługuje tuneli. Zawsze ogranicz dostęp do konkretnego adresu IP.
Pozwól MariaDB nasłuchiwać w sieci. Utwórz plik
nano /etc/z tą zawartością:mysql/ mariadb. conf. d/ 60-remote-access. cnf /etc/ mysql/ inimariadb.conf.d/ 60-remote-access.cnf [mysqld] bind-address = 0.0.0.0[mysqld]– grupa opcji serwera bazy danych.bind-address = 0.0.0.0– nasłuchuj na wszystkich adresach IPv4 VPS (nadpisuje domyślne127.0.0.1z50-server.cnf, bo pliki są czytane alfabetycznie i wygrywa późniejszy).
Zrestartuj MariaDB i sprawdź, gdzie nasłuchuje:
bash systemctl restart mariadb ss -tlnp | grep 3306Zobaczysz
0.0.0.0:3306.Utwórz użytkownika z adresem IP, z którego będziesz się łączyć (na przykład Twoje publiczne IP
198.51.100.25):SQL CREATE USER 'jan'@'198.51.100.25' IDENTIFIED BY '<SILNE_HASLO>'; GRANT ALL PRIVILEGES ON aplikace.* TO 'jan'@'198.51.100.25';Zezwól na port
3306tylko z tego adresu IP w firewallu strefy klienta (poradnik): reguła Przychodzący · Zezwól · TCP · port3306· IP / zakres źródłowy198.51.100.25. Jeśli używasz trybu Zezwól na wszystko, dodaj pod nią także regułę: Przychodzący · Drop · TCP · port3306bez IP źródłowego. Reguły są oceniane od góry i wygrywa pierwsze dopasowanie, więc Twoje IP przechodzi, a wszyscy inni nie.Jeśli używasz UFW, zezwól na port także tam:
bash ufw allow from 198.51.100.25 to any port 3306 proto tcpallow from 198.51.100.25– tylko z Twojego adresu IP.to any port 3306 proto tcp– na port TCP 3306.
Dynamiczny adres IP
Łącza domowe często zmieniają adres IP. Po zmianie nie połączysz się i będziesz musiał zaktualizować reguły. Dlatego do łączenia z domu lepszym wyborem jest tunel SSH.
Kopie zapasowe bazy danych#
Program mariadb-dump zapisuje bazę do pliku SQL, z którego możesz ją w dowolnej chwili przywrócić.
Kopia jednej bazy:
mariadb-dump --single-transaction --routines --events aplikace > /root/aplikace-$(date +%F).sql--single-transaction– robi spójną kopię tabel InnoDB bez blokowania, więc aplikacja może działać dalej.--routines– dołącza procedury i funkcje składowane (bez tej flagi nie są archiwizowane).--events– dołącza zaplanowane zdarzenia (również inaczej pomijane). Triggery są archiwizowane automatycznie.aplikace– nazwa bazy danych.> /root/aplikace-$(date +%F).sql– zapisuje wyjście do pliku z dzisiejszą datą w nazwie.
Kopia wszystkich baz naraz, skompresowana:
mariadb-dump --single-transaction --routines --events --all-databases | gzip > /root/vsechny-db-$(date +%F).sql.gz--all-databases– wszystkie bazy, łącznie z poleceniami do ich utworzenia.| gzip >– kompresuje wyjście; SQL zwykle kurczy się do ułamka rozmiaru.
Przywracanie:
mariadb aplikace < /root/aplikace-2026-10-01.sql
gunzip < /root/vsechny-db-2026-10-01.sql.gz | mariadb- Pierwsza linia wczytuje kopię jednej bazy do istniejącej bazy
aplikace(jeśli nie istnieje, najpierw utwórz ją przezCREATE DATABASE). - Druga przywraca kopię wszystkich baz; bazy tworzy sama.
Przywracanie nadpisuje
Przywrócenie z kopii zapasowej nadpisuje tabele zawarte w kopii ich stanem z kopii. Nowsze dane w nich przepadają. Jeśli nie masz pewności, najpierw przywróć kopię do nowej bazy (na przykład aplikace_test) i porównaj.
Automatyczne nocne kopie zapasowe i wysyłanie ich poza VPS opisuje artykuł Kopie zapasowe na VPS.
Podstawy strojenia wydajności#
Najważniejsze ustawienie wydajności to innodb_buffer_pool_size: ile RAM MariaDB może użyć jako cache danych i indeksów. Domyślnie 128 MB.
[mysqld]
innodb_buffer_pool_size = 1G| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
innodb_buffer_pool_size | Rozmiar cache danych i indeksów InnoDB. Im więcej danych się w nim mieści, tym mniej czyta się z dysku. | Na VPS z innymi usługami: mniej więcej rozmiar Twoich baz, najwyżej ćwierć RAM (na przykład 1G na VPS z 8 GB). Na VPS tylko dla bazy do 80 % RAM. | Gdy bazy rosną, a zapytania zwalniają. Zmniejsz, gdy VPS brakuje pamięci. |
Po zmianie zrestartuj MariaDB: systemctl restart mariadb. Rozmiar swoich baz sprawdzisz tym zapytaniem:
SELECT table_schema AS db, ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb FROM information_schema.tables GROUP BY table_schema;Weryfikacja#
systemctl is-active mariadbwypisujeactive.mariadb -u aplikace -p aplikace -e "SELECT 1;"po wpisaniu hasła wypisuje tabelę z liczbą1.ss -tlnp | grep 3306pokazuje127.0.0.1:3306(tylko lokalnie) albo0.0.0.0:3306, jeśli włączono dostęp bezpośredni.
Rozwiązywanie problemów#
ERROR 1698 (28000): Access denied for user 'root'@'localhost'#
Logujesz się jako root bazy hasłem (mariadb -u root -p) albo jako zwykły użytkownik systemu. Root uwierzytelnia się przez unix socket: zaloguj się na VPS jako root i uruchom samo mariadb, albo użyj sudo mariadb.
ERROR 1045 (28000): Access denied for user 'aplikace'@'localhost' (using password: YES)#
Błędne hasło albo nie istnieje użytkownik z tym hostem. Sprawdź SELECT User, Host FROM mysql.user;. Jeśli aplikacja łączy się przez 127.0.0.1, a błąd mówi o 'aplikace'@'127.0.0.1', utwórz użytkownika także z hostem 127.0.0.1 i nadaj mu te same uprawnienia. Hasło możesz ustawić ponownie przez ALTER USER.
ERROR 1130 (HY000): Host '198.51.100.25' is not allowed to connect to this MariaDB server#
Dla tego adresu IP nie istnieje żaden użytkownik. Utwórz użytkownika z hostem odpowiadającym Twojemu IP (zobacz Bezpośredni dostęp z zewnątrz) albo użyj tunelu SSH.
ERROR 2002 (HY000): Can't connect to local … server through socket '/run/mysqld/mysqld.sock' #
MariaDB nie działa. Sprawdź status i log:
systemctl status mariadb
journalctl -u mariadb -n 50journalctl -u mariadb -n 50– ostatnie 50 linii logu usługi. Po zmianie konfiguracji przyczyną jest często literówka w pliku.cnf; log wskazuje winną linię.
ERROR 2003 (HY000): Can't connect to … server on '203.0.113.10'#
Połączenie zdalne nie przeszło. Sprawdź, czy MariaDB nasłuchuje na 0.0.0.0 (ss -tlnp | grep 3306), czy zarówno firewall strefy klienta, jak i UFW zezwalają na port 3306 dla Twojego IP, i czy Twój adres IP się nie zmienił.
Import kopii zapasowej zgłasza Unknown command '\-'#
Nowsze wersje mariadb-dump dodają na początku pliku linię włączającą „tryb sandbox”, której nie rozumie ani klient MySQL, ani starsze klienty MariaDB. Importuj kopię klientem mariadb w tej samej lub nowszej wersji. Jeśli musisz importować do MySQL, usuń z kopii pliku pierwszą linię zawierającą enable the sandbox mode.
Podsumowanie
- MariaDB zainstaluj w zakładce Baza danych (Zainstaluj MariaDB) albo przez
apt -y install mariadb-server. - Root loguje się bez hasła przez unix socket (
mariadbjako root); aplikacje dostają własnych użytkowników z uprawnieniami tylko do własnej bazy. - Bazy twórz z
utf8mb4. - Z komputera łącz się przez tunel SSH; dostęp bezpośredni tylko z
bind-address, użytkownikiem dla konkretnego IP i firewallem. - Archiwizuj przez
mariadb-dump --single-transactioni trzymaj kopie także poza VPS.