MySQL patrí medzi najznámejšie databázové systémy založené na SQL a postupom času bol rozšírený o rôzne zaujímavé vlastnosti, ktoré síce priamo nesúvisia s databázami, ale napriek tomu rozširujú potenciál MySQL. V tomto článku si predstavíme možnosti jeho plánovača udalostí, pomocou ktorého je možné plánovať vykonávanie SQL príkazov.
Výhody plánovača udalostí v MySQL
Plánovač udalostí MySQL (MySQL Event Scheduler) umožňuje nastaviť pravidelné alebo jednorázové spustenie SQL príkazov, tzv. udalostí, v zadanom čase. Z tohto hľadiska sa podobá na obdobné mechanizmy v operačných systémoch, konkrétne cron v linuxových OS, či Task Scheduler vo Windows. Narozdiel od nich je však popisované plánovanie priamo súčasťou databázového servera. To v prípade SQL príkazov prináša viaceré výhody – na spúšťanie takýchto úloh nie je potrebné mať prístup k shellu nutnému na konfiguráciu cronu, ani prístup k samotnému cronu. Tiež nie je potrebné vytvárať jednoduché obaľovacie (wrapper) skripty, ktoré by sa museli pripájať k databáze a následne vykonávať požadované SQL príkazy. Okrem toho sú takto plánované udalosti súčasťou databázy, a teda ich zálohovanie alebo export nie je potrebné riešiť osobitne.
Príkazy na manipuláciu s udalosťami
Na prácu s udalosťami poskytuje MySQL nasledujúce príkazy, ktoré si bližšie predstavíme:
CREATE EVENT
– vytvára udalosť,ALTER EVENT
– upravuje vlastnosti udalosti,DROP EVENT
– ruší udalosť,SHOW EVENTS
– zobrazuje existujúce udalosti.
CREATE EVENT
Pri vytváraní udalosti príkazom CREATE EVENT
potrebujeme špecifikovať názov udalosti, ktorým ju budeme identifikovať, ďalej časové parametre určujúce jej spúšťanie a samozrejme príkaz(y), ktoré chceme spúšťať. Jednoduchý príkaz na vytvorenie udalosti môže vyzerať nasledovne:
CREATE EVENT precisti_log ON SCHEDULE EVERY 1 DAY DO DELETE FROM log_pristupov WHERE cas_pristupu < DATE_SUB(CURDATE(), INTERVAL 1 WEEK)
Vytvorenie tejto udalosti zabezpečí, že príkaz DELETE
, ktorý z logu prístupov zmaže záznamy staršie ako týždeň, sa bude vykonávať pravidelne s frekvenciou jedenkrát denne, pričom prvýkrát sa vykoná v okamihu definovania udalosti.
Frekvenciu spúšťania udalosti špecifikujeme pomocou čísla alebo výrazu, ktorý sa vyhodnotí na číslo, nasledovaného časovou jednotkou (napríklad SECOND, MINUTE, HOUR, DAY, WEEK
; vždy v jednotnom čísle).
V uvedenom príklade je použitý iba jeden príkaz, avšak pomocou BEGIN ... END
notácie je možné zadať viacero príkazov oddelených bodkočiarkami:
CREATE EVENT updatuj_statistiku ON SCHEDULE EVERY 15 MINUTE DO BEGIN INSERT INTO statistika_prihlaseni (cas, pocet) VALUES (CURRENT_TIMESTAMP(), SELECT COUNT(*) FROM prihlaseni_uzivatelia); UPDATE stav SET atribut = atribut + 2 WHERE typ = 9; END
Túto udalosť by sme mohli upraviť tak, aby sa príkazy začali vykonávať až od určitého okamihu v budúcnosti, alebo by sme mohli určiť, že udalosť sa bude pravidelne vykonávať iba do určitého okamihu. To je možné dosiahnuť doplnením klauzúl STARTS
alebo ENDS
, u ktorých je potrebné uviesť buď iba časový okamih (timestamp
) alebo časový okamih plus nejaký časový interval (timestamp + INTERVAL pocet casova_jednotka
; vhodné napríklad na špecifikovanie času o hodinu neskôr):
CREATE EVENT updatuj_statistiku ON SCHEDULE EVERY 15 MINUTE STARTS CURRENT_TIMESTAMP() + INTERVAL 1 HOUR ENDS '2013-10-01' DO ...
Okrem pravidelných udalostí môžeme definovať udalosť, ktorá sa vykoná jednorázovo, a to tak, že namiesto EVERY
použijeme AT
a špecifikujeme časový okamih (prípadne aj plus interval), podobne ako u STARTS/ENDS
:
CREATE EVENT jednorazova_udalost ON SCHEDULE AT CURRENT_TIMESTAMP() + INTERVAL 6 HOUR DO ...
Na záver ešte doplníme, že ak udalosť "vyprší", automaticky sa zmaže. Vypršanie u jednorázových udalostí predstavuje ich vykonanie a u pravidelných udalostí so špecifikovaným koncovým časom je to posledné plánované vykonanie.
ALTER EVENT
U vytvorenej udalosti je možné upravovať jej špecifikáciu príkazom ALTER EVENT
. Tento príkaz vyžaduje ako argument identifikátor udalosti a jednu alebo viacero zo špecifikačných klauzúl, podobných ako u CREATE EVENT
:
ON SCHEDULE schedule
– úprava časových aspektov vykonávania udalosti (EVERY, AT
), prípadne môže meniť jednorázovú udalosť na pravidelnú a naopak,RENAME TO novy_nazov
– premenovanie udalosti,DISABLE
– zakázanie vykonávania udalosti,ENABLE
– povolenie vykonávania udalosti,DO prikaz
– nahradenie vykonávaných príkazov inými.
Nasledovným príkazom upravíme interval spúšťania udalosti updatuj_statistiku
a dočasne ju zakážeme:
ALTER EVENT updatuj_statistiku ON SCHEDULE EVERY 1 HOUR DISABLE
DROP EVENT, SHOW EVENTS
Zostávajúce dva príkazy sú už celkom jednoduché. Príkaz DROP EVENT nazov_udalosti
zmaže špecifikovanú udalosť, takže v budúcnosti sa už nebude vykonávať. Príkaz SHOW EVENTS
zas zobrazuje zoznam udalostí definovaných v aktuálnej databáze a základné informácie o nich.
Ďalšie informácie
Tento článok predstavil základné informácie potrebné pre používanie udalostí v MySQL, ktoré môžete používať na Elbia Hostingu. Podrobnejšie informácie môžete nájsť v oficiálnej dokumentácii.
Žiadne komentáre:
Zverejnenie komentára