Přejít na obsah
Aktuální kupón:sleva 10 %Uplatnit v objednávce

MariaDB na VPS: instalace, zabezpečení, uživatelé a vzdálený přístup

Nainstalujete MariaDB jedním kliknutím v zákaznické zóně nebo ručně, zabezpečíte ji, vytvoříte databázi a uživatele a bezpečně se k ní připojíte z počítače přes SSH tunel.

  • pokročilý
  • ~25 min
  • Aktualizováno 1. 10. 2026

MariaDB je databázový server kompatibilní s MySQL. Používají ho weby, herní servery, Discord boti i pluginy. Ukážeme dvě cesty k instalaci, zabezpečení, správu databází a uživatelů, bezpečný přístup z vašeho počítače a zálohy.

Co budete potřebovat

  • VPS u StormHostu s Ubuntu 24.04 nebo Debianem 13
  • Pro ruční postup připojení přes SSH jako root (návod)
  • Asi 25 minut

Jak to funguje#

MariaDB běží na VPS jako služba mariadb a ve výchozím stavu přijímá spojení jen z VPS samotné (adresa 127.0.0.1, port 3306, a lokální socket). Aplikace na stejné VPS se tak připojí, z internetu se k databázi nedostane nikdo. Tak to má zůstat, dokud přístup zvenku opravdu nepotřebujete.

Verze se liší podle systému: Ubuntu 24.04 instaluje MariaDB 10.11, Debian 13 MariaDB 11.8. Pro postupy v tomto návodu na rozdílu nezáleží.

Databázový uživatel root se na Ubuntu i Debianu ověřuje přes unix socket: do databáze se jako root dostane jen ten, kdo je na VPS přihlášený jako systémový root. Heslo se tu neuhodne, protože žádné není.

Možnost A: záložka Databáze v zákaznické zóně#

Nejrychlejší cesta, bez příkazové řádky.

  1. V zákaznické zóně otevřete Moje služby, klikněte na VPS a přejděte na záložku Databáze.
  2. Pokud na VPS žádná databáze neběží, uvidíte „Na VPS zatím neběží žádný databázový server“. Klikněte na Nainstalovat MariaDB. Instalace běží na pozadí a obvykle trvá 1–⁠3 minuty, stránka se sama obnoví.
  3. Klikněte na Připojit automaticky. Zákaznická zóna se k databázi připojí přes zabezpečené spojení do VPS, databáze proto nemusí být dostupná z internetu.
  4. Teď máte k dispozici podzáložky:
PodzáložkaCo v ní uděláte
DatabázeVytvoříte (Nová databáze) nebo smažete databázi. Volba „Založit i uživatele se stejným jménem a plným přístupem“ rovnou vytvoří uživatele s heslem.
UživateléVytvoříte uživatele, přidáte mu přístup k databázi, vygenerujete nové heslo nebo ho smažete.
ProhlížečProhlížíte tabulky a jejich řádky.
SQLSpustíte libovolný SQL dotaz (Ctrl+Enter). Zobrazí se nejvýš prvních 500 řádků výsledku. Dotazy, které mažou data, musíte potvrdit.

Důležité podrobnosti:

  • Název databáze smí obsahovat jen písmena bez diakritiky, číslice a podtržítko a nesmí začínat číslicí.
  • Databáze se vytváří s kódováním utf8mb4 (podporuje celý Unicode včetně emoji).
  • Po vytvoření uživatele se heslo zobrazí jen jednou („Uložte si přístupové údaje — heslo už znovu neuvidíte“). Uložte si ho do správce hesel.
  • Volba Povolit připojení zvenku vytvoří uživatele, který se smí připojit odkudkoli (host %). Aby to fungovalo, musí MariaDB naslouchat na veřejné adrese (bind-address) a port musí být povolený ve firewallu. Postup je níže v kapitole Přímý přístup zvenku. Pokud připojení zvenku nepotřebujete, volbu nezaškrtávejte.

Servisní účet zákaznické zóny

Při automatickém připojení založíme v MariaDB účet stormhost_panel s plnými právy, který se smí přihlásit jen z VPS samotné. Přes něj zákaznická zóna databáze spravuje. V seznamu uživatelů je označený jako systémový. Nemažte ho, jinak se záložka Databáze k databázi nepřipojí. Odpojit databázi od zákaznické zóny můžete tlačítkem Odpojit, databáze na VPS zůstanou beze změny.

