MySQL a MariaDB: inštalácia a tvoja prvá databáza
Inštalácia databázového servera na VDS, bezpečné počiatočné nastavenie, vytvorenie databázy a používateľa, overenie pripojenia a bežné prvé chyby.
Aktualizované 23. augusta 2026
MySQL a jeho kompatibilná vetva MariaDB sú to, na čom beží väčšina PHP stránok. Ich príkazy a klient sú rovnaké; rozdiely sa začínajú pri ladení.
Inštalácia
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
Ak konkrétne potrebuješ Oracle MySQL, nainštaluj mysql-server z jeho oficiálneho repozitára. Služba sa bude volať mysql.
Základné diery hneď zatvor:
mariadb-secure-installation
Skript sa ťa opýta na nastavenie root hesla, odstránenie anonymných používateľov, zakázanie vzdialeného prihlásenia roota a zmazanie testovacej databázy. Na všetko odpovedz „áno“.
Databáza a používateľ
Nespúšťaj aplikáciu ako root — vytvor samostatného používateľa pre každý projekt:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
Kódovanie utf8mb4 je povinné: staré utf8 v MySQL ukladá len tri bajty na znak a rozbije sa na emoji a niektorých znakoch.
Skontroluj:
mariadb -u shop -p shop -e "SELECT 1;"
Viac o oprávneniach nájdeš v používatelia a granty.
Počiatočné nastavenie
Nastavenia sídlia v /etc/mysql/mariadb.conf.d/50-server.cnf alebo /etc/my.cnf.d/. Tu je minimum, ktoré by si mal hneď opraviť:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1 udržiava databázu dostupnú len lokálne. Ak je tvoja aplikácia na tom istom stroji, tak to má byť. Ak potrebuješ databázu zvonku, prečítaj si vzdialený prístup, kým čokoľvek zmeníš.
Veľkosť buffer poolu sa vyberá podľa tarifu — pozri ladenie pamäte.
Po úprave: systemctl restart mariadb.
Časté chyby
| Príznak | Príčina | Čo robiť |
|---|---|---|
Access denied for user | Nesprávne heslo alebo je záznam používateľa viazaný na iný hostiteľ | Skontroluj SELECT user, host FROM mysql.user; |
Can't connect through socket | Služba nebeží | systemctl status mariadb, pozri journalctl -u mariadb |
Too many connections | Aplikácia nezatvára spojenia | Pool na strane aplikácie, potom max_connections |
| Rozsypaný text | Rozdielne kódovania databázy a spojenia | Zjednoť všetko na utf8mb4 |
| Databáza sa po reštarte nespustí | Služba nie je nastavená na spustenie pri štarte | systemctl enable mariadb |
Neexistujú žiadne automatické zálohy stroja. Nastav dump hneď po prvej funkčnej tabuľke — zálohy databázy. NVMe disk je rýchly, ale je len jeden.