🗄️ MariaDB Navodila

Vodič za namestitev in upravljanje baze podatkov

1. Namestitev MariaDB

Korak 1: Posodobitev paketa sistema

Preden začnete, je priporočljivo posodobiti seznam dostopnih paketov:

sudo apt update

Korak 2: Namestitev MariaDB strežnika

Namestite MariaDB strežnik z naslednjim ukazom:

sudo apt install mariadb-server -y
ℹ️ Kaj se zgodi: Sistem bo namestil MariaDB strežnik skupaj z vsemi potrebnimi odvisnostmi.

Korak 3: Zagon in omogočitev MariaDB storitve

Zaženite MariaDB in omogočite njegov samodejni zagon ob ponovnem zagonu sistema:

sudo systemctl start mariadb && sudo systemctl enable mariadb
ℹ️ Kaj se zgodi: Prvi ukaz zažene storitev, drugi pa omogoči samodejni zagon ob vsakem zagonu sistema.

Korak 4: Preverjanje statusa

Preverite, ali je MariaDB pravilno zagnan:

sudo systemctl status mariadb
✓ Pričakovan rezultat: Videti bi morali sporočilo "active (running)".

2. Varnostna Konfiguracija

Zagon varnostnega skriptu

Zaženite varnostni skript za izboljšano zaščito:

sudo mariadb-secure-installation

Kaj naredi mariadb-secure-installation?

Ta skript naredi naslednje:
1. Nastavitev root gesla: Nastavi geslo za root uporabnika, ki ga v čisti namestitvi ni.
2. Odstranitev anonimnih uporabnikov: Izbriše anonimne račune, ki bi lahko predstavljali varnostno tveganje.
3. Onemogočanje oddaljenih prijav root-a: Preprečuje, da se root poveže preko omrežja, samo lokalno.
4. Odstranitev testne baze: Izbriše testno bazo "test", ki jo privzeto ustvari MariaDB.
5. Osveževanje privilegijev: Ponovno naloži tabelo privilegijev, da se vse spremembe uveljavijo.
⚠️ Priporočilo: Med izvajanjem priporočamo odgovarjati z "Y" (yes) na vsa vprašanja za maksimalno varnost.

3. Dostop do MariaDB

Prijava v MariaDB

Prijavite se v MariaDB s sledečim ukazom:

sudo mariadb -u root -p
ℹ️ Opombe:
-u root - prijava kot root uporabnik
-p - sistem vas bo pozval za geslo
• Po uspešni prijavi vidite MariaDB [(none)]> prompt

Ustvarjanje novega uporabnika

Ustvarite aplikacijskega uporabnika in mu dodelite pravice na bazi Baza_strank:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'MočnoGeslo!';
GRANT ALL PRIVILEGES ON Baza_strank.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
Ločite okolja: uporabite različne uporabnike za razvoj/test/produkcijo.
Scope pravic: zamenjajte ALL PRIVILEGES s točnejšimi (npr. SELECT,INSERT,UPDATE), če ne potrebujete vsega.
Host: za oddaljene povezave uporabite 'appuser'@'%' ali konkretni IP, vendar dodajte firewall/SSL.

Sprememba gesla obstoječega uporabnika

Geslo obstoječega uporabnika spremenite z ukazom:

ALTER USER 'appuser'@'localhost' IDENTIFIED BY 'NovoGeslo!';
FLUSH PRIVILEGES;
⚠️ Nasvet: po spremembi gesla posodobite konfiguracije aplikacij (DSN, .env) in ponovno zaženite storitve, ki se povezujejo na bazo.

4. Ustvarjanje Baze Podatkov in Tabele

Korak 1: Ustvarjanje baze podatkov

Ko ste prijavljeni v MariaDB, ustvarite novo bazo:

CREATE DATABASE Baza_strank;
✓ Pričakovan rezultat: Query OK, 1 row affected

Korak 2: Izbira baze podatkov

Izberite bazo, v kateri želite delati:

USE Baza_strank;
✓ Pričakovan rezultat: Database changed

Korak 3: Ustvarjanje tabele "stranke"

Ustvarite tabelo za shranjovanje podatkov o strankah:

