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'de Basit Replikasyon Kurulumu: Master-Slave Yapılandırması Adım Adım

nexter

Üye
Katılım
14 Mart 2026
Mesajlar
4
Merhaba arkadaşlar, bugün sizlere özellikle yüksek erişimli sitelerde veya veri güvenliği kritik olan projelerde hayat kurtarıcı bir yöntem olan MySQL/MariaDB Master-Slave replikasyonunu nasıl kuracağınızı adım adım anlatacağım. Bu yapılandırma, yazma işlemlerinizi (INSERT, UPDATE, DELETE) Master sunucuda yaparken, okuma işlemlerinizi (SELECT) bir veya daha fazla Slave sunucuya dağıtarak hem yükü dengelemenizi hem de verilerinizin bir kopyasını sürekli yedekli halde tutmanızı sağlar. Benim de kritik sunucularımda sıklıkla kullandığım bir yöntem.

🎯 Replikasyon Nedir ve Neden Önemli?

Replikasyon, bir veritabanı sunucusundaki (Master) tüm veri değişikliklerinin, bir veya daha fazla başka sunucuya (Slave) otomatik olarak kopyalanması işlemidir. En büyük faydaları yük dengeleme (Load Balancing), veri yedekleme ve yüksek kullanılabilirlik (High Availability) sağlamasıdır. Slave sunucunuz anlık yedek görevi görür ve Master'da bir sorun olsa bile okuma işlemleriniz kesintisiz devam edebilir.

⚙️ Hazırlık ve Ön Koşullar

İki adet sunucunuz (veya sanal makineniz) olduğunu ve her ikisine de MySQL (5.7+ önerilir) veya MariaDB kurulu olduğunu varsayıyorum. Sunucular birbirleriyle ağ üzerinden iletişim kurabilmelidir. Master sunucunuzun IP adresinin 192.168.1.100, Slave sunucunuzun IP adresinin ise 192.168.1.101 olduğunu örnek olarak kullanacağım. Siz kendi IP adreslerinizle değiştirmeyi unutmayın.

🔧 Master Sunucu Yapılandırması

İlk işlem Master sunucumuzu replikasyona hazır hale getirmek. SSH ile Master sunucunuza bağlanın.

1. MySQL/MariaDB yapılandırma dosyasını düzenleyelim. Genellikle /etc/mysql/my.cnf veya /etc/my.cnf yolundadır. Aşağıdaki satırları [mysqld] bölümünün altına ekleyin.

INI:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = replike_edilecek_db
bind-address = 0.0.0.0

Burada server-id her sunucu için benzersiz olmalı (Master için 1 verdik). log_bin binary log dosyasının yoludur. binlog_do_db sadece belirli bir veritabanını replike etmek isterseniz kullanılır, tüm veritabanları için bu satırı kaldırabilirsiniz. bind-address satırı, MySQL'in tüm ağ interfacelerini dinlemesini sağlar, güvenlik için sadece Slave IP'sini belirleyebilirsiniz.

2. MySQL servisini yeniden başlatalım.

Bash:
sudo systemctl restart mysql

3. Şimdi MySQL konsoluna girelim ve replikasyon için bir kullanıcı oluşturalım.

SQL:
mysql -u root -p

MySQL içinde aşağıdaki komutları çalıştırın:

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

SHOW MASTER STATUS; komutunun çıktısı SİZİN İÇİN ÇOK ÖNEMLİ! Aşağıdaki gibi bir tablo göreceksiniz. File (örn: mysql-bin.000001) ve Position (örn: 107) değerlerini bir yere not edin. Slave sunucuyu yapılandırırken bu değerlere ihtiyacımız olacak.

Kod:
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |              |                  |
+------------------+----------+--------------+------------------+

Not aldıktan sonra, tabloları kilitten kurtaralım.

SQL:
UNLOCK TABLES;

⚠️ Dikkat Edilmesi Gerekenler (Master)

Bu aşamada, SHOW MASTER STATUS çıktısını not alana kadar Master sunucuda veritabanı yapısını veya veriyi değiştirmemeniz (CREATE, ALTER, INSERT vb.) çok önemli. Aksi takdirde Position değeri değişir ve Slave'i doğru konumdan başlatamazsınız.

📦 Slave Sunucu Yapılandırması

Şimdi Slave sunucumuza geçelim ve onu yapılandıralım.

1. Öncelikle Master sunucudaki verilerin tamamını Slave'e aktarmamız gerekiyor. Bunun için Master'da bir dump (yedek) alıp, Slave'e yükleyeceğiz. Master sunucuda terminalde şu komutu çalıştırın:

Bash:
mysqldump -u root -p --all-databases --master-data > master_dump.sql

Bu dump dosyasını Slave sunucunuza kopyalayın (scp ile). Ardından Slave sunucusunda MySQL konsoluna girin ve dump'ı içe aktarın.

Bash:
mysql -u root -p < master_dump.sql

2. Şimdi Slave'in yapılandırma dosyasını düzenleyelim (/etc/mysql/my.cnf).

INI:
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log

Slave'in server-id'si Master'dan farklı olmalı (2 verdik). Servisi yeniden başlatalım.

Bash:
sudo systemctl restart mysql

3. En can alıcı nokta: Slave'i Master'a bağlamak. MySQL konsoluna girin ve aşağıdaki komutu, kendi değerlerinizle doldurarak çalıştırın.

SQL:
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='replika_user',
MASTER_PASSWORD='GucluBirSifreBuraya',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;

Burada MASTER_LOG_FILE ve MASTER_LOG_POS, Master sunucuda not ettiğimiz değerler olacak.

4. Son adım olarak Slave replikasyon sunucusunu başlatalım ve durumunu kontrol edelim.

SQL:
START SLAVE;
SHOW SLAVE STATUS\G

SHOW SLAVE STATUS\G komutunun çıktısında şu iki satırı mutlaka kontrol edin:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes

Eğer her ikisi de "Yes" ise, tebrikler! Replikasyon başarıyla çalışıyor demektir. "No" veya "Connecting" görürseniz, genellikle parola, IP veya port (varsayılan 3306) hatası veya firewall engeli vardır. Hata loglarına (/var/log/mysql/error.log) bakmanızı öneririm.

✅ Test ve Son Kontroller

Her şeyin çalıştığından emin olmak için Master sunucuda bir veritabanı veya tablo oluşturun, içine kayıt ekleyin. Birkaç saniye içinde Slave sunucuda aynı değişiklikleri gözlemleyebilmelisiniz. Slave'de sadece okuma yapabildiğinizi, yazma yapamadığınızı unutmayın.
 

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