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;
Szerző: László Gazsi
Szabadúszó frontend fejlesztő. Honlapom: Freelance Software Developer.