CREATE TABLE stranke (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ime VARCHAR(50) NOT NULL,
    priimek VARCHAR(50) NOT NULL,
    enaslov VARCHAR(100) NOT NULL,
    domaci_naslov VARCHAR(150) NOT NULL,
    starost INT NOT NULL,
    spol ENUM('M', 'Z') NOT NULL
);

Razlaga strukture tabele:

Polje Tip Opis
id INT AUTO_INCREMENT PRIMARY KEY Unikaten identifikator, avtomatično se povečuje
ime VARCHAR(50) NOT NULL Ime stranke, obvezno polje, max 50 znakov
priimek VARCHAR(50) NOT NULL Priimek stranke, obvezno polje, max 50 znakov
enaslov VARCHAR(100) NOT NULL Elektronski naslov, obvezno polje, max 100 znakov
domaci_naslov VARCHAR(150) NOT NULL Domači naslov, obvezno polje, max 150 znakov
starost INT NOT NULL Starost stranke v letih, obvezno polje
spol ENUM('M', 'Z') NOT NULL Spol (M=Moški, Z=Ženska), obvezno polje
✓ Pričakovan rezultat: Query OK, 0 rows affected

Korak 4: Preverjanje tabele

Preverite strukturo tabele:

DESCRIBE stranke;
ℹ️ Kaj se zgodi: Prikazani bodo vsi stolpci tabele z njihovimi tipi in svojstvami.

5. Uvoz Podatkov iz CSV Datoteke

Korak 1: Priprava CSV datoteke

CSV datoteka s podatki o strankah mora biti v direktoriju /var/lib/mysql-files/ z imenom stranke.csv

⚠️ Pomembno: MariaDB zahteva, da se podatki nahajajo v specifičnem direktoriju iz varnostnih razlogov.

Struktura CSV datoteke:

Prva vrstica so nazivi stolpcev:

ime,priimek,enaslov,domaci_naslov,starost,spol

Sledi primer vrstice s podatki:

Luka,Kranjc,[email protected],"Cesta 12, Ljubljana",32,M

Korak 2: Uvoz podatkov v bazo

Uporabite naslednji SQL ukaz za uvoz podatkov:

LOAD DATA INFILE '/var/lib/mysql-files/stranke.csv'
INTO TABLE stranke
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(ime, priimek, enaslov, domaci_naslov, starost, spol);

Razlaga ukaza:

LOAD DATA INFILE: Naloži podatke iz datoteke
FIELDS TERMINATED BY ',': Polja so ločena z vejicami
ENCLOSED BY '"': Besedilo je obdano z narekovaji
LINES TERMINATED BY '\n': Vrstice se končajo z novo vrstico
IGNORE 1 ROWS: Preskoči prvo vrstico (nazive stolpcev)
✓ Pričakovan rezultat: Query OK, XXX rows affected (XXX je število uvoženih vrstic)

Korak 3: Preverjanje uvoženih podatkov

Preverite, ali so se podatki uspešno uvozili:

SELECT COUNT(*) FROM stranke;

Oglejte si prve vrstice:

SELECT * FROM stranke LIMIT 5;

6. Koristni SQL Ukazi

Prikaz vseh baz podatkov:

SHOW DATABASES;

Prikaz vseh tabel v trenutni bazi:

SHOW TABLES;

Prikaz vseh podatkov iz tabele:

SELECT * FROM stranke;

Posodobitev podatkov (UPDATE):

UPDATE stranke
SET starost = 33, enaslov = '[email protected]'
WHERE ime = 'Luka' AND priimek = 'Kranjc';
SET: določite stolpce in nove vrednosti
WHERE: obvezno zožite na konkretne vrstice, da ne posodobite celotne tabele
Preveri pred potrditvijo: najprej izvedite SELECT ... WHERE ..., da vidite, katere vrstice bodo prizadete

ALTER TABLE: dodajanje stolpca

ALTER TABLE stranke ADD 
COLUMN telefon VARCHAR(30) AFTER enaslov;

ALTER TABLE: sprememba tipa stolpca

ALTER TABLE stranke
MODIFY COLUMN starost SMALLINT NOT NULL;

ALTER TABLE: brisanje stolpca

