24 Nisan 2024 Yazarı yhackup 0

MySQL Event Kullanımı

Eventler, MySQL’e 5.1.6 Sürümünden sonra gelen Zamanlanmış Görevler özelliğidir ve varsayılanda kapalıdır.

Öncelikle Aşağıdaki komutla bu özellik açılır.

SET GLOBAL event_scheduler = 1;

Şimdi bir senaryo üzerinde anlayalım, benim sürekli hata analizleri için kullandığım bir kaç tabloyu daha fazla şişmemesi için belirli periyotlarla silmek ve optimize etmek istiyorum.
Son 3 günüm kayıtları benim görüp analiz etmem için yeterli, gerisine gerek yok…

Eventime bir isim veriyorum cleaner,

CREATE EVENT cleaner

ve sayacımı ayarlıyorum, ben bu eventimin 2016-06-18 19:00:00 tarihinden başlayarak, her 24 saatte bir çalışmasını istiyorum.  yani her gün saat 19:00:00 da bu eventim çalışacak,

ON SCHEDULE EVERY 24 HOUR STARTS '2016-06-18 19:00:00'

Kullanabileceğimiz Interval’ler, her gün her ay her yıl vs vs

YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND

Ve eventimiz çalıştırılmaya (DELIMITER ile) hazır.

CREATE EVENT cleaner
ON SCHEDULE EVERY 24 HOUR STARTS
DO
BEGIN  
  DELETE FROM llpano WHERE tarih < DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);
  DELETE FROM ops_havuz WHERE tarih < DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);
  DELETE FROM ops_havuzlog WHERE tarih < DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY );
  SET @maxid = 0 ;
  SELECT ifnull(max(id),0) INTO @maxid FROM ops_ptt;
  DELETE from ops_ptt WHERE id < (@maxid-1000);
  OPTIMIZE TABLE llpano;
  OPTIMIZE TABLE ops_havuz;
  OPTIMIZE TABLE ops_havuzlog;
  OPTIMIZE TABLE ops_ptt;
END

#Mysql’de var olan Eventlerimi listelemek için,
SHOW EVENTS;

#Event Statüsünü Değiştirmek İçin,
ALTER EVENT cleaner DISABLE;
ALTER EVENT cleaner ENABLED;

#Event Zamanını Değiştirmek İçin,
ALTER EVENT cleaner ON SCHEDULE EVERY 12 HOUR;

#Event Silmek İçin,
DROP EVENT cleaner

Daha fazla bilgi için ->