Zbytek návodu popisuje stejné věci z příkazové řádky. Hodí se, když chcete mít nad databází plnou kontrolu, nebo potřebujete věci, které záložka neumí (zálohy, ladění, SSH tunel).

Možnost B: ruční instalace#

Platí pro Ubuntu 24.04 i Debian 13:

bash
apt update
apt -y install mariadb-server
  • apt update – načte aktuální seznam balíčků.
  • apt -y install mariadb-server – nainstaluje databázový server i klienta mariadb. Služba se po instalaci sama spustí a zapne po startu VPS.

Ověřte, že běží:

bash
systemctl status mariadb
mariadb --version

Uvidíte Active: active (running) a číslo verze (10.11 na Ubuntu, 11.8 na Debianu). Výpis systemctl zavřete klávesou q.

Zabezpečení: mariadb-secure-installation#

Skript mariadb-secure-installation odstraní testovací věci, které v produkci nemají co dělat. Spusťte ho:

bash
mariadb-secure-installation

Odpovídejte podle tabulky:

OtázkaOdpověďProč
Enter current password for root (enter for none):EnterRoot se přihlašuje přes unix socket, heslo nemá. Skript vypíše OK, successfully used password, moving on...
Switch to unix_socket authentication [Y/n]nRoot už unix socket používá. Skript to sám napíše: „You already have your root account protected, so you can safely answer 'n'.“
Change the root password? [Y/n]nHeslo pro roota nepotřebujete, přihlásí se jen systémový root. Pokud nějaký program výslovně vyžaduje heslo roota, vytvořte mu raději vlastního uživatele.
Remove anonymous users? [Y/n]YAnonymní uživatel by umožnil přihlášení bez jména.
Disallow root login remotely? [Y/n]YRoot se smí přihlásit jen z VPS, ne ze sítě.
Remove test database and access to it? [Y/n]YSmaže databázi test, ke které má přístup kdokoli.
Reload privilege tables now? [Y/n]YZměny začnou platit hned.

Na konci uvidíte All done!.

Přihlášení do konzole MariaDB#

Jako root na VPS:

bash
mariadb

Objeví se výzva MariaDB [(none)]>. Příkazy SQL končí středníkem ;. Konzoli opustíte příkazem exit.

Jako jiný databázový uživatel:

bash
mariadb -u <UZIVATEL> -p
  • -u <UZIVATEL> – jméno databázového uživatele.
  • -p – zeptá se na heslo (při psaní se nezobrazuje).

Pod běžným uživatelem se sudo

Pokud nejste přihlášení jako root, ale jako běžný uživatel se sudo, spusťte sudo mariadb. Příkaz mariadb -u root -p skončí chybou Access denied, protože root se heslem nepřihlašuje.

Databáze a uživatel pro aplikaci#

Každá aplikace má mít vlastní databázi a vlastního uživatele s právy jen k ní. Když pak někdo aplikaci napadne, dostane se jen k jejím datům.

V konzoli MariaDB (mariadb) spusťte. Za <SILNE_HESLO> dosaďte heslo z generátoru hesel (jen písmena a číslice, aspoň 24 znaků):

SQL
CREATE DATABASE aplikace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'aplikace'@'localhost' IDENTIFIED BY '<SILNE_HESLO>';
GRANT ALL PRIVILEGES ON aplikace.* TO 'aplikace'@'localhost';
SHOW GRANTS FOR 'aplikace'@'localhost';
PříkazCo dělá
CREATE DATABASE aplikaceVytvoří databázi aplikace.
CHARACTER SET utf8mb4Kódování celého Unicode (čeština, emoji). Starší utf8 v MariaDB umí jen 3bajtové znaky a emoji neuloží.
COLLATE utf8mb4_unicode_ciPravidla řazení a porovnávání textu; ci = bez ohledu na velikost písmen.
CREATE USER 'aplikace'@'localhost'Uživatel aplikace, který se smí připojit jen z VPS.
IDENTIFIED BY '…'Heslo uživatele.
GRANT ALL PRIVILEGES ON aplikace.*Všechna práva, ale jen k databázi aplikace (.* = všechny tabulky).
SHOW GRANTS FOR …Vypíše, jaká práva uživatel má (kontrola).

Práva přidělujte podle toho, co aplikace potřebuje:

