Mysql Master – Slave Replication Yapımı
Bu Dökümanda kullanılacak sunucu ip adresleri:
Ana (Master) Database : 12.34.56.789
İkinci (Slave) Database : 12.23.34.456
Kurulum:
Bu işlem eğer mysql server ve client bulunmuyorsa işlem yapmanız gerekmektedir.
sudo apt-get install mysql-server mysql-client
Adım 1: Ana Databasenini yapılandırma
Ana sunucuda mysql yapılandırma dosyasını açın.
sudo nano /etc/mysql/my.cnf
İp adresi değişimi yapmamaız gerekiyor.
bulun:
bind-address = 127.0.0.1
Değiştirin:
bind-address = 12.34.56.789
(Sunucu ip adresinizi yazacaksınız)
Sonrasında sunucu numaralarınızı yazmanız gereklidir. 1. master olana 1 verelim.
server-id = 1
başında açıklama satırını olup olmadıgına dikkat ediniz.
Aşagıdaki kodu aktifleştirin. Başındaki yorum satırını kaldırınız. Slave database baglantı loglarını tutacak.
log_bin = /var/log/mysql/mysql-bin.log
Bundan sonraki aşamaada hangi veritabanını replica yapacagınızı belirtiyoruz.
binlog_do_db = yeniveritabani
Sonrasında mysql resetleyin.
sudo service mysql restart
Mysql e root yetkisi ile erişim yapın.
mysql -u root -p
Slave makine için bilgilerini yazmanız gerekmektedir. Kendinize göre bilgileri doldurun.
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
sonrasında
FLUSH PRIVILEGES;
kodunu yazınız.
Sonrasında yeni bir ssh penceresi acıp veritabanına baglanın ve aşagıdaki kod ile o veritabanını kullanmaya başlayın.
USE newdatabase;
Sonrasında okumayı engellemek için kilitleyin.
FLUSH TABLES WITH READ LOCK;
hemen sonrasında
SHOW MASTER STATUS;
Aşagıdakine benzer bir kod alacaksınız.
mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 107 | newdatabase | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
Yukarıdaki bilgileri kayıt edin. İlerleyen süreçte gerekecek.
Eğer bu pencerede işlem yaparseniz okuma kilidini kaldıracaktır. Bu yüzden yeni bir pencerede ssh baglanın.
Eğer kilid kapalı ise aşagıdaki kod ile mysql yedeginizi alın.
mysqldump -u root -p --opt newdatabase > newdatabase.sql
Şimdi bir önceki ssh pencerenizi acın ve veritabanının okuma iznini acın.
UNLOCK TABLES;
EXIT;
diyerek çıkın.
Slave serverinize gecin ve veri tabanınızı yükleyin.
mysql -u root -p newdatabase < /path/to/newdatabase.sql
Sonrasında my.cnf den 2. database sunucusu oldugunu belirtelim.
sudo nano /etc/mysql/my.cnf
bir öncekinde server-id degerini 1 yapmıştık bunu 2 yapalım. Lütfen sıra numaralarını dikkatli yapın.
server-id = 2
Aşagıdaki kodları bulup düzenleyin.
relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase
kayıt ettikten sonra mysql serverinizi resetleyin
sudo service mysql restart
Mysqle giriş yapıp aşagıdaki kodları yazın. Unutmadan ip adreslerini kendinize göre düzenleyin.
CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
Üstteki kod ile bu sunucun master sunucunun slave sunucusu oldugunu belirtmiş oluruz. Sonrasında slave server başlatmamız gerekiyor.
START SLAVE;
Durum Kontrol için:
SHOW SLAVE STATUS\G
Eğer sıkıntılı bir durum olursa.
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;
kodunu çalıştırabilirsiniz.