Przejdź do treści
Aktualny kupon:10% zniżkiUżyj w zamówieniu

MariaDB na VPS: instalacja, zabezpieczenie, użytkownicy i dostęp zdalny

Zainstaluj MariaDB jednym kliknięciem w strefie klienta lub ręcznie, zabezpiecz ją, utwórz bazę danych i użytkownika i bezpiecznie połącz się z nią z komputera przez tunel SSH.

  • zaawansowany
  • ~25 min
  • Zaktualizowano 9.10.2026

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ń.

  1. W strefie klienta otwórz Moje usługi, kliknij swój VPS i przejdź do zakładki Baza danych.
  2. 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.
  3. 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.
  4. Masz teraz te podzakładki:
PodzakładkaCo tam zrobisz
Bazy danychUtworzysz (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żytkownicyUtworzysz użytkownika, dasz mu dostęp do bazy, wygenerujesz nowe hasło lub go usuniesz.
PrzeglądarkaPrzejrzysz tabele i ich wiersze.
SQLWykonasz 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:

bash
apt update
apt -y install mariadb-server
  • apt update – wczytuje aktualną listę pakietów.
  • apt -y install mariadb-server – instaluje serwer bazy danych i klienta mariadb. Usługa startuje sama po instalacji i jest włączona przy uruchomieniu VPS.

Sprawdź, czy działa:

bash
systemctl status mariadb
mariadb --version

Zobaczysz 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:

bash
mariadb-secure-installation

Odpowiadaj według tabeli:

PytanieOdpowiedźDlaczego
Enter current password for root (enter for none):EnterRoot 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]nRoot 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]nRoot 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]YUżytkownik anonimowy pozwalałby logować się bez nazwy.
Disallow root login remotely? [Y/n]YRoot może logować się tylko z VPS, nie przez sieć.
Remove test database and access to it? [Y/n]YUsuwa bazę test, do której każdy ma dostęp.
Reload privilege tables now? [Y/n]YZmiany zaczynają działać natychmiast.

Na końcu zobaczysz All done!.

Logowanie do konsoli MariaDB#

Jako root na VPS:

bash
mariadb

Pojawi się znak zachęty MariaDB [(none)]>. Polecenia SQL kończą się średnikiem ;. Konsolę opuścisz przez exit.

Jako inny użytkownik bazy:

bash
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):

SQL
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';
PolecenieCo robi
CREATE DATABASE aplikaceTworzy bazę danych aplikace.
CHARACTER SET utf8mb4Kodowanie dla całego Unicode (znaki diakrytyczne, emoji). Starsze utf8 w MariaDB obsługuje tylko znaki 3-⁠bajtowe i nie przechowa emoji.
COLLATE utf8mb4_unicode_ciZasady 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:

UprawnieniaNa 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 OPTIONMoż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:

SQL
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.

HostSkąd użytkownik może się łączyćTypowe użycie
localhostZ VPS przez socket lub TCP do 127.0.0.1Aplikacja na tym samym VPS. Zalecane domyślne.
127.0.0.1Z VPS przez TCPAplikacje łączące się wyłącznie z 127.0.0.1.
198.51.100.25Tylko z tego adresu IPTwój komputer lub inny serwer ze statycznym IP.
172.18.0.%Z całego zakresu (symbol %)Kontenery Dockera na tym samym VPS.
%SkądkolwiekTylko 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.

  1. 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 – port 3307 na Twoim komputerze jest przekazywany na adres 127.0.0.1, port 3306 widziany 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.

  2. W programie bazodanowym połącz się z Host 127.0.0.1, Port 3307, użytkownikiem bazy i hasłem (na przykład aplikace).

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.

  1. Pozwól MariaDB nasłuchiwać w sieci. Utwórz plik nano /etc/mysql/mariadb.conf.d/60-remote-access.cnf z tą zawartością:

    /etc/mysql/mariadb.conf.d/60-remote-access.cnfini
    [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ślne 127.0.0.1 z 50-server.cnf, bo pliki są czytane alfabetycznie i wygrywa późniejszy).
  2. Zrestartuj MariaDB i sprawdź, gdzie nasłuchuje:

    bash
    systemctl restart mariadb
    ss -tlnp | grep 3306

    Zobaczysz 0.0.0.0:3306.

  3. 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';
  4. Zezwól na port 3306 tylko z tego adresu IP w firewallu strefy klienta (poradnik): reguła Przychodzący · Zezwól · TCP · port 3306 · IP / zakres źródłowy 198.51.100.25. Jeśli używasz trybu Zezwól na wszystko, dodaj pod nią także regułę: Przychodzący · Drop · TCP · port 3306 bez IP źródłowego. Reguły są oceniane od góry i wygrywa pierwsze dopasowanie, więc Twoje IP przechodzi, a wszyscy inni nie.

  5. 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 tcp
    • allow 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:

bash
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:

bash
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:

bash
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ą przez CREATE 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.

/etc/mysql/mariadb.conf.d/60-tuning.cnfini
[mysqld]
innodb_buffer_pool_size = 1G
UstawienieCo robiZalecana wartośćKiedy zmieniać
innodb_buffer_pool_sizeRozmiar 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:

SQL
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 mariadb wypisuje active.
  • mariadb -u aplikace -p aplikace -e "SELECT 1;" po wpisaniu hasła wypisuje tabelę z liczbą 1.
  • ss -tlnp | grep 3306 pokazuje 127.0.0.1:3306 (tylko lokalnie) albo 0.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:

bash
systemctl status mariadb
journalctl -u mariadb -n 50
  • journalctl -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 (mariadb jako 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-transaction i trzymaj kopie także poza VPS.

Czy ten poradnik był pomocny?

Dotyczy

  • Ubuntu 24.04
  • Debian 13
  • MariaDB 10.11
  • MariaDB 11.8

Usługi

Zgłoś błąd w poradniku

Wyszukiwanie w poradnikach