Sales5 min read907 words

MySQL Master-Slave Replikasyon Konfigürasyonu Nasıl Yapılır ?

Fatih Çevik

Fatih Çevik

PlusClouds Author

Cloud & SaaS

MySQL Master-Slave Replikasyonu nasıl yapılır ?

Nasıl yapılır bölümüne geçmeden önce gerekliliklerden kısaca söz edelim.

  • En az 2 adet fiziksel veya sanal makineye ihtiyacımız var. Bu yazımızda iki adet debian 10 sanal makine kullanacağız. Aynı dağıtımları kullanmanızı önemle tavsiye ediyoruz. İki sanal makinede de aynı MySQL sürümü yüklü olmalıdır.
  • Firewall konfigürasyonu için ufw.
  • Master ve slave makinelerin haberleşmesi için ikisinde de kurulu ve senkronize çalışan NTP server gerekmekte.

Gereksinimlerden kısaca bahsettiğimize göre konfigürasyon kısmına geçebiliriz.

1. NTP Konfigürasyonu

İlk adımımız iki makinede de aynı NTP konfigürasyonunu yapmak olacak. Henüz kurmadıysanız aşağıdaki komut ile NTP server kurabilirsiniz.

apt -y install ntp

Şimdi kurduğumuz NTP serverları birbirleriyle senkronize olacak şekilde konfigüre edeceğiz. Yazımızda Asia NTP serverlarını kullanacağız.

*nano /etc/ntp.conf*
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst

Conf dosyasını düzenledikten sonra kaydedip NTP servisini yeniden başlatıyoruz.

*/etc/init.d/ntp restart*

2. Makinelerimiz Birbirini Tanımalı

Kullandığımız sunucuların hepsi birbirini tanımalı ve sorunsuz şekilde iletişim kurmalıdır. Eğer mevcutsa local DNS kullanabilirsiniz. Örneğimizde biz DNS sahibi olmadığımız için hosts dosyasını konfigüre edeceğiz.

*nano /etc/hosts*
master_server ip master_server_hostname
slave_server_ip slave_server_hostname

Yapacağımız konfigürasyonların hepsinin bütün serverlarda eksiksiz şekilde yapılması gerektiğini UNUTMAYIN .

3. Firewall Konfigürasyonu

Yazının başında kurmadıysanız aşağıdaki komut ile öncelikle ufw kurmalısınız.

apt -y install ufw

Eğer SSH ile bağlantı sağlıyorsanız kurduktan sonra ilk olarak SSH portuna izin vermelisiniz. Aksi takdirde ufw servisini çalıştırdığınızda SSH bağlantınızı kaybedebilirsiniz.

ufw allow 22
ufw allow from slave_server_ip to any port 3306
systemctl enable ufw
systemctl start ufw
ufw enable

İlk olarak 22 yani SSH portuna izin verdik ardından yazdığımız kural ise 3306 yani MySQL tarafından kullanılan port için yazılan izin. slave_server_ip kısmını slave makinenizin ip adresi ile değiştirmeyi unutmayın.

Buraya kadar her şey tamam ise artık master sunucumuzun konfigürasyonuna başlayabiliriz.

4. Master Sunucu Konfigürasyonu

Debian 10'da MySQL server konfigürasyon dosyası **mysqld.cnf** adı ile **/etc/mysql/mysql.conf.d/** klasörünün altında bulunmaktadır. İlk olarak master sunucumuzda **nano** editör ile açıyoruz. Tercih ettiğiniz farklı editör varsa onu da kullanabilirsiniz.

nano /etc/mysql/mysql.conf.d/mysqld.cnf

Dosyayı açtıktan sonra ilk olarak bağlantı adresini düzenliyoruz. Ekli ise düzenleyin aşağıdaki satır ekli değil ise kendiniz ekleyin.

bind-address = master_server_ip

bind-address düzenlemesi yaptıktan sonra **server-id** satırını bulun. Eğer ekli değilse yine yukarıdaki gibi ekleyin. Değer olarak 1 verebilirsiniz, bu değer sunuculara özel bir değer olmalıdır.

server-id = 1