ALTER TABLE stranke
DROP COLUMN telefon;
⚠️ Pazljivo: pred spremembami strukture naredite varnostno kopijo (npr. mysqldump), spremembe lahko povzročijo izgubo podatkov ali nedelovanje aplikacije.

Iskanje določenega podatka:

SELECT * FROM stranke WHERE ime = 'Luka';

Štetje podatkov:

SELECT COUNT(*) FROM stranke;

Izpis specifičnih stolpcev:

SELECT ime, priimek, starost FROM stranke;

Izhod iz MariaDB:

EXIT;

DELETE: brisanje specifičnih vrstic

DELETE FROM stranke
WHERE starost > 80;
Kaj naredi: izbriše vrstice, ki ustrezajo pogoju WHERE
Počasno: za velike količine podatkov (počasnejše kot TRUNCATE)
Reverzibilno v transakciji: uporabite BEGIN; pred ukazom, ROLLBACK; za preklicanje
⚠️ Varnostna opozorila: vedno napišite WHERE pogoj! Brez WHERE se izbrisejo vse vrstice.

TRUNCATE: hitro brisanje vseh vrstic

TRUNCATE TABLE stranke;
Kaj naredi: izbriše vse vrstice iz tabele in resetira avtoinkrementni ID na 1
Hitro: hitrejše kot DELETE, ker ne shranjuje informacij o brisanih vrsticah
Nema WHERE: ne morete filtrirati - briše vse ali nič
Ni transakcij: ne morete uporabiti ROLLBACK za preklicanje
⚠️ Pazljivo: TRUNCATE je nepovratna operacija in se ne da preklicati s ROLLBACK!

DROP TABLE: brisanje celotne tabele

DROP TABLE stranke;
Kaj naredi: izbriše tabelo in vso njeno strukturo ter podatke
Popolna izbris: izbrisani so tudi indeksi, sprožilci in omejitve
Nepovratno: podatke in strukturo je mogoče obnoviti samo iz varnostne kopije
⚠️ Zelo pazljivo: DROP TABLE ne morete preprečiti s ROLLBACK (v večini primerov)!

DROP DATABASE: brisanje celotne baze

DROP DATABASE Baza_strank;
Kaj naredi: izbriše bazo in vse njene tabele, podatke in strukture
Vse je izbrisano: ni nobenih ostankov, kot da baza nikoli ni obstajala
Nepovratno: samo varnostne kopije vam lahko povrnejo podatke
⚠️ Kritično: to je nepopravljivo, prejšnje preverite, ali potrebujete to bazo!

Primerjava: DELETE vs TRUNCATE vs DROP TABLE

Ukaz Podatki Struktura Hitrost Transakcija
DELETE Izbrisani Ohranjena Počasno Da (ROLLBACK)
TRUNCATE Izbrisani Ohranjena Hitro Ne (redko)
DROP TABLE Izbrisani Izbrisana Hitro Ne

COUNT: štetje vrstic

SELECT COUNT(*) AS skupaj_vrstic FROM stranke;
Kaj naredi: prešteje vse vrstice v tabeli
COUNT(*) - šteje tudi NULL vrednosti
AS skupaj_vrstic - izpiše rezultat z imenom stolpca

SUM: seštevanje vrednosti

SELECT SUM(starost) AS skupna_starost FROM stranke;
Kaj naredi: sešteje vse vrednosti v stolpcu
Primer: sešteje starost vseh strank za povprečje
NULL vrednosti: SUM ignora NULL vrednosti

AVG: povprečna vrednost

SELECT AVG(starost) AS povprecna_starost FROM stranke;
Kaj naredi: izračuna povprečno vrednost
Formula: SUM / COUNT (ne šteje NULL)
Rezultat: lahko ima decimalke

MIN in MAX: najmanjša in največja vrednost

SELECT 
MIN(starost) AS najmanjsa_starost,
MAX(starost) AS najvecja_starost
FROM stranke;
MIN: najde najmanjšo vrednost v stolpcu
MAX: najde največjo vrednost v stolpcu
Obstajajo za: številske, datumske in besedilne podatke

GROUP BY: grupiranje podatkov

