MySQL Master-Slave Replication Kurulumu (2026 Rehberi)
MySQL master-slave replication kurulumu: doğru replika kullanıcıları, konfigürasyon adımları, GTID/binlog, test ve izleme ile kesintisiz geçiş planı.
MySQL master-slave replication, uygulama yükünü dağıtmak ve yedeklilik katmanı eklemek için kullanılan temel replikasyon yöntemlerinden biridir. Doğru kurulmadığında ise veri tutarsızlığı, beklenmeyen gecikme (replication lag) ve “neden senkron değil?” sorunları kaçınılmaz hale gelir. Bu rehberde, master (primary) ve slave (replica) sunucular arasında replikasyonu net adımlarla kuracak; kullanıcı yetkileri, binlog/GTID, anlık durum kontrolü ve hata ayıklama akışını öğreneceksiniz.
Not: “slave” ve “replica” terimleri MySQL’de kavramsal olarak aynı rolü ifade eder. Yazıda teknik komutlarda “slave” terimi geçebilir; ancak hedef replica mantığıdır.
Hedef mimari: Master-Slave ne zaman doğru seçim?
Master-slave replication kurulumunu planlarken ilk karar, yönlendirme (routing) stratejisidir. En yaygın senaryolar:
- Okuma ölçekleme: Uygulama okuma isteklerini slave’e, yazmaları master’a yönlendirir.
- Yüksek erişilebilirlik hazırlığı: Slave’teki veri güncel tutulur; failover senaryosu planlanır.
- Raporlama ayırımı: Analitik sorgular slave üzerinde çalıştırılır.
Aşağıdaki tabloda “ne beklemeli?” sorusuna net bir cevap var:
| Konu | Master-Slave etkisi | Doğru yaklaşım |
|---|---|---|
| Veri güncelliği | Slave bir miktar gecikmeli kalabilir | Uygulamada “read-your-writes” ihtiyacına göre yönlendirme |
| Yazı tutarlılığı | Yazılar master’da tek kaynaktır | Slave’e yazma yok (read-only yaklaşımı) |
| Arıza sonrası | Failover elle/otomasyonla yapılır | Ön test + geçiş planı |
| Performans | Master yazma maliyeti artar (binlog üretimi) | Donanım + I/O planı; binlog boyutu kontrolü |
Ön koşullar: Sunucu, MySQL sürümü ve replikasyon modları
Kurulumun en sık patladığı yer, sürüm/ayar uyumsuzluğudur. Aşağıdaki kontrol listesini kurulumdan önce uygulayın.
Gerekenler (checklist)
- Master ve slave’de aynı MySQL ailesi (MySQL -> MySQL veya MariaDB -> MariaDB) ve mümkünse benzer sürüm.
- İletişim için network erişimi: 3306 (ve varsa özel port) açık olmalı.
- Time sync: Her iki sunucuda NTP/chrony aktif olmalı. (Replication loglarında zaman karşılaştırması yapacaksınız.)
- Yeterli disk: Slave’e taşınacak veri + relay log alanı.
Replication modu seçimi: binlog File/Position vs GTID
MySQL’de iki yaygın yaklaşım var:
- File/Position tabanlı (eski kurulum):
MASTER_LOG_FILEveMASTER_LOG_POSile ilerler. - GTID tabanlı (daha operasyonel):
MASTER_AUTO_POSITION=1ve GTID seti üzerinden senkron gider.
Bu rehber GTID yaklaşımını ana akış olarak verir. Eğer sürümleriniz GTID desteklemiyorsa File/Position kısmına geçebilirsiniz.
Master tarafı kurulumu: binlog, replika kullanıcı, snapshot hazırlığı
Master üzerinde yapılacak adımlar replikasyonun omurgasıdır.
1) MySQL konfigürasyonunda binlog ve server-id
Master’da MySQL konfigürasyon dosyanızı güncelleyin (genelde /etc/my.cnf veya /etc/mysql/my.cnf). Örnek ayarlar:
server-idher iki sunucuda benzersiz olmalı.log_binaktif olmalı.- GTID kullanacaksanız
gtid_modeveenforce_gtid_consistencyayarlanmalı.
Örnek (değerleri kendi ortamınıza göre değiştirin):
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=ROW
binlog_row_image=FULL
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
binlog_format=ROW, uygulamada veri türlerine göre farklı etkiler yaratabilir ama replikasyon doğruluğu açısından yaygın tercih edilir.
2) Replikasyon kullanıcı yetkisini oluşturma
Master’da slave’in bağlanacağı bir kullanıcı oluşturun. Bu kullanıcı sadece replikasyon yetkilerine sahip olmalı:
CREATE USER 'replica_user'@'SLAVE_IP' IDENTIFIED BY 'GUVENLI_SIFRE';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'SLAVE_IP';
FLUSH PRIVILEGES;
SLAVE_IPyerine aynı ağda statik IP/host kullanın.- İmkan varsa slave IP’si statik olsun; dinamik IP replikasyonu daha sık koparır.
3) Master durumunu kaydetme (snapshot için)
GTID ile çalışırken otomatik konumlama kolaydır ama yine de doğru anı yakalamak gerekir.
Önce master’da şunları kontrol edin:
SHOW MASTER STATUS;
Çıktıdaki GTID/pozisyon bilgileri replikasyon testinde referans olur.
4) Tutarlı bir snapshot alma (taşıma için)
Veriyi kopyalarken en kritik nokta tutarlılıktır. En sağlıklı yöntem:
- Master üzerinde kısa süreli kilitlemeden tutarlı bir dump alın.
Örnek mantık:
mysqldump --single-transaction --quick --set-gtid-purged=ON \
--all-databases \
--routines --events --triggers \
-u root -p > master_snapshot.sql
--single-transactionInnoDB için tutarlıdır.- Replikasyon için
--set-gtid-purged=ONGTID kullanıyorsanız faydalıdır.
Snapshot alırken yoğun yazma varsa master yüklenebilir; dump süresini planlayın.
Slave tarafı kurulumu: aynı veriyi yükle, replikasyonu başlat
Slave’de iki aşama vardır: başlangıç verisi ve replikasyon ayarlarının yapılması.
1) Slave’e snapshot yükleme
Slave’e snapshot dosyanızı aktarın ve içe aktarın:
mysql -u root -p < master_snapshot.sql
2) Slave konfigürasyonunda server-id ve relay log
Slave my.cnf ayarlarında server-id değerini benzersiz yapın.
Örnek:
server-id=2- relay log aktif olmalı
- GTID kullanıyorsanız
gtid_modeayarlarıyla tutarlı olun
Örnek:
[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=OFF
relay_log=relay-bin
Master’dan farklı rol için
log_bin=OFFtercih edilebilir; ancak environment policy’nize göre revize edin.
3) Replikasyon kaynağını tanımlama (GTID otomatik konum)
Slave üzerinde replikasyon ayarlarını verin.
MySQL 8 / modern sürümlerde genelde CHANGE REPLICATION SOURCE TO kullanılır. Örnek:
STOP REPLICA;
RESET REPLICA;
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='MASTER_IP',
SOURCE_USER='replica_user',
SOURCE_PASSWORD='GUVENLI_SIFRE',
SOURCE_AUTO_POSITION=1;
START REPLICA;
Sürümünüz START SLAVE tarafını kullanıyorsa şu eşleştirmeyi düşünün:
- REPLICA yerine SLAVE
- CHANGE REPLICATION SOURCE yerine CHANGE MASTER
4) İlk sağlık kontrolü: STOP/START sonrası durum
Slave’de replikasyon durumunu sorgulayın:
SHOW REPLICA STATUS\G
Kontrol etmeniz gereken ana alanlar:
- Replica_IO_Running: Yes
- Replica_SQL_Running: Yes
- Seconds_Behind_Source: 0 veya düşük (ilk kurulumda değişebilir)
- Last_Errno ve Last_Error: hata varsa burada net mesaj olur
Beklenen hedef: IO ve SQL ikisi de “Running: Yes”.
İleri doğrulama: Tutarlılık testi ve replikasyon gecikmesi (lag) yönetimi
Kurulum “çalışıyor” demek değildir. Asıl hedef, veri tutarlılığını ve gecikmeyi yönetmektir.
1) Tutarlılık testi (pratik kontrol)
Uygulama trafiğiniz üzerinden basit bir doğrulama yapın.
Örnek kontroller: - Bazı kritik tablolar için satır sayısı karşılaştırması - Anahtar sorgularda aynı sonuç
Örnek:
-- Master
SELECT COUNT(*) FROM orders;
-- Slave
SELECT COUNT(*) FROM orders;
Satır sayısı uyuşmuyorsa replikasyon gecikmesi veya hata var demektir.
2) Replikasyon gecikmesi için metrik
Replica status’te Seconds_Behind_Source değerini izleyin. Ancak bunu tek metrik gibi kullanmayın; bazı durumlarda gecikme “yanıltıcı” olabilir.
Daha sağlıklı bir yaklaşım:
- Periyodik olarak SHOW REPLICA STATUS\G sonuçlarını loglamak
- Hata yoksa gecikmenin trendini izlemek
3) Slave üzerinde okuma politikası
Uygulamanız slave’i sadece okuma için kullanacaksa iki güvenlik katmanı ekleyin:
- Slave’e uygulama üzerinden yazma engelleyin.
- Gerekirse super_read_only veya benzeri ayarlarla SQL thread koruma yaklaşımı uygulayın.
Örnek mantık: - Uygulama kullanıcıları read-only yetkide olsun.
4) Kullanıcı/şema değişikliği süreci
Replikasyonda en büyük operasyon riski şema değişiklikleridir.
Net kural: - Şema değişikliklerini master’da yapın. - “Manual slave güncellemesi” yerine replikasyonun kendi yoluyla yayılmasını tercih edin.
Hata ayıklama: En sık sorunlar ve net çözümler
Aşağıdaki senaryolar master-slave kurulumlarında en sık görülür.
1) IO thread Running=No
En yaygın sebep: ağ/kimlik bilgisi hatası.
- SOURCE_HOST yanlış mı?
- SOURCE_USER yetkisi doğru mu?
- Port erişimi var mı?
- Parola uyuşuyor mu?
Çözüm akışı:
- SHOW REPLICA STATUS\G içinde hata mesajını kontrol edin (Last_Error).
- Master’da GRANT REPLICATION SLAVE yetkisini doğrulayın.
2) SQL thread Running=No (uygulama veri çakışması)
Slave tarafında başlangıç verisi master ile aynı değilse veya GTID geçmişi uyuşmuyorsa SQL thread stop olur.
Çözüm:
- Snapshot sürecinin doğru alındığından emin olun.
- GTID kullanıyorsanız dump sırasında --set-gtid-purged=ON ve konfigürasyon uyumu kontrol edin.
- Gerekiyorsa slave verisini sıfırlayıp yeniden snapshot ile başlatın.
3) Seconds_Behind_Source artıyor
Bu durumda replikasyon “takılma” yaşıyor demektir.
Nedenler: - Master aşırı yazma yükü (binlog üretimi pahalı) - Slave disk I/O yavaş - Uzun transaction’lar - Büyük batch işlemlerinin yanlış zamanda yapılması
Hızlı müdahale planı: - Master tarafında yoğun yazan sorguları gözleyin. - Slave’de CPU/disk kullanımına bakın. - Uygulama sorgularını optimize edin (özellikle indeksler).
Failover hazırlığı: Slave’i canlı yedek gibi düşünün
Master-Slave kurulumunda çoğu ekip “failover” planını en sona bırakır; bu hata maliyeti yükseltir. Net bir hazırlık:
- Rutin olarak replika gecikmesini ölçün.
- Slave sunucusunda Prometheus/MySQL exporter gibi izleme yoksa en azından
SHOW REPLICA STATUS\Gçıktısını periyodik toplayın. - Failover prosedürünüzü test edin: replication kesme, new master seçimi, yeniden yönlendirme.
Gerçek otomatik failover için ek araçlar gerekir; bu rehber kurulum adımlarına odaklanır.
Doğru ayarları seçmek için hızlı karşılaştırma
Aşağıdaki karar tablosu, kurulum sırasında sık yapılan yanlışları azaltır.
| Karar | Yanlış yapılan şey | Net doğru yaklaşım |
|---|---|---|
| GTID kullanımı | GTID ayarları tutarsızken AUTO_POSITION denenmesi | Master/Slave konfigürasyonlarını aynı GTID hedefiyle güncelleyin |
| Snapshot | Kaba dump ile tutarlılık kaybı | --single-transaction ile tutarlı snapshot alın |
| server-id | Aynı server-id | Master=1, Slave=2 gibi benzersiz plan |
| Replika kullanıcı yetkisi | Geniş yetkiler / localhost’a kilitleme | Sadece REPLICATION SLAVE ve doğru host/IP |
| Okuma ölçekleme | Uygulamanın slave’den yazmaya devam etmesi | Read-only politika + kullanıcı yetkileri |
Sonuç: Kurulumu bitirdikten sonra yapılacak 5 aksiyon
Master-slave replication kurulumu “START REPLICA” ile bitmez; doğru işletim için doğrulama ve izleme şarttır. Şu 5 aksiyonu uygulayın:
- Slave’de
Replica_IO_RunningveReplica_SQL_Runningdurumlarını “Yes” olarak doğrulayın. Seconds_Behind_Sourcedeğerini ilk saat boyunca ve yoğun yükte izleyin.- Kritik tablolar için master/slave satır sayısı veya örnek sorgu tutarlılığını kontrol edin.
- Uygulama yönlendirmesini netleştirin: yazma master’a, okuma slave’e.
- Failover senaryosunu bir test planına bağlayın (kısa bir provası bile arıza anında zaman kazandırır).
Bu adımları izlediğinizde replikasyon, yalnızca çalışan bir servis değil; raporlama ve yedeklilik süreçlerinin güvenilir bir parçası haline gelir.
Hosting karşılaştırması yapmaya hazır mısın?
100+ firmanın fiyatlarını tek tıkla karşılaştır, en uygun paketi bul.
Hosting Karşılaştır →İlgili Yazılar
Ollama için yerel kurulum sunucu spec’leri (2026 rehberi)
Ollama’yı yerelde çalıştırmak için CPU, RAM, disk ve ağ gereksinimlerini net spec’lerle karşılaştırın. İndirme, cache ve model boyutuna göre öneri alın.
Hosting Güvenliği Sorumluluğu: Sağlayıcı Neye Bakar?
Hosting sağlayıcısı neyi garanti eder, nerede biter? Donanım, ağ, erişim kontrolü, yedekleme ve sizin sorumluluklarınızı net çerçeveyle ayırın.
VPS/VDS Performans Düşüşü: Net Sorun Giderme Planı
VPS/VDS performansı düşerse hangi metriklere bakılır, hangi ayarlar ve testler yapılır? Adım adım çözüm kontrol listesi.
Reseller Hosting ile İlk Müşteriye Satış Süreci (Adım Adım)
Reseller hosting’de ilk müşteriyi bulmak için hazırlık, paketleme, teknik kurulum, teklif, onay ve teslim adımlarını net bir süreç planıyla görün.