Bu adımı da tamamladıktan sonra MySQL binary log dosyasının yerini belirtmemiz gerekiyor. Bu yol belirtilmezse binary loglama inaktif olmakta ve slave serverınız log dosyasını okuyamayacağı için neyi replike etmesi gerektiğini bilemeyecektir. Aşağıdaki gibi yolu belirtiyoruz.

log_bin = /var/log/mysql/mysql-bin.log

Son olarak replike edilecek veritabanı veya veritabanlarını belirtmemiz gerekiyor.

binlog_do_db = testdb

Değişikleri bitirdikten sonra sırasıyla CTRL + X, Y ve ENTER tuşlarını basarak kaydedin.

Çıktıktan sonra MySQL servisini yeniden başlatıyoruz.

systemctl restart mysql

Master sunucumuzun konfigürasyon kısmını bitirdik fakat slave sunucumuza geçmeden önce burada yapmamız gereken bir kaç küçük işimiz daha var. Replikasyon için slave serverın bağlanabileceği bir kullanıcı oluşturup izin vermemiz gerekiyor. MySQL shell'ine girerek devam ediyoruz.

mysql -u root -p
CREATE USER 'slave_user'@'slave_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
Bu komutun, slave kullanıcısının mysql native password kimlik doğrulama eklentisini kullanacağını belirttiğine dikkat edin. Bunun yerine MySQL'in varsayılan kimlik doğrulama mekanizması olan caching_sha2_password'ü kullanmak da mümkündür, ancak bunun için master ile slave sunucu arasında şifreli bir bağlantı kurulması gerekir. Bu tür bir kurulum, üretim ortamları için ideal olacaktır, fakat şifreli bağlantı yapılandırması bu öğreticimizde mevcut değil.
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_server_ip';
FLUSH PRIVILEGES;

Bununla birlikte master sunucu konfigürasyonumuz bitirdik. Her ne kadar konfigürasyonumuz bitmiş olsa da hemen MySQL shell'den çıkış yapmayın. Bir sonraki adımda veritabanımızın binary log dosyası ile ilgili önemli bilgileri alacağız.

MySQL, veritabanı olaylarını kaynağın binary log dosyasından satır satır kopyalayarak ve her olayı slave sunucuda uygulayarak replikasyon uygular. Bu sebeple slave sunucu tarafında konfigürasyon yaparken master sunucumuzun binary log dosyasının adını ve bu dosya içindeki belirli bir konumu ayrıntılandıran koordinatı da belirtmeliyiz.


Koordinatları alırken hiçbir kullanıcının herhangi bir veriyi değiştirmediğinden emin olmak için veritabanını kısa süreli kilitlememiz gerekmektedir.
FLUSH TABLES WITH READ LOCK;

Sonrasında da binary log dosyalarının durumunu görüntülemek için aşağıdaki kodu çalıştırın.

SHOW MASTER STATUS;

```

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 899 | testdb | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

```

Yukarıdakine benzer bir çıktı alacaksınız.

Master sunucunuzda henüz bir veritabanı bulunmuyorsa öncelikle kilidi kaldırıp veritabanı oluşturun.

UNLOCK TABLES;
CREATE DATABASE testdb;

bu adımdan sonra master sunucuda işimiz bitti. Yukarıdaki çıktıda aldığımız binary log dosyasının bilgilerini kesinlikle unutmayın. Birazdan slave sunucumuzda kullanacağız.

5. Slave Sunucu Konfigürasyonu

Bu kısımda master sunucuda yaptığımıza benzer şekilde konfigürasyon dosyasını değiştiriyoruz. Yukarıda anlatıldığı için adımları hızlıca geçiyoruz.

nano /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = testdb

Son olarak slave sunucumuzda relay log dosyasının yolunu tanımlayan relay-log direktifini ekliyoruz.

relay-log = /var/log/mysql/mysql-relay-bin.log

Değişiklikler bittikten sonra burada da MySQL servisini yeniden başlatıyoruz.

systemctl restart mysql

Artık replikasyon işlemini test etmek için hazırız. Slave sunucumuzda MySQL shell'ine giriş yapıyoruz.

mysql -u root -p

Şimdi sıra geldi replikasyon işlemine. Master sunucu üzerindeki slave sunucuya tanıtmamız gereken bilgileri giriyoruz.

CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master_server_ip',
SOURCE_USER='slave_user',
SOURCE_PASSWORD='password',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=899;
START REPLICA;

Bütün adımlar doğru şekilde yapıldıysa bu andan itibaren **testdb** veritabanında yapılan bütün değişiklikler slave sunucumuza da gidecektir.

SHOW REPLICA STATUS\G

Slave sunucumuzda replika durumunu yukarıdaki komut ile görebiliriz.

```

*************************** 1. row ***************************

Replica_IO_State: Waiting for master to send event

Source_Host: 'slave_server_ip'

Source_User: slave_user

Source_Port: 3306

Connect_Retry: 60

Source_Log_File: mysql-bin.000001

Read_Source_Log_Pos: 1273

Relay_Log_File: mysql-relay-bin.000003

Relay_Log_Pos: 729

Relay_Source_Log_File: mysql-bin.000001

```

Yukarıdakine benzer bir çıktı alacaksınız. Artık elimizde Master-Slave ilişkisi ile oluşturulmuş MySQL Replikasyonu mevcut. Master sunucunuzda veritabanınıza herhangi bir tablo ekleyerek test edebilirsiniz.

Sıkça Sorulan Sorular

MySQL Master-Slave Replikasyonu için hangi altyapı gereksinimleri gerekir?

Replikasyon için en az iki makine gerekir; bu örnekte iki Debian 10 sanal makine kullanılıyor ve aynı dağıtım ile aynı MySQL sürümü gerekir. Ayrıca güvenlik için ufw ile firewall kurulumu ve makineler arasında haberleşme için senkronize NTP sunucuları gerekir.

NTP kurulumu ve senkronizasyonu nasıl yapılır?

İlk adım iki makinede de aynı NTP konfigürasyonunu yapmak; ntp paketi kurulur apt -y install ntp ve Asia pool sunucuları ile /etc/ntp.conf düzenlenir. Konfigürasyon tamamlandıktan sonra NTP servisi yeniden başlatılır.

Makineler birbirini nasıl tanımalı ve hangi ayarlar gerekli?

Sunucular birbirini tanımalı ve sorunsuz iletişim kurmalıdır; mevcutsa local DNS kullanılabilir, yoksa hosts dosyası ile master_server_hostname ve slave_server_hostname eşlenir. Yapılan konfigürasyonların tüm sunucularda eksiksiz olması çok önemlidir.

Firewall konfigürasyonu nasıl yapılır ve hangi portlar açık olmalı?

Öncelikle ufw kurulmalı; SSH için 22 numaralı porta izin verilmelidir, ardından slave makineden MySQL 3306 portuna erişim izni verilir. Daha sonra ufw servisi etkinleştirilir ve güvenlik kuralları uygulanır.

Master sunucusunun MySQL konfigürasyonu nelerdir?

Debian 10’da MySQL konfigürasyon dosyası /etc/mysql/mysql.conf.d/mysqld.cnf altında bulunur; bind-address olarak master_ip ayarlanır, server-id 1 yapılır, log_bin yolu belirtilir ve binlog_do_db ile hangi veritabanlarının loglanacağı belirlenir. Değişiklikler kaydedildikten sonra MySQL servisi yeniden başlatılır.

Master üzerinde replication için kullanıcı nasıl oluşturulur ve izinler nasıl verilir?

MySQL shell’e girip slave kullanıcısı oluşturulur: CREATE USER 'slave_user'@'slave_server_ip' IDENTIFIED WITH mysql_native_password BY 'password'; Ardından GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_server_ip'; FLUSH PRIVILEGES; Bu örnekte mysql_native_password kullanımı belirtilmiştir.

Binary log bilgilerini almak için hangi adımlar izlenir ve kilit neden gerekir?

Binary log konumunu güvenli almak için FLUSH TABLES WITH READ LOCK komutu ile kilit uygulanır ve SHOW MASTER STATUS ile File ve Position bilgileri alınır. Kilit durumundan sonra kilit kaldırılıp gerekiyorsa veritabanı oluşturulur (UNLOCK TABLES; CREATE DATABASE testdb). Master log bilgileri daha sonra slave tarafında kullanılır.

