MySQL Event Scheduler Kullanımı

Herkese Merhaba,

Kusura bakmayın videoda şarj aletini çıkartmayı unuttuğum için ufak bir cızırtı var. Bir dahaki videoda unutmamaya çalışacağım.

Bir pazar dersiyle daha karşınızdayım. Bu derste MySQL’de Event Scheduler ile nasıl zamanlanmış işlemler yapacağınızı anlatacağım. Bazen MySQL’de belirli aralıklarla bütün verileri silmek, ya da belli başlı sorguları çalıştırmak isteyebiliriz. Bu tarz durumlarda Event Scheduler yardımımıza koşuyor. Zaten Türkçe’sine baktığımızda isminin Olay Zamanlayıcı olduğunu görüyoruz. Olaylar oluşturup bunları zamanlıyoruz ve kendi kendine zamanı geldiğinde çalışıyor. Haydi başlayalım.

Öncelikle MySQL Event Scheduler kapalı ise açmamız gerekiyor. Açık mı kapalı mı diye kontrol etmek isterseniz PHPMyAdmin üzerinden SQL sekmesini açıp veya direkt olarak komut satırı üzerinden MySQL’i çalıştırıp şu komutu vermeniz yeterli.

SHOW PROCESSLIST\G

Bu komut size o an çalışır vaziyette olan processleri (işlemler/süreçler) listeleyecektir. Event Scheduler bunların içinde varsa şu şekilde görünür.

Eğer açık değilse de event_scheduler hiç görünmeyecektir. Event Scheduleri açmak için aynı şekilde aşağıdaki 4 komuttan herhangi birini vermeniz gerekiyor.

SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;

Aynı şekilde ON’lar yerine OFF ve 1’ler yerine de 0 yazarak event_scheduleri kapatabilirsiniz.

Event Scheduleri açtığımıza göre şimdi de bir olay oluşturup onu zamanlayalım.

CREATE EVENT ifadesiyle yeni bir olay oluşturuyoruz. ALTER EVENT ile düzenleyip DROP EVENT ile de siliyoruz ama bunlara daha sonra örnek vereceğim, şimdilik sadece bir olay oluşturalım. CREATE EVENT dedikten sonra olayımızın ismini yazıyoruz, bu herhangi bir şey olabilir. Daha sonra ON SCHEDULE deyip ne kadar zamanda bir bu olayı tekrarlayacağımızı söylüyoruz, örnek olarak ON SCHEDULE EVERY 1 MINUTE dediğimizde her 1 saniyede bir kez bu olayı tekrarlamak istediğimizi söylemiş oluyoruz. Daha sonra da DO diyerek hemen sonrasında çalışmasını istediğimiz komutu yazıyoruz. Evet böyle çok havada kalmış oldu. Şimdi hemen bir örnek üzerinde inceleyelim. Örnek olarak her 2 saatte bir bildirimler tablosundaki bütün verileri silen bir olay zamanlayıcısı oluşturalım.

CREATE EVENT bildirim_temizle
  ON SCHEDULE
    EVERY 2 HOUR
  DO
    DELETE FROM bildirimler;

Bütün işlem bu kadar. Aşağıdaki sorgumuzda isterseniz çeşitli koşullar da kullanabilirsiniz. Kısacası canınız ne isterse onu yapabilirsiniz. Şimdi bir değişiklik yapalım bu zamanlayıcıda ve her 1 saatte bir bütün bildirimleri silelim. Ama bundan önce ALTER EVENT’ten biraz bahsetmem gerekli. ALTER EVENT dedikten sonra sadece değiştirmek istediğimiz özelliği yazıp yeni değerini atıyoruz. Örnek olarak her iki saat yerine her 1 saatte bir işlem yapacaksak ve yapacağımız işlemi yenilemek istemiyorsak bu durumda sadece ON SCHEDULE ifadesinin değerini değiştiriyoruz. Tersi durumda da DO ifadesinin değerini değiştiriyoruz. Tabi isterseniz ikisini birden de yapabilirsiniz. Şimdi örnek olarak zamanlayıcımızı değiştirip her 2 saatte bir işlem yapmak yerine her 1 saatte bir işlem yapalım. Komutumuzu veriyoruz hemen.

