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.
- V zákaznické zóně otevřete Moje služby, klikněte na VPS a přejděte na záložku Databáze.
- 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í.
- 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.
- Teď máte k dispozici podzáložky:
| Podzáložka | Co v ní uděláte |
|---|---|
| Databáze | Vytvoří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. |
| SQL | Spustí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:
apt update
apt -y install mariadb-serverapt update– načte aktuální seznam balíčků.apt -y install mariadb-server– nainstaluje databázový server i klientamariadb. Služba se po instalaci sama spustí a zapne po startu VPS.
Ověřte, že běží:
systemctl status mariadb
mariadb --versionUvidí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:
mariadb-secure-installationOdpovídejte podle tabulky:
| Otázka | Odpověď | Proč |
|---|---|---|
Enter current password for root (enter for none): | Enter | Root 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] | n | Root 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] | n | Heslo 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] | Y | Anonymní uživatel by umožnil přihlášení bez jména. |
Disallow root login remotely? [Y/n] | Y | Root se smí přihlásit jen z VPS, ne ze sítě. |
Remove test database and access to it? [Y/n] | Y | Smaže databázi test, ke které má přístup kdokoli. |
Reload privilege tables now? [Y/n] | Y | Změny začnou platit hned. |
Na konci uvidíte All done!.
Přihlášení do konzole MariaDB#
Jako root na VPS:
mariadbObjeví se výzva MariaDB [(none)]>. Příkazy SQL končí středníkem ;. Konzoli opustíte příkazem exit.
Jako jiný databázový uživatel:
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ů):
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říkaz | Co dělá |
|---|---|
CREATE DATABASE aplikace | Vytvoří databázi aplikace. |
CHARACTER SET utf8mb4 | Kódování celého Unicode (čeština, emoji). Starší utf8 v MariaDB umí jen 3bajtové znaky a emoji neuloží. |
COLLATE utf8mb4_unicode_ci | Pravidla ř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áva | Co 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 OPTION | Smí 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:
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.
| Host | Odkud se uživatel připojí | Typické použití |
|---|---|---|
localhost | Z VPS přes socket nebo TCP na 127.0.0.1 | Aplikace na stejné VPS. Doporučená výchozí volba. |
127.0.0.1 | Z VPS přes TCP | Aplikace, které se připojují výhradně na 127.0.0.1. |
198.51.100.25 | Jen z této IP adresy | Váš počítač nebo jiný server s pevnou IP. |
172.18.0.% | Z celého rozsahu (zástupný znak %) | Kontejnery Dockeru na stejné VPS. |
% | Odkudkoli | Jen 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.
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– port3307ve vašem počítači se přesměruje na adresu127.0.0.1port3306z 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.
V databázovém programu se připojte na Host
127.0.0.1, Port3307, s uživatelem a heslem z databáze (napříkladaplikace).
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.
Povolte MariaDB naslouchat na síti. Vytvořte soubor
nano /etc/s obsahem: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]– 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.1v souboru50-server.cnfse tím přepíše, protože soubory se načítají podle abecedy a pozdější vyhrává).
Restartujte MariaDB a ověřte naslouchání:
bash systemctl restart mariadb ss -tlnp | grep 3306Uvidíte
0.0.0.0:3306.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';Povolte port
3306jen z této IP adresy ve firewallu zákaznické zóny (návod): pravidlo Příchozí · Povolit · TCP · port3306· Zdrojová IP198.51.100.25. Pokud máte režim Povolit vše, přidejte pod něj ještě pravidlo Příchozí · Zahodit · TCP · port3306bez zdrojové IP. Pravidla se vyhodnocují shora a první shoda platí, takže vaše IP projde a ostatní ne.Pokud používáte UFW, povolte port i v něm:
bash ufw allow from 198.51.100.25 to any port 3306 proto tcpallow 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:
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á:
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:
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říkazemCREATE 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.
[mysqld]
innodb_buffer_pool_size = 1G| Nastavení | Co dělá | Doporučená hodnota | Kdy změnit |
|---|---|---|---|
innodb_buffer_pool_size | Velikost 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:
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 mariadbvypíšeactive.mariadb -u aplikace -p aplikace -e "SELECT 1;"po zadání hesla vypíše tabulku s číslem1.ss -tlnp | grep 3306ukazuje127.0.0.1:3306(jen lokálně), nebo0.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:
systemctl status mariadb
journalctl -u mariadb -n 50journalctl -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 (
mariadbjako 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-transactiona zálohy ukládejte i mimo VPS.