PrávaCo umožníKdy je dát
ALL PRIVILEGES ON db.*Vše v jedné databázi včetně změn struktury.Běžná aplikace, která si sama vytváří tabulky (WordPress, pluginy, boti).
SELECT, INSERT, UPDATE, DELETE ON db.*Jen čtení a zápis dat, ne změny tabulek.Aplikace s hotovou strukturou; účet pro reporty.
SELECT ON db.*Jen čtení.Statistiky, exporty, náhledy.
ALL PRIVILEGES ON *.*Všechno na celém serveru.Jen správce, nikdy aplikace.
WITH GRANT OPTIONSmí rozdávat práva dalším.Jen nástroje, které samy zakládají databáze a uživatele (například herní panel na vlastní VPS).

Další užitečné příkazy:

SQL
SHOW DATABASES;
SELECT User, Host FROM mysql.user;
ALTER USER 'aplikace'@'localhost' IDENTIFIED BY '<NOVE_HESLO>';
REVOKE ALL PRIVILEGES ON aplikace.* FROM 'aplikace'@'localhost';
DROP USER 'aplikace'@'localhost';
  • SHOW DATABASES; – seznam databází.
  • SELECT User, Host FROM mysql.user; – seznam uživatelů a hostů, odkud se smí připojit.
  • ALTER USER … IDENTIFIED BY – změní heslo.
  • REVOKE … – odebere práva.
  • DROP USER … – smaže uživatele (databáze zůstane).

Mazání databáze je nevratné

DROP DATABASE aplikace; smaže databázi se všemi tabulkami a daty bez dalšího potvrzení. Před smazáním si udělejte zálohu (kapitola Zálohy databáze).

Host u uživatele: odkud se smí připojit#

Uživatel v MariaDB není jen jméno, ale dvojice jméno + host. 'jan'@'localhost' a 'jan'@'%' jsou dva různí uživatelé s vlastním heslem i právy.

HostOdkud se uživatel připojíTypické použití
localhostZ VPS přes socket nebo TCP na 127.0.0.1Aplikace na stejné VPS. Doporučená výchozí volba.
127.0.0.1Z VPS přes TCPAplikace, které se připojují výhradně na 127.0.0.1.
198.51.100.25Jen z této IP adresyVáš počítač nebo jiný server s pevnou IP.
172.18.0.%Z celého rozsahu (zástupný znak %)Kontejnery Dockeru na stejné VPS.
%OdkudkoliJen když to jinak nejde, a vždy s firewallem.

Přístup z vašeho počítače#

Chcete se na databázi podívat programem jako HeidiSQL nebo DBeaver? Máte dvě možnosti. Doporučujeme SSH tunel: databáze zůstane z internetu nedostupná a spojení je šifrované.

SSH tunel (doporučeno)#

SSH tunel přesměruje port ve vašem počítači přes šifrované SSH spojení na port databáze ve VPS.

  1. Ve svém počítači otevřete terminál (Windows Terminal, PowerShell, macOS Terminál) a spusťte:

    bash
    ssh -L 3307:127.0.0.1:3306 -N [email protected]
    • ssh – připojí se k VPS přes SSH.
    • -L 3307:127.0.0.1:3306 – port 3307 ve vašem počítači se přesměruje na adresu 127.0.0.1 port 3306 z pohledu VPS (tedy na MariaDB). Port 3307 je zvolený proto, aby nekolidoval s případnou databází ve vašem počítači.
    • -N – nespouštět na VPS žádný příkaz, jen držet tunel.
    • [email protected] – uživatel a IP adresa vaší VPS (ze záložky Síť).

    Po přihlášení terminál nic nevypíše a „visí“. To je správně, tunel běží, dokud okno nezavřete nebo nestisknete Ctrl+C.

  2. V databázovém programu se připojte na Host 127.0.0.1, Port 3307, s uživatelem a heslem z databáze (například aplikace).

HeidiSQL i DBeaver umí tunel vytvořit samy. V HeidiSQL zvolte typ sítě MariaDB/MySQL přes SSH tunel (… (SSH tunnel)), v záložce SSH tunelu vyplňte IP adresu VPS, port 22, uživatele a heslo nebo SSH klíč a v hlavním nastavení jako hostitele databáze 127.0.0.1. V DBeaveru v nastavení připojení přidejte SSH (tlačítko plus, volba SSH) a zaškrtněte Use SSH Tunnel.

