BiSoft Logo

Hizmetler

Ürünler

Ortaklık

Blog

Turkish

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:

max_binlog_size = 500
max_binlog_size = 500
max_binlog_size = 500

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_size değerini artırmak gerekebilir.

6. İkili Günlüklerin Saklama Süresi

  • Eski Sürümler: expire_logs_days parametresi kullanılır.

  • Yeni Sürümler: binlog_expire_logs_seconds parametresi 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:

mysqlbinlog /binlog/server-log.0000001
mysqlbinlog /binlog/server-log.0000001
mysqlbinlog /binlog/server-log.0000001

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:

mysqlbinlog /binlog/server-log.0000001
mysqlbinlog /binlog/server-log.0000001
mysqlbinlog /binlog/server-log.0000001


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:
DELETE FROM sales WHERE sale_date < NOW() - INTERVAL 1 MONTH;
UPDATE sales SET update_user = @user WHERE id=100;
DELETE FROM sales ORDER BY RAND() LIMIT 1

DELETE FROM sales WHERE sale_date < NOW() - INTERVAL 1 MONTH;
UPDATE sales SET update_user = @user WHERE id=100;
DELETE FROM sales ORDER BY RAND() LIMIT 1

DELETE FROM sales WHERE sale_date < NOW() - INTERVAL 1 MONTH;
UPDATE sales SET update_user = @user WHERE id=100;
DELETE FROM sales ORDER BY RAND() LIMIT 1

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.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

İş büyümesi ve verimliliği için akıllı veri çözümleri

Şirket

Hizmetler

Ürün

Vispeahen

BFM

BFM4Patroni

Daha fazla içerik