Genel
MySQL Binary Log
MySQL binary loglarının içeriği ve işlevini anlamak, özellikle veritabanı yönetimi ve felaket kurtarma senaryolarında kritik öneme sahiptir. Bu makalede, binary logların ne olduğu, nasıl kullanıldığı ve yönetildiği üzerine detaylı bilgiler sunulacaktır.
1. Binary Log Nedir ve Neden Kullanılır?
Binary log, MySQL sunucusunda gerçekleşen veri değişikliklerini kaydeden bir günlük dosyasıdır. İki temel amaçla kullanılır:
PITR (Point In Time Recovery): Veritabanını belirli bir noktaya geri yüklemek için binary loglara ihtiyaç duyulur.
Replikasyon: Master sunucuda yapılan değişikliklerin replica sunuculara aktarılmasını sağlar.
Ek olarak, bazı senaryolarda güncellenen kayıtların önceki versiyonlarına erişmek için de binary log kullanılabilir.
2. Binary Log Dosyalarının Konumu
Varsayılan olarak, binary log dosyaları data directory içinde bulunur. Ancak, bu konumu değiştirmek mümkündür:
Bu örnekte, binary loglar /binlog dizinine kaydedilir ve dosya adları server-log.0000001 formatında oluşturulur. Ayrıca, aktif binary log dosyalarının listesi /binlog/server-log.index dosyasında saklanır.
Not: Binary log dizininin sahipliğinin mysql kullanıcısına ait olması gereklidir.
3. Binary Logların Devre Dışı Bırakılması
Bazı durumlarda, binary loglama istenmez. Örneğin, mysqldump ile aldığınız yedeği hızlı geri yükleme yapmak istediğinizde:
Bu parametre ile binary loglama devre dışı bırakılabilir.
4. Binary Log Dosya Boyutu
Varsayılan olarak, binary log dosya boyutu 1GB’dır. Ancak, büyük transactionlar bu sınırı aşabileceği için aşağıdaki parametre ile ayarlanabilir:
Eğer transaction bir dosyaya sığmazsa, bütünlük açısından daha büyük bir dosya oluşturulur.
5. Binary Logların Bellek Kullanımı
Binary loglar bellek kullanır, özellikle henüz commit edilmemiş transactionlar için.
binlog_cache_size: Transactionlar commit edilene kadar bellek alanında tutulur.
Büyük Transactionlar: Fazla sayıda satırı etkileyen transactionlarda
binlog_cache_sizedeğerini artırmak gerekebilir.
6. İkili Günlüklerin Saklama Süresi
Eski Sürümler:
expire_logs_daysparametresi kullanılır.
Yeni Sürümler:
binlog_expire_logs_secondsparametresi tercih edilir.
Binary logların saklama süresini kontrol etmek, disk alanını yönetmek açısından önemlidir.
7. Binary Log Formatları
Binary logların nasıl saklanacağını belirlemek için binlog_format parametresi kullanılır:
ROW: Değişime uğramış satırların binary halleri saklanır. Güvenli bir yöntemdir ancak daha fazla disk alanı kullanır.
STATEMENT: SQL ifadeleri şeklinde tutulur. Prosedür çağrıları ile uyumsuzluk yaratabilir.
MIXED: İki formatı birleştiren hibrit yöntemdir.
DDL Komutları: Tüm DDL (CREATE, ALTER, DROP) komutları her zaman STATEMENT olarak saklanır.
8. Binary Logların Okunması: mysqlbinlog
Binary log içeriğini görüntülemek ve işlem yapmak için kullanılan temel araçtır:
Bu komut, binary log dosyasını metin formatına dönüştürerek veriyi incelemeyi sağlar.
Kullanım Durumları:
PITR: Yedekleme sonrası eksik değişiklikleri tamamlamak.
Veri Kurtarma: Kaybolan verileri geri almak.
9. Replikasyonda Binary Log Kullanımı
MySQL replikasyonu, master sunucuda üretilen binary logların replica sunuculara taşınması ile gerçekleşir. Binary log olmadan replikasyon mümkün değildir.
10. PITR (Point In Time Recovery)
Bir veritabanı yedeği ve yedek ile istenen zaman aralığındaki binary log dosyaları gereklidir. Yedek geri yüklendikten sonra eksik işlemler, binary loglar kullanılarak tamamlanır:
11. Potansiyel Problemler: Deterministik Olmayan Sorgular
STATEMENT Formatı: Deterministik olmayan işlemler (örneğin,
NOW(),RAND()) veri tutarlılığı sorunlarına yol açabilir.
ROW Formatı: Etkilenen satırların tam bilgilerini kaydettiği için daha güvenilirdir.
Problemli Sorgu Örnekleri:
Bu tür sorguların ROW formatında loglanması, veri tutarlılığını sağlamaya yardımcı olur.
Sonuç
MySQL binary logları, veritabanı yönetimi ve veri güvenliği açısından kritik bir rol oynar. Uygun yapılandırma ve yönetimle hem veri kaybını önlemek hem de replikasyonu sağlıklı tutmak mümkündür.