Přímý přístup zvenku#

Použijte jen tehdy, když se k databázi musí připojovat jiný server nebo program, který tunel neumí. Vždy omezte přístup na konkrétní IP adresu.

  1. Povolte MariaDB naslouchat na síti. Vytvořte soubor nano /etc/mysql/mariadb.conf.d/60-remote-access.cnf s obsahem:

    /etc/mysql/mariadb.conf.d/60-remote-access.cnfini
    [mysqld]
    bind-address = 0.0.0.0
    • [mysqld] – skupina voleb databázového serveru.
    • bind-address = 0.0.0.0 – naslouchat na všech IPv4 adresách VPS (výchozí 127.0.0.1 v souboru 50-server.cnf se tím přepíše, protože soubory se načítají podle abecedy a pozdější vyhrává).
  2. Restartujte MariaDB a ověřte naslouchání:

    bash
    systemctl restart mariadb
    ss -tlnp | grep 3306

    Uvidíte 0.0.0.0:3306.

  3. Vytvořte uživatele s IP adresou, ze které se budete připojovat (například vaše veřejná IP 198.51.100.25):

    SQL
    CREATE USER 'jan'@'198.51.100.25' IDENTIFIED BY '<SILNE_HESLO>';
    GRANT ALL PRIVILEGES ON aplikace.* TO 'jan'@'198.51.100.25';
  4. Povolte port 3306 jen z této IP adresy ve firewallu zákaznické zóny (návod): pravidlo Příchozí · Povolit · TCP · port 3306 · Zdrojová IP 198.51.100.25. Pokud máte režim Povolit vše, přidejte pod něj ještě pravidlo Příchozí · Zahodit · TCP · port 3306 bez zdrojové IP. Pravidla se vyhodnocují shora a první shoda platí, takže vaše IP projde a ostatní ne.

  5. Pokud používáte UFW, povolte port i v něm:

    bash
    ufw allow from 198.51.100.25 to any port 3306 proto tcp
    • allow from 198.51.100.25 – jen z vaší IP adresy.
    • to any port 3306 proto tcp – na TCP port 3306.

Dynamická IP adresa

Domácí připojení často mění IP adresu. Po změně se nepřipojíte a pravidla musíte upravit. Proto je pro připojení z domova lepší SSH tunel.

Zálohy databáze#

Program mariadb-dump uloží databázi do SQL souboru, ze kterého ji kdykoli obnovíte.

Záloha jedné databáze:

bash
mariadb-dump --single-transaction --routines --events aplikace > /root/aplikace-$(date +%F).sql
  • --single-transaction – udělá konzistentní zálohu tabulek InnoDB bez zamykání, aplikace může běžet dál.
  • --routines – zahrne uložené procedury a funkce (bez přepínače se nezálohují).
  • --events – zahrne naplánované události (také se jinak nezálohují). Triggery se zálohují automaticky.
  • aplikace – název databáze.
  • > /root/aplikace-$(date +%F).sql – uloží výstup do souboru s dnešním datem v názvu.

Záloha všech databází najednou a rovnou komprimovaná:

bash
mariadb-dump --single-transaction --routines --events --all-databases | gzip > /root/vsechny-db-$(date +%F).sql.gz
  • --all-databases – všechny databáze včetně příkazů pro jejich vytvoření.
  • | gzip > – zkomprimuje výstup, SQL se obvykle zmenší na zlomek.

Obnova:

bash
mariadb aplikace < /root/aplikace-2026-10-01.sql
gunzip < /root/vsechny-db-2026-10-01.sql.gz | mariadb
  • První řádek nahraje zálohu jedné databáze do existující databáze aplikace (pokud neexistuje, vytvořte ji nejdřív příkazem CREATE DATABASE).
  • Druhý obnoví zálohu všech databází; databáze si vytvoří sám.

Obnova přepisuje

Obnova ze zálohy přepíše tabulky, které v záloze jsou, jejich stavem ze zálohy. Novější data v nich se ztratí. Pokud si nejste jistí, obnovte zálohu nejdřív do nové databáze (například aplikace_test) a porovnejte.

Automatické noční zálohy a jejich odeslání mimo VPS popisuje návod Zálohy na VPS.

Základ ladění výkonu#

Nejdůležitější nastavení výkonu je innodb_buffer_pool_size: kolik RAM smí MariaDB použít jako cache dat a indexů. Výchozí hodnota je 128 MB.

