Mysql

-- Mysql

MySQL Master – Slave Replication Kurulumu ve Ayarları

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.

  • Önce mysql e girin; mysql -u root -p
  • Daha sonra: use mysql
  • Son olarakta şu komutu girin: CREATE USER ‘repuser’@’%’ IDENTIFIED BY ‘sifreniz’;

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.

Murat Yılmaz için cevap yaz Vazgeç

Yorumla

Yorum

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.