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/MariaDB Replikasyon (Master-Slave) Kurulumu ve Gecikme (Lag) Sorun Giderme Yöntemleri

✖ Kapat
Duyuru
✖ Kapat
Duyuru

asternix

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
71
Merhaba arkadaşlar, bugün sizlere MySQL veya MariaDB için Master-Slave replikasyonunun nasıl kurulacağını ve en sık karşılaşılan gecikme (lag) sorunlarını nasıl çözebileceğinizi adım adım anlatacağım. Bu yapı, hem yük dağılımı hem de yedeklilik için kritik öneme sahip. Benim de üretim sunucularımda sıklıkla kullandığım bir yöntem.

🎯 Replikasyon Nedir ve Neden Önemli?

Master-Slave replikasyonu, bir veritabanı sunucusundaki (Master) tüm değişikliklerin bir veya daha fazla başka sunucuya (Slave) otomatik olarak kopyalanması işlemidir. Bu sayede okuma (SELECT) sorgularınızı Slave sunuculara yönlendirerek Master'ın yükünü hafifletebilir, ayrıca Slave'i sıcak yedek olarak kullanabilirsiniz. Performans ve felaket kurtarma için olmazsa olmazdır.

⚙️ Master Sunucu Hazırlığı

Öncelikle Master sunucumuzu replikasyona hazır hale getirelim. Ana konfigürasyon dosyasını (genellikle /etc/mysql/my.cnf veya /etc/my.cnf) düzenliyoruz.

INI:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
expire_logs_days = 7
max_binlog_size = 100M
bind-address = 0.0.0.0

Bu ayarlardan sonra MySQL/MariaDB servisini yeniden başlatalım.

Bash:
sudo systemctl restart mysql
# veya
sudo systemctl restart mariadb

Şimdi Master üzerinde replikasyon için bir kullanıcı oluşturalım ve gerekli izinleri verelim.

SQL:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'GucluBirSifreBuraya';
GRANT REPLICATION SLAVE ON . TO 'repl_user'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

⚠️ DİKKAT: `SHOW MASTER STATUS;` komutunun çıktısındaki `File` (örn: mysql-bin.000001) ve `Position` (örn: 328) değerlerini bir yere not edin. Slave kurulumunda bunlara ihtiyacımız olacak. İşlem bittikten sonra tablo kilidini açmayı unutmayın: `UNLOCK TABLES;`

🔧 Slave Sunucu Kurulumu

Şimdi Slave sunucumuza geçelim. Slave'in konfigürasyon dosyasında sadece benzersiz bir `server-id` tanımlamamız yeterli.

INI:
[mysqld]
server-id = 2

Servisi yeniden başlattıktan sonra, Slave'i Master'a bağlayacağız. Aşağıdaki komutta, `MASTER_LOG_FILE` ve `MASTER_LOG_POS` değerlerini az önce Master'da not ettiğiniz değerlerle değiştirin. `MASTER_HOST` ise Master sunucunuzun IP adresi olacak.

SQL:
CHANGE MASTER TO
MASTER_HOST='MASTER_SUNUCU_IP',
MASTER_USER='repl_user',
MASTER_PASSWORD='GucluBirSifreBuraya',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;

Artık Slave replikasyonunu başlatabiliriz.

SQL:
START SLAVE;

Durumu kontrol etmek için aşağıdaki komutu kullanın. `Slave_IO_Running` ve `Slave_SQL_Running` sütunlarının ikisinin de `Yes` olduğundan emin olun.

SQL:
SHOW SLAVE STATUS\G

🚨 Gecikme (Lag) Sorunları ve Çözüm Yolları

Replikasyon gecikmesi (`Seconds_Behind_Master` değerinin sürekli yüksek olması) en sık karşılaştığımız sorunlardan. İşte denenmiş çözüm önerilerim:

🔍 1. Performans İncelemesi

İlk olarak, Slave sunucunuzun kaynaklarını (CPU, RAM, Disk I/O) kontrol edin. Özellikle yavaş diskler, replikasyonu ciddi şekilde yavaşlatır. `iostat` veya `iotop` komutlarıyla disk performansını gözlemleyin.

⚡ 2. Parametre Optimizasyonu

Slave sunucunuzdaki bazı parametreleri, özellikle de yazma performansını artıracak şekilde ayarlamayı deneyin. Bu ayarlar sunucunuza göre değişiklik gösterebilir, test etmeden production'a almayın.

INI:
[mysqld]
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0
innodb_doublewrite = 0 # Dikkatli olun, güvenlik/kararlılık riski olabilir.
innodb_buffer_pool_size = SistemRAMinin %70-80'i

🧹 3. Ağ ve Bağlantı Kontrolü

Master ve Slave arasındaki ağ gecikmesini (ping süresi) ve bant genişliğini kontrol edin. Özellikle çok büyük binary log'ların transferi sırasında darboğaz yaşanabilir. `SHOW SLAVE STATUS\G` çıktısındaki `Seconds_Behind_Master` değeri anlık olarak değişiyorsa, ağ kaynaklı bir gecikme olabilir.

📊 4. Tek Sorgu Analizi

Gecikmeye neden olan yavaş bir sorgu olabilir. Slave üzerinde `SHOW PROCESSLIST;` komutu ile çalışan sorguları inceleyin. Master'da çok uzun süren ve Slave'de tekrar edilen bir UPDATE/DELETE işlemi tüm replikasyonu kilitleyebilir. Bu tür sorguları optimize etmek gerekir.

🛠️ Acil Müdahale: Replikasyonu Sıfırdan Kurmak

Bazen gecikme o kadar kronikleşir ki, en temiz çözüm replikasyonu sıfırdan kurmaktır. Bunun için:
1. Slave'i durdur (`STOP SLAVE;`)
2. Master'da yeni bir yedek (dump) al.
3. Bu yedeği Slave'e yükle.
4. Master'daki yeni `File` ve `Position` değerlerini al.
5. Slave'de `CHANGE MASTER TO` komutunu yeni bilgilerle çalıştır ve `START SLAVE` de.

Bu yöntem, özellikle Slave'de birikmiş hatalar varsa en kesin çözümdür.

Umarım bu rehber faydalı olmuştur arkadaşlar. Replikasyon kurulumu ilk bakışta karmaşık gelebilir ama adımları takip edince aslında oldukça düzgün çalışan bir yapı kurabilirsiniz. Benim en çok dikkat ettiğim nokta, Slave sunucusunun disk performansı ve ağ bağlantısının stabilitesi oluyor.

Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı optimizasyon yöntemleriniz var mı? Ya da takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.
 

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