MySQL olay zamanlayıcısı (event scheduler)

event-scheduler

MySQL olay zamanlayıcısı (event scheduler) periyodik olarak veya sadece 1 kez tetiklenebilir olayları planlamak için kullanılır. Olay zamanlayıcısı Mysql’e 5.1.6 sürümünde eklenmiştir. Dolayısıyla alt sürümlerde desteklenmez.

Olay zamanlayıcısını Unix’te bulunan cron job (zamanlanmış görev) gibi düşünebilirsiniz.

Varsayılan olarak olay zamanlayıcısı devre dışıdır. Yine de kontrol etmek isterseniz:

SHOW PROCESSLIST;

show-process-1

Sorgusunu çalıştırın. Eğer sorgu sonucunda event_scheduler görüyorsanız olay zamanlayıcısı aktiftir. Göremiyorsanız devre dışıdır. Olay zamanlayıcısını etkinleştirmek için:

SET GLOBAL event_scheduler = ON;

Sorgusunu çalıştırabilirsiniz. Olay zamanlayıcısını etkinleştirdikten sonra SHOW PROCESSLIST sorgusunu tekrar çalıştırırsanız işlem listesinde event_scheduler kısmını göreceksiniz.

show-process-2

Olay zamanlayıcısını kapatmak için:

SET GLOBAL event_scheduler = OFF;

Sorgusunu çalıştırabilirisiniz.

Yeni bir etkinlik oluşturmak ve planlamak için CREATE EVENT söz dizimi kullanılır.

CREATE EVENT ekle
ON SCHEDULE at current_timestamp
DO
insert into veri(metin,tarih) values('Event testi',NOW());

Buradaki “ekle” olayımızın adıdır. “ON SCHEDULE” sözcüğünden sonra kullandığımız “at” olayı sadece bir kere çalıştırır. Olayı belirli zaman aralıklarında çalıştırmak için “every” kullanılır. ” current_timestamp” şu anki zamanı temsil eder. “Do” sözcüğünden sonra da çalıştırılacak olan sql cümleciği yazılır.

Olay zamanlayıcısı çeşitli ayarlarla oluşturulabilir.

Belirli bir tarih/zamanda olayı bir kez çalıştırmak: at “2015-02-14 20:15:10” (YYYY-MM-DD HH:MM:SS)

CREATE EVENT temizle
ON SCHEDULE at '2016-01-01 00:00:00'
DO
delete from mesajlar where mesajTarih < DATE_SUB(NOW(), INTERVAL 1 WEEK);

Yukarıda oluşturduğumuz “temizle” isimli olay 2016 yılbaşı gecesi sadece bir kez çalışacaktır.

Belirli bir süre geçtikten sonra sadece bir kez çalıştırmak: at current_timestamp + interval x [HOUR|MONTH|WEEK|DAY|MINUTE] Örnek: at current_timestamp + interval 1 hour

CREATE EVENT temizle2
ON SCHEDULE at current_timestamp + interval 1 day
DO
delete from mesajlar where mesajTarih < DATE_SUB(NOW(), INTERVAL 1 WEEK);

“temizle2” isimli olay bir gün sonra bir kez çalışacaktır.

Olayı belirli aralıklarla çalıştırmak: every x [HOUR|MONTH|WEEK|DAY|MINUTE] Örnek: every 1 day

CREATE EVENT temizle3
ON SCHEDULE every 1 day
DO
delete from mesajlar where mesajTarih < DATE_SUB(NOW(), INTERVAL 1 WEEK);

“temizle3” isimli olay her gün çalışacaktır.

İki tarih arası belirli aralıklarla çalıştırmak: every x [HOUR|MONTH|WEEK|DAY|MINUTE] starts tarih ends tarih Örnek: every 1 mounth starts current_timestamp + interval 1 day ENDS “2016-01-01 00:00:00”

delimiter |
CREATE EVENT temizle4
ON SCHEDULE every 1 day
Starts '2016-01-01 00:00:00'
ENDS '2017-01-01 00:00:00'
DO BEGIN
delete from mesajlar where mesajTarih < DATE_SUB(NOW(), INTERVAL 1 WEEK);
END |
delimiter ;

“temizle4” isimli olayımız 2016 ve 2017 yılları arasında hergün çalışacaktır.

Bu konuda bir örnek daha yapalım. Bugünden başlayarak 10 gün boyunca her gün çalışan bir olay oluşturalım.

delimiter |
CREATE EVENT temizle5
ON SCHEDULE every 1 day
Starts CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + interval 10 day
DO BEGIN
delete from mesajlar where mesajTarih < DATE_SUB(NOW(), INTERVAL 1 WEEK);
END |
delimiter ;

Olayları Listelemek

show events;

“show events” sorgusu veritabanındaki tüm olayların listelenmesini sağlar.

Olay Silmek

drop event temizle;

Bu sorgu “temilzle” isimli olayı silecektir.

Myql olayları halkkında daha fazla bilgi için Mysql events dökümanına bakabilirsiniz.

Henüz Yorum Yapan Olmadı

Yorum Yapın