Primer uporabe dnevnikov pri obnavljanju podatkovne baze (MySQL)
Zahteve zaključka
Dnevniki transakcij v MySQL igrajo ključno vlogo pri zagotavljanju varnosti podatkov in obnavljanju podatkovne baze po napaki. Tukaj je primer:
1. Postopek izvajanja transakcije z uporabo dnevnikov
Predstavljajmo si, da aplikacija izvaja naslednjo transakcijo v MySQL:
START TRANSACTION;
-- Korak 1: Dodaj zapis v tabelo `Naročila`
INSERT INTO Naročila (ID, Kupec, Izdelek, Količina, Datum)
VALUES (123, 'Janez', 'Knjižica', 1, '2025-01-14');
-- Korak 2: Posodobi stanje zalog v tabeli `Izdelki`
UPDATE Izdelki
SET Zaloga = Zaloga - 1
WHERE Izdelek = 'Knjižica';
-- Korak 3: Dodaj zapis v tabelo `Plačila`
INSERT INTO Plačila (ID, NaročiloID, Znesek, Datum)
VALUES (456, 123, 15.00, '2025-01-14');
-- Potrditev transakcije
COMMIT;
2. Simulacija napake
Med izvajanjem transakcije, denimo med drugim korakom (UPDATE Izdelki
), pride do napake (npr. strojne napake ali izpada elektrike).
3. Obnavljanje s pomočjo dnevnika
Ko se MySQL podatkovna baza ponovno zažene, se z uporabo dnevnikov transakcij (redo log in undo log) izvede obnova:
- MySQL pregleda transakcijo v dnevniku in ugotovi, da transakcija ni bila potrjena (
COMMIT
ni izveden). - MySQL samodejno izvede povrnitev (rollback) vseh operacij te transakcije.
Primer povrnitve:
-- Povrnitev prvega koraka (odstranitev vstavljene vrstice iz `Naročila`)
DELETE FROM Naročila WHERE ID = 123;
-- Povrnitev drugega koraka (ponovna nastavitev zaloge)
UPDATE Izdelki
SET Zaloga = Zaloga + 1
WHERE Izdelek = 'Knjižica';
-- Povrnitev tretjega koraka (odstranitev vstavljene vrstice iz `Plačila`)
DELETE FROM Plačila WHERE ID = 456;
4. Rezultat
Stanje podatkovne baze je povrnjeno v stanje pred začetkom transakcije, kar zagotavlja skladnost in celovitost podatkov.
Ključni elementi dnevnikov v MySQL:
- Binary Log (
binlog
): Beleži vse spremembe v podatkovni bazi, ki jih je mogoče ponovno izvesti (redo log). Uporablja se tudi za replikacijo. - Undo Log: Beleži podatke za povrnitev sprememb, če transakcija ni bila potrjena.
- Transaction Isolation: Vzpostavlja pravila za sočasne transakcije in preprečuje konflikte.
Prednosti uporabe dnevnikov v MySQL:
- Zanesljivost podatkov: Zagotavljanje, da so potrjene transakcije trajno shranjene.
- Obnova po napaki: Povrnitev nepoterjenih sprememb in ponovna izvedba potrjenih transakcij.
- Podpora za ACID načela: Celovitost, skladnost, izolacija in trajnost transakcij.
Dnevniki so tako ključni del MySQL, saj zagotavljajo odpornost proti napakam in zanesljivo delovanje aplikacij.
Zadnja sprememba: torek, 14. januar 2025, 19.41