Merhaba arkadaşlar, bugün sizlere özellikle yoğun yazma işlemi olan sunucularda disk alanını hızla tüketebilen MariaDB binary log dosyalarını nasıl yöneteceğimizi ve otomatik bir temizleme politikası oluşturacağımızı anlatacağım. Bu rehber sayesinde log dosyalarının aniden diskinizi dolduracak kadar büyümesini engelleyebilir ve sunucunuzu daha stabil bir şekilde çalıştırabilirsiniz.
Binary Log Nedir ve Neden Önemli?
Binary log (binlog), MariaDB'nin sunucuda gerçekleşen tüm veri değişikliklerini (INSERT, UPDATE, DELETE vb.) kaydettiği dosyalardır. Bu loglar, veri kurtarma (point-in-time recovery) ve master-slave replikasyonu için hayati öneme sahiptir. Ancak, bu log dosyaları otomatik olarak silinmezse, özellikle yüksek işlem hacmine sahip sistemlerde /var/lib/mysql dizini altında çok büyük boyutlara ulaşabilir ve diskinizi tamamen doldurabilir.
Otomatik Silme Politikası Nasıl Ayarlanır?
En temel ve etkili yöntem, MariaDB konfigürasyon dosyasında `expire_logs_days` parametresini ayarlamaktır. Bu parametre, belirtilen günden eski binary log dosyalarının otomatik olarak silinmesini sağlar.
Öncelikle, MariaDB'nin ana konfigürasyon dosyasını açalım. Ben genelde /etc/mysql/mariadb.conf.d/50-server.cnf dosyasını kullanıyorum. Sizde farklı olabilir, /etc/mysql/my.cnf veya /etc/my.cnf dosyalarına da bakabilirsiniz.
Dosyanın içinde `[mysqld]` bölümünü bulun (yoksa en sona ekleyin). Bu bölüme aşağıdaki satırı ekleyin. Ben genelde 7 günü yeterli buluyorum, bu süre replikasyon gecikmesi yaşamadan kurtarma için yeterlidir. Siz ihtiyacınıza göre 3, 5 veya 10 gün olarak ayarlayabilirsiniz.
Değişikliği kaydedip (Ctrl+X, sonra Y, sonra Enter) MariaDB servisini yeniden başlatalım.
Mevcut Ayarları ve Logları Kontrol Etme
Ayarların doğru çalışıp çalışmadığını kontrol etmek için MariaDB konsoluna girelim.
Aşağıdaki SQL komutu ile `expire_logs_days` değerini görebilirsiniz.
Mevcut binary log dosyalarını listelemek için ise şu komutu kullanın:
Kritik Uyarılar ve Dikkat Edilmesi Gerekenler
1. Replikasyon Gecikmesi: Eğer slave sunucunuz varsa ve master'dan gecikmeli okuyorsa, `expire_logs_days` değerini çok düşük tutmak, slave'in ihtiyaç duyduğu eski bir log dosyası silindiği için replikasyonun kırılmasına neden olabilir. Slave'in durumunu mutlaka kontrol edin.
2. Manuel Temizlik (Acil Durum): Disk aniden dolduysa ve MariaDB servisi çalışmayı durdurduysa, önce servisi durdurup, gerekli log dosyalarını manuel silebilirsiniz. Ancak öncesinde mutlaka yedek alın! Önce en eski log dosyalarından başlayarak silmek güvenlidir. MariaDB'yi yeniden başlatmadan önce, kalan en son log dosyasını MariaDB'ye aşağıdaki komutla bildirmeniz gerekir. Örneğin, `mysql-bin.000230` dosyası kaldıysa:
3. Log Dosyası Boyutu: `max_binlog_size` parametresi ile tek bir binlog dosyasının maksimum boyutunu ayarlayabilirsiniz. Bu, çok büyük tek dosyalar yerine daha yönetilebilir boyutta birden fazla dosya oluşmasını sağlar.
Son Söz ve Önerim
`expire_logs_days` ayarı, binary log temizliği için en temel ve güvenli otomasyondur. Ben tüm üretim sunucularımda bu ayarı mutlaka yaparım. Ayrıca, disk kullanımını düzenli olarak (örneğin, `df -h` ve `du -sh /var/lib/mysql/` komutlarıyla) takip etmenizi öneririm.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yöntem veya ek bir ipucunuz var mı? Ya da bu konuyla ilgili bir sorunuz varsa, aşağıya yazmaktan çekinmeyin. Hep birlikte öğrenelim.
Binary log (binlog), MariaDB'nin sunucuda gerçekleşen tüm veri değişikliklerini (INSERT, UPDATE, DELETE vb.) kaydettiği dosyalardır. Bu loglar, veri kurtarma (point-in-time recovery) ve master-slave replikasyonu için hayati öneme sahiptir. Ancak, bu log dosyaları otomatik olarak silinmezse, özellikle yüksek işlem hacmine sahip sistemlerde /var/lib/mysql dizini altında çok büyük boyutlara ulaşabilir ve diskinizi tamamen doldurabilir.
En temel ve etkili yöntem, MariaDB konfigürasyon dosyasında `expire_logs_days` parametresini ayarlamaktır. Bu parametre, belirtilen günden eski binary log dosyalarının otomatik olarak silinmesini sağlar.
Öncelikle, MariaDB'nin ana konfigürasyon dosyasını açalım. Ben genelde /etc/mysql/mariadb.conf.d/50-server.cnf dosyasını kullanıyorum. Sizde farklı olabilir, /etc/mysql/my.cnf veya /etc/my.cnf dosyalarına da bakabilirsiniz.
Bash:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Dosyanın içinde `[mysqld]` bölümünü bulun (yoksa en sona ekleyin). Bu bölüme aşağıdaki satırı ekleyin. Ben genelde 7 günü yeterli buluyorum, bu süre replikasyon gecikmesi yaşamadan kurtarma için yeterlidir. Siz ihtiyacınıza göre 3, 5 veya 10 gün olarak ayarlayabilirsiniz.
INI:
[mysqld]
expire_logs_days = 7
Değişikliği kaydedip (Ctrl+X, sonra Y, sonra Enter) MariaDB servisini yeniden başlatalım.
Bash:
sudo systemctl restart mariadb
Ayarların doğru çalışıp çalışmadığını kontrol etmek için MariaDB konsoluna girelim.
Bash:
sudo mysql
Aşağıdaki SQL komutu ile `expire_logs_days` değerini görebilirsiniz.
SQL:
SHOW VARIABLES LIKE 'expire_logs_days';
Mevcut binary log dosyalarını listelemek için ise şu komutu kullanın:
SQL:
SHOW BINARY LOGS;
1. Replikasyon Gecikmesi: Eğer slave sunucunuz varsa ve master'dan gecikmeli okuyorsa, `expire_logs_days` değerini çok düşük tutmak, slave'in ihtiyaç duyduğu eski bir log dosyası silindiği için replikasyonun kırılmasına neden olabilir. Slave'in durumunu mutlaka kontrol edin.
2. Manuel Temizlik (Acil Durum): Disk aniden dolduysa ve MariaDB servisi çalışmayı durdurduysa, önce servisi durdurup, gerekli log dosyalarını manuel silebilirsiniz. Ancak öncesinde mutlaka yedek alın! Önce en eski log dosyalarından başlayarak silmek güvenlidir. MariaDB'yi yeniden başlatmadan önce, kalan en son log dosyasını MariaDB'ye aşağıdaki komutla bildirmeniz gerekir. Örneğin, `mysql-bin.000230` dosyası kaldıysa:
Bash:
sudo mysql -e "PURGE BINARY LOGS TO 'mysql-bin.000230';"
3. Log Dosyası Boyutu: `max_binlog_size` parametresi ile tek bir binlog dosyasının maksimum boyutunu ayarlayabilirsiniz. Bu, çok büyük tek dosyalar yerine daha yönetilebilir boyutta birden fazla dosya oluşmasını sağlar.
`expire_logs_days` ayarı, binary log temizliği için en temel ve güvenli otomasyondur. Ben tüm üretim sunucularımda bu ayarı mutlaka yaparım. Ayrıca, disk kullanımını düzenli olarak (örneğin, `df -h` ve `du -sh /var/lib/mysql/` komutlarıyla) takip etmenizi öneririm.
Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yöntem veya ek bir ipucunuz var mı? Ya da bu konuyla ilgili bir sorunuz varsa, aşağıya yazmaktan çekinmeyin. Hep birlikte öğrenelim.