sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa Veritabanı MySQL Kurulumu MySQL Çoğaltma (Replication): Master-Slave Teme...
🐬 MySQL Kurulumu

MySQL Çoğaltma (Replication): Master-Slave Temel Kurulum

MySQL/MariaDB master-slave (primary-replica) replikasyon kurulumu adım adım rehber. Binary log, GTID ve replikasyon durumu kontrolü.

📅 30 Mart 2025 👁 43 görüntülenme ⏱ 4 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

MySQL Replikasyon Nedir?

MySQL replikasyonu, bir veritabanı sunucusundaki (master/primary) verilerin otomatik olarak bir veya daha fazla başka sunucuya (slave/replica) kopyalanması işlemidir. Bu sayede yüksek erişilebilirlik, yük dengeleme ve yedekleme gibi kritik özellikler elde edilir. Replikasyon; master sunucudaki her SQL işlemini binary log'a kaydeder, slave bu log'u okuyarak aynı işlemleri kendi üzerinde uygular.

Replikasyonun Kullanım Alanları

  • Okuma Ölçeklendirme: SELECT sorgularını slave'lere yönlendirerek master'ın yükünü azaltma
  • Yüksek Erişilebilirlik: Master çöktüğünde slave'i master'a terfi ettirme (failover)
  • Yedekleme: Slave üzerinden canlı veritabanını durdurmadan yedek alma
  • Coğrafi Dağıtım: Farklı bölgelerdeki kullanıcılara yakın replikalar

Ön Hazırlık

  • Master sunucu IP: 192.168.1.10
  • Slave sunucu IP: 192.168.1.20
  • MySQL 8.0 veya MariaDB 10.6+ her iki sunucuda kurulu olmalı
  • İki sunucu arasında port 3306 erişimi açık olmalı

Master Sunucu Yapılandırması

my.cnf Ayarları

nano /etc/mysql/mysql.conf.d/mysqld.cnf
# veya AlmaLinux için:
nano /etc/my.cnf
[mysqld]
server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log
binlog_do_db           = uygulama_db    ; yalnızca bu veritabanını replikasyon
binlog_expire_logs_days = 7
max_binlog_size        = 100M
sync_binlog            = 1              ; güvenli mod
systemctl restart mysql

Replikasyon Kullanıcısı Oluşturma

mysql -u root -p
CREATE USER 'replica_user'@'192.168.1.20' IDENTIFIED BY 'GucluReplicaSifresi123!';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'192.168.1.20';
FLUSH PRIVILEGES;

Master Durumunu Kaydedin

-- Tüm tabloları kilitle (anlık durum için)
FLUSH TABLES WITH READ LOCK;

-- Master log dosyası ve pozisyonu not alın!
SHOW MASTER STATUS;
-- Örnek çıktı:
-- File: mysql-bin.000001
-- Position: 107
-- Binlog_Do_DB: uygulama_db

Veritabanı Dışa Aktarma

# Başka bir terminal penceresinden:
mysqldump -u root -p --single-transaction --master-data uygulama_db > /tmp/master_dump.sql

# Kilidi kaldır
mysql -u root -p -e "UNLOCK TABLES;"

Slave Sunucu Yapılandırması

my.cnf Ayarları

[mysqld]
server-id              = 2          ; master'dan farklı olmalı!
relay-log              = /var/log/mysql/mysql-relay-bin.log
log_bin                = /var/log/mysql/mysql-bin.log
read_only              = 1          ; slave'e yazma yasakla
systemctl restart mysql

Master Dump'ı Yükleme

# Dump dosyasını slave'e kopyala
scp /tmp/master_dump.sql root@192.168.1.20:/tmp/

# Slave'de yükle
mysql -u root -p -e "CREATE DATABASE uygulama_db;"
mysql -u root -p uygulama_db < /tmp/master_dump.sql

CHANGE MASTER TO Komutu

STOP SLAVE;

CHANGE MASTER TO
    MASTER_HOST     = '192.168.1.10',
    MASTER_USER     = 'replica_user',
    MASTER_PASSWORD = 'GucluReplicaSifresi123!',
    MASTER_LOG_FILE = 'mysql-bin.000001',   -- SHOW MASTER STATUS'ten
    MASTER_LOG_POS  = 107;                  -- SHOW MASTER STATUS'ten

START SLAVE;

Replikasyon Durumu Kontrolü

SHOW SLAVE STATUS\G

Sağlıklı bir replikasyon için bu iki satırın Yes olması gerekir:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

Replikasyon Test Etme

-- Master'da:
USE uygulama_db;
CREATE TABLE test_replication (id INT AUTO_INCREMENT PRIMARY KEY, veri VARCHAR(100));
INSERT INTO test_replication (veri) VALUES ('replikasyon testi');

-- Slave'de doğrulayın (birkaç saniye bekleyin):
USE uygulama_db;
SELECT * FROM test_replication;

GTID Tabanlı Replikasyon (MySQL 8.0+)

GTID (Global Transaction Identifier) tabanlı replikasyon, log dosyası ve pozisyon takibi yerine işlem ID'lerini kullanır. Failover senaryolarında çok daha kolaydır:

[mysqld]
gtid_mode           = ON
enforce_gtid_consistency = ON
CHANGE MASTER TO
    MASTER_HOST     = '192.168.1.10',
    MASTER_USER     = 'replica_user',
    MASTER_PASSWORD = 'GucluReplicaSifresi123!',
    MASTER_AUTO_POSITION = 1;  -- GTID modunda log file/pos gerekmez
START SLAVE;

Sık Karşılaşılan Sorunlar

  • Slave_IO_Running: No: Master'a bağlantı sorunu. mysql -u replica_user -p -h 192.168.1.10 ile bağlantıyı test edin; firewall kurallarını kontrol edin.
  • Slave_SQL_Running: No: SQL hatası var. Last_SQL_Error alanını inceleyin. SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; ile geçebilirsiniz.
  • Seconds_Behind_Master yüksek: Slave donanımını güçlendirin; paralel replikasyon ayarlarını inceleyin (slave_parallel_workers).
  • Duplicate entry hatası: Slave'e yanlışlıkla yazma yapılmış. read_only = 1 ayarını aktifleştirin.

İlgili Makaleler

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al
Etiketler: #mysql #performans #yedek #replication

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.