MySQL feladatok ütemezése - Szoftver Tippek

MySQL feladatok ütemezése

Amennyiben egy nagyobb weboldalt üzemeltetünk, tegyük fel, egy egyszerű webshopot vagy látogatottságmérő rendszert, rengeteg olyan fölösleges adat halmozódhat fel az adatbázisban, amelynek egy idő után semmi haszna, azonban lassítják a rendszert. Hogy ezt megelőzhessük, bizonyos időközönként törölnünk kell a fölöslegessé vált adatokat adatbázisunkból.

A legtöbb weboldal PHP és MySQL technológiákat használ és nagy valószínűséggel Apache webszerveren fut valamilyen Linux disztribúción, így a legtöbb programozó csak létrehoz egy egyszerű scriptet, amit betesz egy Cron Job-ba Linux alatt. Ennek is megvannak az előnyei és hátrányai. MySQL adatbázis használata esetében azonban ennél egyszerűbben is megoldható a probléma, ugyanis közvetlenül a MySQLben ütemezhetünk be feladatokat.

1. MySQL feladatütemező aktiválása

A MySQL feladatütemező bekapcsolásához a következő SQL parancsot kell lefuttatnunk:

SET GLOBAL event_scheduler = ON

Csakis adminisztrátor (root) felhasználóval fog sikeresen lefutni vagy olyan speciális felhasználóval, amelynek azelőtt jogot adtunk. Shared tárhelyen erre nincs lehetőségünk, azonban egy VPSen futó saját adatbázison van. Ezzel a paranccsal aktiváltuk a MySQL feladatütemezőjét, így a továbbiakban elkezdhetünk MySQL feladatokat létrehozni, amelyeket az adatbázis szerver a megadott időközönként lefuttat.

2. MySQL feladatok ütemezése

MySQL adatbázisszerveren SQL segítségével könnyedén hozhatunk létre feladatokat, amelyeket a szerver automatikusan lefuttat majd a megadott időpontban vagy időpontokban. Tegyük fel, hogy van egy webshopunk és egy kosar nevű táblában tároljuk a felhasználók kosarának tartalmát. Ezek a sorok az adatbázisban maradnak a rendelés befejeztével is. Ezekre már nincs szükség, fölöslegesen foglalják a helyet az adatbázisunkban és lassítják az írás, illetve olvasás műveleteket a táblán. Ezektől az adatoktól egyszerűen megszabadulhatunk és tisztán tarthatjuk a táblát, ha mondjuk minden nap egyszer lefuttatunk egy szkriptet, ami kitörli a már befejezett rendelésekhez tartozó kosarakat az adatbázisból:


CREATE EVENT kosarTisztogato
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM kosar WHERE rendeles_allapot = "BEFEJEZVE";

A fenti szkript létrehoz egy “kosarTisztogato” nevű feladatot, amely egy egyszerű DELETE parancsot futtat le minden 1 napban.

3. MySQL ütemezett feladatok szerkesztése

A létrehozott MySQL ütemezett feladatokat természetesen szerkeszthetjük, megváltoztathatjuk a futtatások időpontját, magát a feladatot vagy akár a feladat nevét is.

3.1 Időpontok megváltoztatása

A feladatok időpontját utólag is változtathatjuk. Tegyük fel, hogy nem naponta, hanem havonta szeretnénk lefuttatni a feladatot:


ALTER EVENT kosarTisztogato
ON SCHEDULE EVERY 1 MONTH
STARTS '2012-12-01 00:00:00'

3.2 Feladat logikájának megváltoztatása

Akár magát a feladatot is módosíthatjuk utólag:


ALTER EVENT kosarTisztogato
DO
DELETE FROM kosar WHERE rendeles_allapot = "BEFEJEZVE" OR "MEGHIUSULT";

3.3 Feladat átnevezése

A létrehozott feladatunkat egyszerűen átnevezhetjük a következő parancs segítségével:


ALTER EVENT kosarTisztogato
RENAME TO cartCleanUp;

4. MySQL ütemezett feladatok törlése

A létrehozott feladatokat könnyedén törölhetjük. Az előbb létrehozott feladat esetében a következő SQL paranccsal törölhetjük az ütemezett feladatot:


DROP EVENT kosarTisztogato;

5. Ütemezett feladatok megtekintése

Egy egyszerű SQL paranccsal kilistázható az összes ütemezett feladat:


SHOW EVENTS;



A hozzászólások lezárultak.