MariaDB je databázový server kompatibilný s MySQL. Používajú ho weby, herné servery, Discord boti aj pluginy. Ukážeme dve cesty k inštalácii, zabezpečenie, správu databáz a používateľov, bezpečný prístup z vášho počítača a zálohy.
Čo budete potrebovať
- VPS u StormHostu s Ubuntu 24.04 alebo Debianom 13
- Pre ručný postup pripojenie cez SSH ako root (návod)
- Približne 25 minút
Ako to funguje#
MariaDB beží na VPS ako služba mariadb a v predvolenom stave prijíma spojenia iba z VPS samotného (adresa 127.0.0.1, port 3306, a lokálny socket). Aplikácie na rovnakom VPS sa tak pripoja, z internetu sa k databáze nedostane nikto. Tak to má zostať, kým prístup zvonku naozaj nepotrebujete.
Verzie sa líšia podľa systému: Ubuntu 24.04 inštaluje MariaDB 10.11, Debian 13 MariaDB 11.8. Pre postupy v tomto návode na rozdiele nezáleží.
Databázový používateľ root sa na Ubuntu aj Debiane overuje cez unix socket: do databázy sa ako root dostane iba ten, kto je na VPS prihlásený ako systémový root. Heslo sa tu neuhádne, pretože žiadne nie je.
Možnosť A: záložka Databázy v zákazníckom účte#
Najrýchlejšia cesta, bez príkazového riadka.
- V zákazníckom účte otvorte Moje služby, kliknite na VPS a prejdite na záložku Databázy.
- Ak na VPS žiadna databáza nebeží, uvidíte „Na VPS zatiaľ nebeží žiadny databázový server“. Kliknite na Nainštalovať MariaDB. Inštalácia beží na pozadí a zvyčajne trvá 1–3 minúty, stránka sa sama obnoví.
- Kliknite na Pripojiť automaticky. Zákaznícky účet sa k databáze pripojí cez zabezpečené spojenie do VPS, databáza preto nemusí byť dostupná z internetu.
- Teraz máte k dispozícii podzáložky:
| Podzáložka | Čo v nej urobíte |
|---|---|
| Databázy | Vytvoríte (Nová databáza) alebo zmažete databázu. Voľba „Založiť aj používateľa s rovnakým menom a plným prístupom“ rovno vytvorí používateľa s heslom. |
| Používatelia | Vytvoríte používateľa, pridáte mu prístup k databáze, vygenerujete nové heslo alebo ho zmažete. |
| Prehliadač | Prezeráte tabuľky a ich riadky. |
| SQL | Spustíte ľubovoľný SQL dopyt (Ctrl+Enter). Zobrazí sa najviac prvých 500 riadkov výsledku. Dopyty, ktoré mažú dáta, musíte potvrdiť. |
Dôležité podrobnosti:
- Názov databázy smie obsahovať iba písmená bez diakritiky, číslice a podčiarkovník a nesmie začínať číslicou.
- Databáza sa vytvára s kódovaním
utf8mb4(podporuje celý Unicode vrátane emoji). - Po vytvorení používateľa sa heslo zobrazí iba raz („Uložte si prístupové údaje — heslo už znova neuvidíte“). Uložte si ho do správcu hesiel.
- Voľba Povoliť pripojenie zvonku vytvorí používateľa, ktorý sa smie pripojiť odkiaľkoľvek (host
%). Aby to fungovalo, musí MariaDB počúvať na verejnej adrese (bind-address) a port musí byť povolený vo firewalle. Postup je nižšie v kapitole Priamy prístup zvonku. Ak pripojenie zvonku nepotrebujete, voľbu nezaškrtávajte.
Servisný účet zákazníckeho účtu
Pri automatickom pripojení založíme v MariaDB účet stormhost_panel s plnými právami, ktorý sa smie prihlásiť iba z VPS samotného. Cez neho zákaznícky účet databázy spravuje. V zozname používateľov je označený ako systémový. Nemažte ho, inak sa záložka Databázy k databáze nepripojí. Odpojiť databázu od zákazníckeho účtu môžete tlačidlom Odpojiť, databázy na VPS zostanú bez zmeny.
Zvyšok návodu opisuje rovnaké veci z príkazového riadka. Hodí sa, keď chcete mať nad databázou plnú kontrolu, alebo potrebujete veci, ktoré záložka nedokáže (zálohy, ladenie, SSH tunel).
Možnosť B: ručná inštalácia#
Platí pre Ubuntu 24.04 aj Debian 13:
apt update
apt -y install mariadb-serverapt update– načíta aktuálny zoznam balíkov.apt -y install mariadb-server– nainštaluje databázový server aj klientamariadb. Služba sa po inštalácii sama spustí a zapne po štarte VPS.
Overte, že beží:
systemctl status mariadb
mariadb --versionUvidíte Active: active (running) a číslo verzie (10.11 na Ubuntu, 11.8 na Debiane). Výpis systemctl zavriete klávesom q.
Zabezpečenie: mariadb-secure-installation#
Skript mariadb-secure-installation odstráni testovacie veci, ktoré v produkcii nemajú čo robiť. Spustite ho:
mariadb-secure-installationOdpovedajte podľa tabuľky:
| Otázka | Odpoveď | Prečo |
|---|---|---|
Enter current password for root (enter for none): | Enter | Root sa prihlasuje cez 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žíva. 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 pre roota nepotrebujete, prihlási sa iba systémový root. Ak nejaký program výslovne vyžaduje heslo roota, vytvorte mu radšej vlastného používateľa. |
Remove anonymous users? [Y/n] | Y | Anonymný používateľ by umožnil prihlásenie bez mena. |
Disallow root login remotely? [Y/n] | Y | Root sa smie prihlásiť iba z VPS, nie zo siete. |
Remove test database and access to it? [Y/n] | Y | Zmaže databázu test, ku ktorej má prístup ktokoľvek. |
Reload privilege tables now? [Y/n] | Y | Zmeny začnú platiť hneď. |
Na konci uvidíte All done!.
Prihlásenie do konzoly MariaDB#
Ako root na VPS:
mariadbObjaví sa výzva MariaDB [(none)]>. Príkazy SQL končia bodkočiarkou ;. Konzolu opustíte príkazom exit.
Ako iný databázový používateľ:
mariadb -u <UZIVATEL> -p-u <UZIVATEL>– meno databázového používateľa.-p– opýta sa na heslo (pri písaní sa nezobrazuje).
Pod bežným používateľom so sudo
Ak nie ste prihlásení ako root, ale ako bežný používateľ so sudo, spustite sudo mariadb. Príkaz mariadb -u root -p skončí chybou Access denied, pretože root sa heslom neprihlasuje.
Databáza a používateľ pre aplikáciu#
Každá aplikácia má mať vlastnú databázu a vlastného používateľa s právami iba k nej. Keď potom niekto aplikáciu napadne, dostane sa iba k jej dátam.
V konzole MariaDB (mariadb) spustite. Za <SILNE_HESLO> dosaďte heslo z generátora hesiel (iba písmená a číslice, aspoň 24 znakov):
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';| Príkaz | Čo robí |
|---|---|
CREATE DATABASE aplikace | Vytvorí databázu aplikace. |
CHARACTER SET utf8mb4 | Kódovanie celého Unicode (slovenčina, emoji). Staršie utf8 v MariaDB zvládne iba 3-bajtové znaky a emoji neuloží. |
COLLATE utf8mb4_unicode_ci | Pravidlá radenia a porovnávania textu; ci = bez ohľadu na veľkosť písmen. |
CREATE USER 'aplikace'@'localhost' | Používateľ aplikace, ktorý sa smie pripojiť iba z VPS. |
IDENTIFIED BY '…' | Heslo používateľa. |
GRANT ALL PRIVILEGES ON aplikace.* | Všetky práva, ale iba k databáze aplikace (.* = všetky tabuľky). |
SHOW GRANTS FOR … | Vypíše, aké práva používateľ má (kontrola). |
Práva prideľujte podľa toho, čo aplikácia potrebuje:
| Práva | Čo umožnia | Kedy ich dať |
|---|---|---|
ALL PRIVILEGES ON db.* | Všetko v jednej databáze vrátane zmien štruktúry. | Bežná aplikácia, ktorá si sama vytvára tabuľky (WordPress, pluginy, boti). |
SELECT, INSERT, UPDATE, DELETE ON db.* | Iba čítanie a zápis dát, nie zmeny tabuliek. | Aplikácia s hotovou štruktúrou; účet pre reporty. |
SELECT ON db.* | Iba čítanie. | Štatistiky, exporty, náhľady. |
ALL PRIVILEGES ON *.* | Všetko na celom serveri. | Iba správca, nikdy aplikácia. |
WITH GRANT OPTION | Smie rozdávať práva ďalším. | Iba nástroje, ktoré samy zakladajú databázy a používateľov (napríklad herný panel na vlastnom VPS). |
Ďalšie užitočné prí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;– zoznam databáz.SELECT User, Host FROM mysql.user;– zoznam používateľov a hostov, odkiaľ sa smú pripojiť.ALTER USER … IDENTIFIED BY– zmení heslo.REVOKE …– odoberie práva.DROP USER …– zmaže používateľa (databáza zostane).
Mazanie databázy je nevratné
DROP DATABASE aplikace; zmaže databázu so všetkými tabuľkami a dátami bez ďalšieho potvrdenia. Pred zmazaním si urobte zálohu (kapitola Zálohy databázy).
Host pri používateľovi: odkiaľ sa smie pripojiť#
Používateľ v MariaDB nie je iba meno, ale dvojica meno + host. 'jan'@'localhost' a 'jan'@'%' sú dvaja rôzni používatelia s vlastným heslom aj právami.
| Host | Odkiaľ sa používateľ pripojí | Typické použitie |
|---|---|---|
localhost | Z VPS cez socket alebo TCP na 127.0.0.1 | Aplikácie na rovnakom VPS. Odporúčaná predvolená voľba. |
127.0.0.1 | Z VPS cez TCP | Aplikácie, ktoré sa pripájajú výhradne na 127.0.0.1. |
198.51.100.25 | Iba z tejto IP adresy | Váš počítač alebo iný server s pevnou IP. |
172.18.0.% | Z celého rozsahu (zástupný znak %) | Kontajnery Dockeru na rovnakom VPS. |
% | Odkiaľkoľvek | Iba keď to inak nejde, a vždy s firewallom. |
Prístup z vášho počítača#
Chcete sa na databázu pozrieť programom ako HeidiSQL alebo DBeaver? Máte dve možnosti. Odporúčame SSH tunel: databáza zostane z internetu nedostupná a spojenie je šifrované.
SSH tunel (odporúčané)#
SSH tunel presmeruje port vo vašom počítači cez šifrované SSH spojenie na port databázy vo VPS.
Vo svojom počítači otvorte terminál (Windows Terminal, PowerShell, macOS Terminál) a spustite:
bash ssh -L 3307:127.0.0.1:3306 -N [email protected]ssh– pripojí sa k VPS cez SSH.-L 3307:127.0.0.1:3306– port3307vo vašom počítači sa presmeruje na adresu127.0.0.1port3306z pohľadu VPS (teda na MariaDB). Port 3307 je zvolený preto, aby nekolidoval s prípadnou databázou vo vašom počítači.-N– nespúšťať na VPS žiadny príkaz, iba držať tunel.[email protected]– používateľ a IP adresa vášho VPS (zo záložky Sieť).
Po prihlásení terminál nič nevypíše a „visí“. To je správne, tunel beží, kým okno nezatvoríte alebo nestlačíte Ctrl+C.
V databázovom programe sa pripojte na Host
127.0.0.1, Port3307, s používateľom a heslom z databázy (napríkladaplikace).
HeidiSQL aj DBeaver dokážu tunel vytvoriť samy. V HeidiSQL zvoľte typ siete MariaDB/MySQL cez SSH tunel (… (SSH tunnel)), v záložke SSH tunela vyplňte IP adresu VPS, port 22, používateľa a heslo alebo SSH kľúč a v hlavnom nastavení ako hostiteľa databázy 127.0.0.1. V DBeaveri v nastavení pripojenia pridajte SSH (tlačidlo plus, voľba SSH) a zaškrtnite Use SSH Tunnel.
Priamy prístup zvonku#
Použite iba vtedy, keď sa k databáze musí pripájať iný server alebo program, ktorý tunel nedokáže. Vždy obmedzte prístup na konkrétnu IP adresu.
Povoľte MariaDB počúvať na sieti. Vytvorte súbor
nano /etc/s obsahom: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 volieb databázového servera.bind-address = 0.0.0.0– počúvať na všetkých IPv4 adresách VPS (predvolené127.0.0.1v súbore50-server.cnfsa tým prepíše, pretože súbory sa načítavajú podľa abecedy a neskorší vyhráva).
Reštartujte MariaDB a overte počúvanie:
bash systemctl restart mariadb ss -tlnp | grep 3306Uvidíte
0.0.0.0:3306.Vytvorte používateľa s IP adresou, z ktorej sa budete pripájať (napríklad vaša verejná 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';Povoľte port
3306iba z tejto IP adresy vo firewalle zákazníckeho účtu (návod): pravidlo Prichádzajúce · Povoliť · TCP · port3306· Zdrojová IP198.51.100.25. Ak máte režim Povoliť všetko, pridajte pod neho ešte pravidlo Prichádzajúce · Zahodiť · TCP · port3306bez zdrojovej IP. Pravidlá sa vyhodnocujú zhora a prvá zhoda platí, takže vaša IP prejde a ostatné nie.Ak používate UFW, povoľte port aj v ňom:
bash ufw allow from 198.51.100.25 to any port 3306 proto tcpallow from 198.51.100.25– iba z vašej IP adresy.to any port 3306 proto tcp– na TCP port 3306.
Dynamická IP adresa
Domáce pripojenie často mení IP adresu. Po zmene sa nepripojíte a pravidlá musíte upraviť. Preto je na pripojenie z domu lepší SSH tunel.
Zálohy databázy#
Program mariadb-dump uloží databázu do SQL súboru, z ktorého ju kedykoľvek obnovíte.
Záloha jednej databázy:
mariadb-dump --single-transaction --routines --events aplikace > /root/aplikace-$(date +%F).sql--single-transaction– urobí konzistentnú zálohu tabuliek InnoDB bez zamykania, aplikácia môže bežať ďalej.--routines– zahrnie uložené procedúry a funkcie (bez prepínača sa nezálohujú).--events– zahrnie naplánované udalosti (tiež sa inak nezálohujú). Triggery sa zálohujú automaticky.aplikace– názov databázy.> /root/aplikace-$(date +%F).sql– uloží výstup do súboru s dnešným dátumom v názve.
Záloha všetkých databáz naraz a rovno komprimovaná:
mariadb-dump --single-transaction --routines --events --all-databases | gzip > /root/vsechny-db-$(date +%F).sql.gz--all-databases– všetky databázy vrátane príkazov na ich vytvorenie.| gzip >– skomprimuje výstup, SQL sa zvyčajne zmenší na zlomok.
Obnova:
mariadb aplikace < /root/aplikace-2026-10-01.sql
gunzip < /root/vsechny-db-2026-10-01.sql.gz | mariadb- Prvý riadok nahrá zálohu jednej databázy do existujúcej databázy
aplikace(ak neexistuje, vytvorte ju najprv príkazomCREATE DATABASE). - Druhý obnoví zálohu všetkých databáz; databázy si vytvorí sám.
Obnova prepisuje
Obnova zo zálohy prepíše tabuľky, ktoré v zálohe sú, ich stavom zo zálohy. Novšie dáta v nich sa stratia. Ak si nie ste istí, obnovte zálohu najprv do novej databázy (napríklad aplikace_test) a porovnajte.
Automatické nočné zálohy a ich odoslanie mimo VPS opisuje návod Zálohy na VPS.
Základ ladenia výkonu#
Najdôležitejšie nastavenie výkonu je innodb_buffer_pool_size: koľko RAM smie MariaDB použiť ako cache dát a indexov. Predvolená hodnota je 128 MB.
[mysqld]
innodb_buffer_pool_size = 1G| Nastavenie | Čo robí | Odporúčaná hodnota | Kedy zmeniť |
|---|---|---|---|
innodb_buffer_pool_size | Veľkosť cache pre dáta a indexy InnoDB. Čím viac dát sa do nej vojde, tým menej sa číta z disku. | Na VPS, kde bežia aj ďalšie služby: zhruba veľkosť databáz, najviac štvrtina RAM (napríklad 1G na VPS s 8 GB). Na VPS iba pre databázu až 80 % RAM. | Keď databáza rastie a dopyty spomaľujú. Zmenšite, keď VPS dochádza pamäť. |
Po úprave reštartujte MariaDB: systemctl restart mariadb. Veľkosť databáz zistíte dopytom:
SELECT table_schema AS db, ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb FROM information_schema.tables GROUP BY table_schema;Overenie#
systemctl is-active mariadbvypíšeactive.mariadb -u aplikace -p aplikace -e "SELECT 1;"po zadaní hesla vypíše tabuľku s číslom1.ss -tlnp | grep 3306ukazuje127.0.0.1:3306(iba lokálne), alebo0.0.0.0:3306, ak ste povolili priamy prístup.
Keď niečo nefunguje#
ERROR 1698 (28000): Access denied for user 'root'@'localhost'#
Prihlasujete sa ako databázový root heslom (mariadb -u root -p) alebo pod bežným systémovým používateľom. Root sa overuje cez unix socket: prihláste sa na VPS ako root a spustite iba mariadb, alebo použite sudo mariadb.
ERROR 1045 (28000): Access denied for user 'aplikace'@'localhost' (using password: YES)#
Nesprávne heslo, alebo používateľ s týmto hostom neexistuje. Skontrolujte SELECT User, Host FROM mysql.user;. Ak sa aplikácia pripája cez 127.0.0.1 a chyba uvádza 'aplikace'@'127.0.0.1', vytvorte používateľa aj s hostom 127.0.0.1 a prideľte mu rovnaké práva. Heslo nastavíte znova príkazom ALTER USER.
ERROR 1130 (HY000): Host '198.51.100.25' is not allowed to connect to this MariaDB server#
Pre túto IP adresu neexistuje žiadny používateľ. Vytvorte používateľa s hostom zodpovedajúcim vašej IP (kapitola Priamy prístup zvonku), alebo použite SSH tunel.
ERROR 2002 (HY000): Can't connect to local … server through socket '/run/mysqld/mysqld.sock' #
MariaDB nebeží. Skontrolujte stav a log:
systemctl status mariadb
journalctl -u mariadb -n 50journalctl -u mariadb -n 50– posledných 50 riadkov logu služby. Po úprave konfigurácie býva príčinou preklep v súbore.cnf; riadok s chybou je v logu uvedený.
ERROR 2003 (HY000): Can't connect to … server on '203.0.113.10'#
Spojenie zvonku neprešlo. Skontrolujte, že MariaDB počúva na 0.0.0.0 (ss -tlnp | grep 3306), že port 3306 povoľuje firewall zákazníckeho účtu aj UFW pre vašu IP a že sa vaša IP adresa nezmenila.
Import zálohy hlási Unknown command '\-'#
Nové verzie mariadb-dump vkladajú na začiatok súboru riadok so zapnutím „sandbox režimu“, ktorému nerozumie klient MySQL ani starší klient MariaDB. Importujte zálohu klientom mariadb rovnakej alebo novšej verzie. Ak musíte importovať do MySQL, zmažte z kópie súboru prvý riadok s textom enable the sandbox mode.
Zhrnutie
- MariaDB nainštalujete v záložke Databázy (Nainštalovať MariaDB) alebo príkazom
apt -y install mariadb-server. - Root sa prihlasuje bez hesla cez unix socket (
mariadbako root); aplikácie majú vlastných používateľov s právami iba k svojej databáze. - Databázy vytvárajte s
utf8mb4. - Z počítača sa pripájajte cez SSH tunel; priamy prístup iba s
bind-address, používateľom pre konkrétnu IP a firewallom. - Zálohujte príkazom
mariadb-dump --single-transactiona zálohy ukladajte aj mimo VPS.