SELECT spol, COUNT(*) AS stevilo FROM stranke
GROUP BY spol;
Kaj naredi: grupiira vrstice po vrednosti in izvršuje agregatne funkcije na skupini
Primer: prešteje koliko je moških in koliko žensk
Obvezno: če napišete GROUP BY, morajo biti vsi stolpci v SELECT ali agregatne funkcije

HAVING: filtriranje skupin

SELECT spol, COUNT(*) AS stevilo FROM stranke
GROUP BY spol
HAVING COUNT(*) > 150;
Kaj naredi: filtrira skupine na osnovi agregatne funkcije
Razlika od WHERE: WHERE filtrira vrstice pred grupiranjem, HAVING pa za grupiranjem
Primer: prikaže samo tiste spole, katerih skupna štika je več kot 150

Napredni primer: grupiiranje z več agregatnimi funkcijami

SELECT spol,
COUNT(*) AS stevilo,
AVG(starost) AS povprecna_starost,
MIN(starost) AS najmanjsa_starost,
MAX(starost) AS najvecja_starost
FROM stranke
GROUP BY spol
HAVING COUNT(*) >= 50;
Kaj naredi: za vsak spol prikaže statistiko
HAVING: prikaže samo spole s 50 ali več strankami
Primerno za: analizo in poročanje

Primerjava agregatnih funkcij

Funkcija Kaj naredi Primer rezultata
COUNT(*) Šteje vrstice 500
SUM(starost) Sešteje vrednosti 16234
AVG(starost) Povprečje 32.47
MIN(starost) Najmanjša vrednost 18
MAX(starost) Največja vrednost 89

7. CSV Datoteka s Podatki

Pregled Datoteke

Spodaj je predogled prvih podatkov iz CSV datoteke:

ime,priimek,enaslov,domaci_naslov,starost,spol
Luka,Kranjc,[email protected],"Cesta 12, Ljubljana",32,M
Ana,Horvat,[email protected],"Pot 5, Maribor",28,Z
Marko,Novak,[email protected],"Ulica 3, Celje",41,M
Maja,Zupan,[email protected],"Trg 1, Kranj",22,Z
Tina,Kos,[email protected],"Pot 7, Novo mesto",37,Z
Peter,Kovač,[email protected],"Cesta 19, Ptuj",45,M
Matej,Breznik,[email protected],"Ulica 14, Velenje",29,M
Sara,Oblak,[email protected],"Trg 6, Murska Sobota",33,Z
Nina,Bizjak,[email protected],"Ulica 11, Koper",26,Z
Jure,Petek,[email protected],"Cesta 8, Izola",39,M
ℹ️ Skupaj: Datoteka vsebuje več kot 300 vrstic s podatki o strankah iz različnih slovenskih mest.

Prenos Datoteke

Datoteko lahko prenesete s klikom na gumb spodaj:

📥 Prenesi stranke.csv

Navodila za prenos:

1. Kliknite na gumb "Prenesi stranke.csv"
2. Datoteka se bo prenesla v vašo mapo za prenos
3. Datoteko prenesete v direktorij /var/lib/mysql-files/ na vašem strežniku

Kako prenesti datoteko na strežnik

Ko ste datoteko prenesli, jo prenesete na strežnik s sledečim ukazom:

sudo cp stranke.csv /var/lib/mysql-files/

Nastavite ustrezne pravice za dostop:

sudo chmod 644 /var/lib/mysql-files/stranke.csv

Preverite, da je datoteka na mestu:

ls -la /var/lib/mysql-files/stranke.csv

Direkten prenos datoteke v /var/lib/mysql-files/ s curl

Datoteko lahko prenesete direktno v želeno lokacijo z enim samim ukazom:

sudo curl -o /var/lib/mysql-files/stranke.csv https://mariadb.leonmetelko.net/stranke.csv
-o - shrani datoteko direktno na pot /var/lib/mysql-files/stranke.csv
sudo - potreben je za pisanje v direktorij (potrebna administratorska pravica)
Hitro: datoteka se prenesla in nemudoma pravilno umestila

Nastavitev pravic po prenosu s curl

Po prenosu preverite in po potrebi popravite pravice:

