Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

MySQL Event Scheduler Kullanarak Rutin Bakım (Optimize Table, Delete Old Data) Otomasyonu

✖ Kapat
Duyuru
✖ Kapat
Duyuru

webnix

Üye
Katılım
14 Mart 2026
Mesajlar
51
Merhaba arkadaşlar,

Bugün sizlere, özellikle yoğun yazma işlemlerinin olduğu veritabanlarında zamanla oluşan fragmantasyonu (parçalanmayı) gidermek ve eski log/geçici verileri otomatik olarak temizlemek için MySQL Event Scheduler'ı nasıl kullanacağımızı anlatacağım. Bu otomasyon, sunucunuzdaki disk alanı kullanımını optimize eder ve tablo performansını korumanıza yardımcı olur. Ben de kendi sunucularımda düzenli olarak bu yöntemi kullanıyorum.

🔧 Event Scheduler Nedir ve Nasıl Aktif Edilir?

MySQL Event Scheduler, belirli zamanlarda veya aralıklarla SQL ifadelerini otomatik olarak çalıştıran bir zamanlayıcıdır. Öncelikle bu özelliğin sunucunuzda aktif olduğundan emin olmalısınız.

SQL:
-- Event Scheduler durumunu kontrol et
SHOW VARIABLES LIKE 'event_scheduler';

-- Eğer OFF ise, aşağıdaki komutla aktif edebilirsiniz (Sunucu restartında kaybolur).
SET GLOBAL event_scheduler = ON;

-- Kalıcı olması için my.cnf (veya my.ini) dosyasına ekleyin.
-- [mysqld] bölümüne şu satırı ekleyin: event_scheduler=ON

🗑️ Eski Verileri Silme Event'i Oluşturalım

Diyelim ki `site_loglari` adında bir tablonuz var ve 30 günden eski kayıtları her ayın 1'inde silmek istiyorsunuz. Aşağıdaki gibi bir event oluşturabilirsiniz.

SQL:
DELIMITER //
CREATE EVENT IF NOT EXISTS `eski_loglari_temizle`
ON SCHEDULE EVERY 1 MONTH
STARTS '2024-06-01 03:00:00'
ON COMPLETION PRESERVE
DO
BEGIN
    DELETE FROM site_loglari WHERE log_tarihi < DATE_SUB(NOW(), INTERVAL 30 DAY);
    -- İşlem sonrası kaç kayıt silindiğini görmek için (Opsiyonel)
    SELECT CONCAT('Silinen eski log kaydı: ', ROW_COUNT()) AS Bilgi;
END //
DELIMITER ;

Bu event, ilk olarak 1 Haziran 2024 saat 03:00'da çalışacak ve ardından her ay tekrarlanacak. ON COMPLETION PRESERVE ifadesi, event'in süresi dolsa bile silinmemesini sağlar. /etc/mysql/my.cnf dosyanızda event zaman dilimini (time_zone) doğru ayarladığınızdan emin olun.

⚡ Tabloları Optimize Etme Event'i Oluşturalım

Özellikle InnoDB tablolarında sık silme/güncelleme işlemlerinden sonra `OPTIMIZE TABLE` komutu faydalı olabilir. Bu işlem biyo ağır olabilir, bu yüzden trafiğin en düşük olduğu bir saatte (örneğin, pazar gecesi 02:00) planlayalım.

SQL:
DELIMITER //
CREATE EVENT IF NOT EXISTS `haftalik_tablo_optimize`
ON SCHEDULE EVERY 1 WEEK
STARTS '2024-06-02 02:00:00'
ON COMPLETION PRESERVE
DO
BEGIN
    -- Optimize edilecek tabloları belirleyin. Tüm veritabanı için değil, ihtiyaç duyulanlar için yapın.
    OPTIMIZE TABLE buyuk_tablo_1, buyuk_tablo_2, log_tablosu;
END //
DELIMITER ;

⚠️ Dikkat Edilmesi Gerekenler

Şu ayara çok dikkat etmelisiniz: `OPTIMIZE TABLE`, MyISAM için mükemmel sonuç verirken, InnoDB için aslında bir `ALTER TABLE ... FORCE` işlemidir. Çok büyük tablolarda kilitlenmelere ve yüksek disk I/O'ya neden olabilir. Bu nedenle, canlı ve çok büyük sistemlerde bu işlemi daha düşük trafikli saatlere almanın yanı sıra, pt-online-schema-change gibi araçları değerlendirmenizi öneririm.

Oluşturduğunuz event'leri kontrol etmek ve yönetmek için aşağıdaki komutları kullanabilirsiniz:

SQL:
-- Tüm event'leri listele
SHOW EVENTS FROM veritabani_adiniz;

-- Bir event'in detaylı yapısını gör
SHOW CREATE EVENT `eski_loglari_temizle`;

-- Bir event'i geçici olarak durdur
ALTER EVENT `haftalik_tablo_optimize` DISABLE;

-- Bir event'i tekrar aktif et
ALTER EVENT `haftalik_tablo_optimize` ENABLE;

-- Bir event'i tamamen sil
DROP EVENT IF EXISTS `eski_loglari_temizle`;

📊 Son Söz ve Öneriler

Event Scheduler, rutin bakım işlerimizde bize çok zaman kazandıran harika bir araç. Ancak her otomasyonda olduğu gibi, ilk kurulumdan sonra mutlaka birkaç döngü boyunca logları takip edin ve beklenen şekilde çalıştığından emin olun. Özellikle DELETE işlemlerinden önce, silinecek kayıtları bir SELECT ile kontrol etmek iyi bir pratiktir.

Siz bu rutin bakım işlemlerini kendi sunucularınızda nasıl yapıyorsunuz? Farklı yöntemleriniz veya eklemek istedikleriniz varsa aşağıya yazmaktan çekinmeyin. Sorularınız için buradayım!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri