Erkan Ceran

MySQL Master – Slave Replication Kurulumu ve Ayarları

Mysql

Mysql

db_replication

Mysql kullananlar bilir yoğun trafik alan sitelerde, insert – update işlemlerinin sıkça olduğu database işlemlerinde, mysql de yavaşlamalar dolayısıyla select sorgularında gecikmeler yaşanır. Bu tür sorunların önüne geçebilmek için mysql veritabanları sunucuları master-slave olarak 2 ayrı sunucuda yer alır. Master insert-delete-update gibi işlemleri için slave ise select işlemleri için kullanılır. Bu sayede slave den data çekerken, yazma işlemlerinin master da gerçekleşeceği için gecikmelerden etkilenilmeyecektir.

Şimdi gelelim işlemlere;

1) İlk olarak master sunucu olarak sunucuyu 192.168.1.5 slave olacak sununun ise 192.168.1.6 olduğunu varsayalım. Bu iki makinenin de aynı networkte olması gerekmektedir. Aksi takdirde performansda düşüş yaşanır bu yüzden 2 makineyede 2 ethernet kartı takıp, birine local (ör:192.168.x.x) diğerine ise dışardan ulaşmak için public ip (ör:212.56.x.x) vermek doğru olacaktır. Master-slave işlemini aynı makine üzerinde de yapabilirsiniz ama aynı donanımı kullanacağı için ben önermiyorum.

2) Her iki sunucuda da /etc/my.cnf dosyasından ;
#skip-networking
#bind-address
satırlarını silelim yada başlarında # işareti olduğundan emin olalım.

3) Master sunucuda /etc/my.cnf içerisine aşağıdaki satırlar eklenmeli;
binlog-do-db=test // sadece test veritabanını slave sunucuya aktarması için buraya onu yazdım. Birden fazla veritabanını aktarmasını isterseniz virgül ile yanyana yazın. Tüm mysqli aktaracaksanız bu satırı eklemeyin.
log-bin = /var/lib/mysql/mysql-bin.log // Replication işlemi log dosyaları üzerinden gider. Bu log dosyalarının tutulacağı dizin.
log-bin-index=/var/lib/mysql/mysql-bin-log.index // Yine log dosyaları için index lerin tutulacağı dizin.
server-id = 1 // bir server id si verilmeli master için 1 verebiliriz. slave için 2 vereceğiz tanımlamalar için gerekli.
expire_logs_days = 2 // serverda bir süre sonra loglar şişmeye başlıyor 2 gün sonra eski logları silsin.

4) Master sunucuyu service mysql restart diyerek yeniden başlatalım. Daha sonra consol dan slave in bu mysql e ulaşması için bir user yaratacağız.

5) Userı oluşturduk şimdi yetki verelim master sunucuda şu komutu çalıştırın mysql içerisinde ;
GRANT REPLICATION SLAVE ON *.* TO ‘repuser’@’%’ IDENTIFIED BY ‘sifreniz’;
FLUSH PRIVILEGES;

6)  User oluştu şimdi bakalım çalışıyor mu;
SHOW MASTER STATUS;
komutu çalıştırın aşağıdakine benzer bir ekran gelecek karşınıza;
+”““““““+”“““-+”““““““+”““““““““+
| mysql-bin.000021 | 0980 | test | |
+”““““““+”“““+”““““““+”““““““““+

buradaki mysql-bin.000021 ve 0980 numarasını bir yere kaydedin.

7) Şimdi master sunucudaki veritabanını bire bir slave olan sunucuya taşımamız gerekiyor.

mysqldump -u root -p --opt test > test.sql
ile master dan test isimli veritabanını yedekleyelim. Daha sonra slave sunucuda;
mysql -u root -p newdatabase < /path/test.sql

8) Taşıdıktan sonra slave sunucuya geçelim masterda işimiz bitti. Slave sunucuda /etc/my.cnf dosyasınıza aşağıdaki satırları ekleyin;

server-id = 2 : server id si 2 verelim
replicate-do-db=test : replike edilecek veritabanı adı bizimki test
relay-log=/var/lib/mysql/relay-log : replike için tutulan logların dizini
relay-log-index=/var/lib/mysql/relay-log.index : logların index dizini

9) Ekledikten sonra slave sunucuda mysql e ;

CHANGE MASTER TO MASTER_HOST=’192.168.1.5′,

MASTER_USER=’repuser’,
MASTER_PASSWORD=’sifreniz’,
MASTER_LOG_FILE=’mysql-bin.000021′,
MASTER_LOG_POS=0980;

komutunu girin. Burada masterın ip adresini ve master sunucuda oluşturduğumuz replication için user bilgilerini veriyoruz. Daha önceden kaydettiğimiz master sunucuda ki mysql-bin.000021 ve 0980 numaralarını girin. Bu kısımda hata almamanız gerekir ama alırsanız;
RESET SLAVE;
komutunu çalıştırın. Daha sonra tekrar deneyin. Eğer hata alırsanız /var/log/mysql/error_log dosyasını kontrol edin muhtemelen ağdan mysqle bağlanamıyor hatası alıyor olabilirsiniz.

10) START SLAVE; komtunu çalıştırarak slave ı başlatıyoruz ve bitiriyoruz. Eğer bir hata olmadıysa master sunucuda değişiklik yaptığınızda aynısının slave veritabanında da olduğunu görebilirsiniz.

Sorularınız olursa buradan sorabilirsiniz.

Exit mobile version