Slave sunucusunda hangi ayarlar yapılır ve replika nasıl başlatılır?

Slave tarafında /etc/mysql/mysql.conf.d/mysqld.cnf üzerinde server-id 2, log_bin ve binlog_do_db testdb ile relay-log yolu belirlenir; değişiklikler sonrası MySQL servisi yeniden başlatılır. Ardından slave üzerinde CHANGE REPLICATION SOURCE TO SOURCE_HOST='master_server_ip', SOURCE_USER='slave_user', SOURCE_PASSWORD='password', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=899; START REPLICA; SHOW REPLICA STATUS\G ile durumu kontrol edilir.

İlgili Okumalar

Etiketlenen yazılar:

LeadOcean ve PlusClouds CRM Entegrasyonu: Otomatik Pipeline Kurulumu
Sales

LeadOcean ve PlusClouds CRM Entegrasyonu: Otomatik Pipeline Kurulumu

Bu rehberde; operasyonel yükü minimuma indiren bir yöntemi, yani LeadOcean üzerinde toplanan nitelikli verileri PlusClouds CRM ekosistemine otomatik olarak aktarmanın yolunu inceleyeceğiz. "Workspace Pusher" mekanizmasını kullanarak uçtan uca dijital bir köprü kuracak ve satış süreçlerinizi nasıl tam otomatik hale getirebileceğinizi adım adım ele alacağız.

WhatsApp Otomasyonu: Lead’leri Satışa Dönüştürmenin Yeni Yolu
Sales

WhatsApp Otomasyonu: Lead’leri Satışa Dönüştürmenin Yeni Yolu

Dijital dünyada rekabet artık sadece “daha fazla lead toplamak” üzerinden ilerlemiyor. Asıl fark yaratan, elde ettiğiniz lead’lere ne kadar hızlı, doğru ve kişiselleştirilmiş şekilde ulaştığınız. Bu noktada WhatsApp, yüksek etkileşim oranlarıyla en güçlü iletişim kanallarından biri olurken; n8n gibi araçlar sayesinde bu süreci tamamen otomatik ve ölçeklenebilir hale getirmek mümkün. Bu yazıda, n8n kullanarak WhatsApp otomasyonu kurmayı, Eaglet ve Leadocean gibi platformlardan gelen lead’leri satışa dönüştürmeyi ve bu süreci nasıl optimize edebileceğinizi detaylı şekilde ele alıyoruz.

2026’da WhatsApp ile Affiliate Gelir
Sales

2026’da WhatsApp ile Affiliate Gelir

2026 itibarıyla affiliate marketing artık sadece trafik üretmekle ilgili değil. Asıl farkı yaratan şey, o trafiği doğrudan satışa dönüştürebilmek. İşte burada WhatsApp devreye giriyor. 2026’da WhatsApp ile Affiliate Gelir nasıl elde edilir? E-posta açılma oranları düşerken, WhatsApp mesajlarının okunma oranı %90’ların üzerinde. Yani doğru stratejiyle WhatsApp, affiliate gelir için en güçlü “son temas noktası” haline geliyor. Ama burada kritik fark şu: Manuel mesaj atanlar değil, otomasyon kuranlar kazanıyor.

PlusClouds Affiliate ile Pasif Gelir (2026 Rehberi)
Sales

PlusClouds Affiliate ile Pasif Gelir (2026 Rehberi)

Dijital dünyada trafik üretmek bir beceri olabilir. Ancak 2026 itibarıyla asıl mesele trafik değil, trafiği gelire dönüştürme sistemi kurmak. Affiliate marketing (satış ortaklığı) yıllardır var. Fakat artık Amazon’dan düşük komisyonlu ürün satma dönemi kapandı. Gerçek kazanç; yüksek sepet tutarlı, B2B SaaS odaklı ve sürekliliği olan sistemlerde. İşte tam bu noktada PlusClouds devreye giriyor. 2026’da PlusClouds ile pasif gelir imparatorluğu kurmak artık çok basit. PlusClouds yalnızca bir bulut bilişim sağlayıcısı değil; affiliate’ler için yüksek komisyonlu, ölçeklenebilir ve araç destekli bir gelir ekosistemi sunuyor.