sudo chmod 644 /var/lib/mysql-files/stranke.csv
ls -la /var/lib/mysql-files/stranke.csv

Avtomatski bash skript za prenos in namestitev

Skripta, ki avtomatsko prenese datoteko in nastavi pravice:

#!/bin/bash

echo "Prenaša datoteko s curl..."
sudo curl -o /var/lib/mysql-files/stranke.csv https://mariadb.leonmetelko.net/stranke.csv

if [ $? -eq 0 ]; then
    echo "✓ Prenos je uspešen"
    sudo chmod 644 /var/lib/mysql-files/stranke.csv
    echo "✓ Pravice nastavljene"
    ls -la /var/lib/mysql-files/stranke.csv
else
    echo "✗ Napaka pri prenosu datoteke"
    exit 1
fi
$? -eq 0 - preveri status prejšnjega ukaza (0 = uspešno)
Avtomatizacija: idealno za cron naloge in avtomatske posodobitve

Prenos datoteke med računalniki s rsync

Če imate datoteko na drugih računalniku, jo prenesete s pomočjo rsync. Rsync je hitrejši in bolj zanesljiv od standardnega kopiranja.

rsync: nalaganje datoteke na strežnik

rsync -avz stranke.csv [email protected]:/var/lib/mysql-files/
-a (archive): ohrani dovoljenya, lastnika in datume
-v (verbose): prikaže napredek prenosa
-z (compress): komprimira podatke med prenosom za hitrejši prenos
[email protected] - SSH prijava na računalnik
:/var/lib/mysql-files/ - cilja pot na oddaljenem strežniku

rsync: nalaganje datoteke S strežnika

rsync -avz [email protected]:/var/lib/mysql-files/stranke.csv ./
Obratna smer: prenesete datoteko z daljinskega strežnika na lokalni računalnik
./ - datoteka se bo prenešla v trenutni direktorij

rsync: sinhronizacija celotnega direktorija

rsync -avz --delete podatki/ [email protected]:/var/lib/mysql-files/
podatki/ - več datotek iz lokalnega direktorija
--delete - izbriše datoteke na ciljnem strežniku, ki jih nima lokalnih (pazljivo!)
Primerno za: redne sinhronizacije in varnostne kopije
⚠️ Pazljivo s --delete: lahko nepopravno izbriše datoteke na oddaljenem strežniku!

rsync s SSH ključem (brez gesla)

rsync -avz -e "ssh -i ~/.ssh/id_rsa" stranke.csv [email protected]:/var/lib/mysql-files/
-e "ssh -i ~/.ssh/id_rsa" - uporabi SSH ključ namesto gesla
Varnost: SSH ključi so bolj varni kot gesla
Avtomatizacija: idealno za skripte in avtomatske naloge

rsync: primerjava s SCP in ostalimi načini

Metoda Hitrost Kompresija Ponovni poskus Idealno za
rsync Hitra Da (-z) Da (le spremembe) Sinhronizacija
scp Srednja Ne Ne Enostavni prenos
sftp Srednja Ne Delno Interaktivni prenos
wget/curl Srednja Da Da Prenos datotek po HTTP

Statistika Podatkov

Lastnost Vrednost
Skupno število vrstic s podatki 300+
Število polj na vrstico 6
Izvor podatkov Različna slovenska mesta
Format datoteke CSV (Comma-Separated Values)
Kodiranje znakov UTF-8

8. Pogosta Vprašanja

V: Kaj če nastavim napačno geslo pri mariadb-secure-installation?

O: Geslo se da spremeniti z ukazom: sudo mysql -u root in nato ALTER USER 'root'@'localhost' IDENTIFIED BY 'novo_geslo';

V: Kako zamenjam bazo, na kateri želim delat?

O: Uporabite USE druga_baza; za izbor druge baze.

V: Kje najdem CSV datoteko?

O: CSV datoteka mora biti v direktoriju /var/lib/mysql-files/ z dovoljenjem za branje za MariaDB storitev.

V: Kaj če imam napako pri uvozu podatkov?

O: Preverite format CSV datoteke, pravico do dostopa in da je pot do datoteke pravilna. Uporabite SHOW ERRORS; za prikaz napak.