MySQL i MariaDB: instalacija i tvoja prva baza podataka
Instalacija database servera na VDS-u, bezbedno početno podešavanje, kreiranje baze podataka i korisnika, provera konekcije i česte prve greške.
Ažurirano 23. avgust 2026.
MySQL i njegov kompatibilni ogranak MariaDB su ono na čemu radi većina PHP sajtova. Njihove komande i klijent su isti; razlike počinju pri finom podešavanju.
Instalacija
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
Ako ti baš treba Oracle MySQL, instaliraj mysql-server iz njegovog zvaničnog repozitorijuma. Servis će se zvati mysql.
Odmah zatvori osnovne rupe:
mariadb-secure-installation
Skripta će te pitati da postaviš root lozinku, ukloni anonimne korisnike, zabrani udaljeni root login i obriše test bazu. Na sve odgovori „da”.
Baza i korisnik
Ne pokreći aplikaciju kao root — napravi odvojenog korisnika za svaki projekat:
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;
Kodiranje utf8mb4 je obavezno: stari utf8 u MySQL-u čuva samo tri bajta po karakteru i puca na emodžijima i nekim karakterima.
Proveri:
mariadb -u shop -p shop -e "SELECT 1;"
Više o dozvolama pogledaj u korisnici i dozvole.
Početno podešavanje
Podešavanja se nalaze u /etc/mysql/mariadb.conf.d/50-server.cnf ili /etc/my.cnf.d/. Evo minimuma koji treba odmah da ispraviš:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1 drži bazu dostupnom samo lokalno. Ako ti je aplikacija na istoj mašini, tako i treba da bude. Ako ti baza treba spolja, pročitaj udaljeni pristup pre nego što bilo šta menjaš.
Veličina buffer pool-a se bira po tieru — pogledaj podešavanje memorije.
Posle izmene: systemctl restart mariadb.
Česte greške
| Simptom | Uzrok | Šta da radiš |
|---|---|---|
Access denied for user | Pogrešna lozinka ili je unos korisnika vezan za drugi host | Proveri SELECT user, host FROM mysql.user; |
Can't connect through socket | Servis ne radi | systemctl status mariadb, pogledaj journalctl -u mariadb |
Too many connections | Aplikacija ne zatvara konekcije | Pool na strani aplikacije, pa onda max_connections |
| Izobličen tekst | Različita kodiranja za bazu i konekciju | Sve svedi na utf8mb4 |
| Baza se ne pokreće posle restarta | Servis nije podešen da se pokreće pri butovanju | systemctl enable mariadb |
Nema automatskih bekapa mašine. Podesi dump odmah posle prve tabele koja radi — bekapi baze. NVMe disk je brz, ali je samo jedan.