ALTER EVENT bildirim_temizle
  ON SCHEDULE
    EVERY 1 HOUR;

Bu komutu verdikten sonra zamanlayıcımız değişmiş olacak. Bu değişimleri görmek istiyorsanız veya oluşturduğunuz bütün event schedulerleri görmek istiyorsanız INFORMATION_SCHEMA veritabanı altındaki EVENTS tablosunu inceleyebilirsiniz. Oluşturduğunuz bütün olaylar bu tabloya kaydedilir. Şu komutu çalıştırarak bu tabloda oluşturduğunuz olaylarla ilgili tüm bilgileri görebilirsiniz.

SELECT * FROM INFORMATION_SCHEMA.EVENTS;

Yalnız ufak bir problem var, ekran çözünürlüğünüz biraz düşükse ve benim gibi terminal üzerinden MySQL kullanıyorsanız aldığınız çıktı biraz okuması zor olabilir. O yüzden biz sadece gerekli alanları çekmek için şu komutu çalıştıralım.

SELECT EVENT_NAME, EVENT_DEFINITION, INTERVAL_VALUE, INTERVAL_FIELD FORM INFORMATION_SCHEMA.EVENTS;

Burada zaten gördüğünüz değerlerin ne olduğunu anlayacaksınız o yüzden açıklamayacağım. Devam edelim.

Şimdi de şöyle bir şey yapalım. Biz zamanlayıcımızı 1 saate indirdik ama şimdi de bildirimler tablosundaki bütün verileri silmek yerine direkt olarak tabloyu boşaltalım. Bunun için de yine ALTER TABLE diyoruz ve şimdi de sadece DO kısmını değiştiriyoruz.

ALTER EVENT bildirim_temizle
  DO
    TRUNCATE TABLE bildirimler;

Şimdi isterseniz bir önceki kodu tekrar çalıştırıp yaptığımız değişiklik işleminin çalışıp çalışmadığını kontrol edebilirsiniz.

ALTER TABLE ile ilgili bilmemiz gerekenler de bunlardı. Şimdi son olarak DROP EVENT olayına bakalım ve yazımızı bitirelim.

Bu içlerindeki en basit komut. Zaten bir şeyi yıkmak her zaman yapmaktan daha basit değil midir ?

Tek yapmamız gereken DROP EVENT dedikten sonra olayımızın adını yazmak. Hemen bir örnek verelim.

DROP EVENT bildirim_temizle;

Evet bu işlem de bu kadar. Şimdi son olarak iki komut daha gösterip dersi bitireceğim.

Bazı durumlarda bu olaylarımızı geçici olarak durdurmamız ve tekrar başlatmamız gerekebilir. Bunun için de yapmamız gereken şey şu:

Deaktif Etmek İçin:

ALTER EVENT bildirim_temizle
DISABLE;

Aktif Etmek İçin:

ALTER EVENT bildirim_temizle
ENABLE;

Ayrıca son olarak event ismini değiştirmek isterseniz de şu komut işinizi görecektir.

ALTER EVENT bildirim_temizle
RENAME TO bildirim_sil;

Anlatmam gereken başka bir şey de kalmadı sanırım.

Siz değerli okuyucularımdan iki ricam olacak. Birincisi eksik veya yanlış gördüğünüz kısımları mutlaka yorum olarak belirtin ki düzeltelim. İkincisi de şu, artık sosyal medya hesaplarımın hiçbirisini kullanmıyorum, hepsini sildim. Bu içerikleri paylaşıp daha fazla insana yardımcı olmama yardımcı olmanızı istiyorum.

Destekleriniz için şimdiden teşekkür ederim. Herkese iyi çalışmalar ve iyi geceler.

MySQL Mustafa Zahid Efe Yorum yapılmamış