/etc/mysql/mariadb.conf.d/60-tuning.cnfini
[mysqld]
innodb_buffer_pool_size = 1G
NastaveníCo děláDoporučená hodnotaKdy změnit
innodb_buffer_pool_sizeVelikost cache pro data a indexy InnoDB. Čím víc dat se do ní vejde, tím méně se čte z disku.Na VPS, kde běží i další služby: zhruba velikost databází, nejvýš čtvrtina RAM (například 1G na VPS s 8 GB). Na VPS jen pro databázi až 80 % RAM.Když databáze roste a dotazy zpomalují. Zmenšete, když VPS dochází paměť.

Po úpravě restartujte MariaDB: systemctl restart mariadb. Velikost databází zjistíte dotazem:

SQL
SELECT table_schema AS db, ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb FROM information_schema.tables GROUP BY table_schema;

Ověření#

  • systemctl is-active mariadb vypíše active.
  • mariadb -u aplikace -p aplikace -e "SELECT 1;" po zadání hesla vypíše tabulku s číslem 1.
  • ss -tlnp | grep 3306 ukazuje 127.0.0.1:3306 (jen lokálně), nebo 0.0.0.0:3306, pokud jste povolili přímý přístup.

Když něco nefunguje#

ERROR 1698 (28000): Access denied for user 'root'@'localhost'#

Přihlašujete se jako databázový root heslem (mariadb -u root -p) nebo pod běžným systémovým uživatelem. Root se ověřuje přes unix socket: přihlaste se na VPS jako root a spusťte jen mariadb, nebo použijte sudo mariadb.

ERROR 1045 (28000): Access denied for user 'aplikace'@'localhost' (using password: YES)#

Špatné heslo, nebo uživatel s tímto hostem neexistuje. Zkontrolujte SELECT User, Host FROM mysql.user;. Pokud se aplikace připojuje přes 127.0.0.1 a chyba uvádí 'aplikace'@'127.0.0.1', vytvořte uživatele i s hostem 127.0.0.1 a přidělte mu stejná práva. Heslo nastavíte znovu příkazem ALTER USER.

ERROR 1130 (HY000): Host '198.51.100.25' is not allowed to connect to this MariaDB server#

Pro tuto IP adresu neexistuje žádný uživatel. Vytvořte uživatele s hostem odpovídajícím vaší IP (kapitola Přímý přístup zvenku), nebo použijte SSH tunel.

ERROR 2002 (HY000): Can't connect to local … server through socket '/run/mysqld/mysqld.sock'#

MariaDB neběží. Zkontrolujte stav a log:

bash
systemctl status mariadb
journalctl -u mariadb -n 50
  • journalctl -u mariadb -n 50 – posledních 50 řádků logu služby. Po úpravě konfigurace bývá příčinou překlep v souboru .cnf; řádek s chybou je v logu uvedený.

ERROR 2003 (HY000): Can't connect to … server on '203.0.113.10'#

Spojení zvenku neprošlo. Zkontrolujte, že MariaDB naslouchá na 0.0.0.0 (ss -tlnp | grep 3306), že port 3306 povoluje firewall zákaznické zóny i UFW pro vaši IP a že se vaše IP adresa nezměnila.

Import zálohy hlásí Unknown command '\-'#

Nové verze mariadb-dump vkládají na začátek souboru řádek se zapnutím „sandbox režimu“, kterému nerozumí klient MySQL ani starší klient MariaDB. Importujte zálohu klientem mariadb stejné nebo novější verze. Pokud musíte importovat do MySQL, smažte z kopie souboru první řádek s textem enable the sandbox mode.

Shrnutí

  • MariaDB nainstalujete v záložce Databáze (Nainstalovat MariaDB) nebo příkazem apt -y install mariadb-server.
  • Root se přihlašuje bez hesla přes unix socket (mariadb jako root); aplikace mají vlastní uživatele s právy jen ke své databázi.
  • Databáze vytvářejte s utf8mb4.
  • Z počítače se připojujte přes SSH tunel; přímý přístup jen s bind-address, uživatelem pro konkrétní IP a firewallem.
  • Zálohujte příkazem mariadb-dump --single-transaction a zálohy ukládejte i mimo VPS.

Byl návod užitečný?

Platí pro

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

Služby

Nahlásit chybu v návodu

Hledání v návodech