Master-Slave kurulumu için gereksinimler;
- 3 adet Ubuntu sunucuya ihtiyacımız var.
- Bu sunuculara Static IP tanımlaması yapılması gerekmektedir.
- DB root kimlik bilgileri oluşturmamız gerekmektedir.
Belirtilen gereksinimler kurulum içindir. Burada özel bi yapılandırma yapılacak ise bunun için özel mimari çalışılması gerekmektedir.
IP yapılandırması
- Master Makinesi IP: 192.168.56.150
- Slave 1 Makinesi IP: 192.168.56.151
- Slave 2 Makinesi IP: 192.168.56.153
3 makinede yapmamız gereken ilk şey sunucuları update ve upgrade etmemiz olacaktır. Ardından konfigürasyonlara başlamadan önce servisleri ayağa kaldırıp root kimlik bilgileri oluşturmamız olacaktır. Her şeyi adım adım ilerleteceğiz.
sudo apt update -y && sudo apt upgrade -y
MySQL servisini kuruyoruz.
sudo apt install mysql-server -y
Kurulum tamamlandıktan sonra MySQL servisini başlatıyoruz.
sudo systemctl start mysql
Kurulum yaptığımız MySQL servisini sunucu restartlandığı durumda servisi aktif halde çalışabilmesi için komutunu çalıştırıyoruz.
sudo systemctl enable mysql
Root kimliğine bu kurulumda ihtiyacımız olduğu için, secure installation kurmamız gerekiyor.
sudo mysql_secure_installation
MySQL’i root kullanıcısı ile kullanacağımız için sunucuda root kullanıcı şifresi ne ise MySQL de aynı şifre olarak geçecektir. Güvenlik amaçlı bu şifreyi değiştirmemiz de çok fayda olacaktır.
mysql -u root -prootşifresi
MySQL e root kullanıcısı ile eriştikten sonra artık burada root kullanıcısının şifresini değiştirebiliriz.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'yenirootşifresi';
Sunucu kurulum, güncelleme ve root kimlik bilgileri düzenleme işlemlerini tamamlamış olduk. Artık sırayla yapmamız gerekecek olan kısımlar Master-Slave yapısını ayağa kaldırmamız olacaktır.
Mysql kurulumunda gelen default konfigürasyonu taşıma yaparak ismini değiştiriyoruz.
mv /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf-backup
Taşıma yaptığımız dosyanın ardından yeni bir dosya oluşturuyoruz.
vim /etc/mysql/mysql.conf.d/mysqld.cnf
Oluşturulan dosyanın içeriğine bu konfigürasyonu girmiş oluyoruz. Bu konfigürasyon yine özelinde bi konfigürasyon değil özel bir konfigürasyon için ihtiyaçlarımızı çıkartıp ona göre çıkarabiliriz.
[mysqld]
user = mysql
default_authentication_plugin=mysql_native_password
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
tmpdir = /tmp
binlog_format = ROW
max_binlog_size = 500M
sync_binlog = 1
expire-logs-days = 7
slow_query_log
Konfigürasyon yapıldıktan sonra master makinesinde servisi restart ediyoruz. Konfigürasyonda hata var ise o hataya göre güncelleme yapılabilir.
systemctl restart mysql
MySQL özelinde konfigürasyon yapmamız için mysql komutunu çalıştırıyoruz.
mysql -u root -p güncellediğimizrootşifresi
1.Slave sunucusunun Master sunucusuna erişebilmesi için kullanıcı oluşturup 1.slave sunucu ip sine yetki vermemiz gerekmektedir. Aşağıdaki komutla bu işlemleri gerçekleştirebiliriz.
create user replica@192.168.56.151 identified with mysql_native_password by 'Pass@123';
GRANT ALL PRIVILEGES ON *.* TO 'replica'@'192.168.56.151' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2. Slave sunucusunun Master sunucusuna erişebilmesi için kullanıcı oluşturup 2. Slave sunucu ip sine yetki vermemiz gerekmektedir. Aşağıdaki komutla bu işlemleri gerçekleştirebiliriz.
create user replica@192.168.56.153 identified with mysql_native_password by 'Pass@123';
GRANT ALL PRIVILEGES ON *.* TO 'replica'@'192.168.56.153' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Kullanıcılar Master sunucusunda oluşturuldu ve yetkilendirmelerimizi tamamlamış olduk. Master sunucusu olduğu için status sorgulamamız ve ardından bize sonuç olarak log file ve log position bilgisi verecektir.
show master status;
Komut çıktısını aşağıda görebilirsiniz. Bu bizim için çok önemli olduğunu dile getirmek isterim. Slave makinelerini bu bilgilerle bağlama işlemi gerçekleştireceğiz.

Master kurulumumuz tamamlanmıştır. Slave kurulumuna devam edebiliriz. Mysql kurulumunda gelen default konfigürasyonu taşıma yaparak ismini değiştiriyoruz.
mv /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf-backup
Taşıma yaptığımız dosyanın ardından yeni bir dosya oluşturuyoruz.
vim /etc/mysql/mysql.conf.d/mysqld.cnf
Oluşturulan dosyanın içeriğine slave makinesi olduğu için bu konfigürasyonu 2 Slave makinesinde girmemiz gerekir. Bu konfigürasyon yine özelinde bi konfigürasyon değil özel bir konfigürasyon için ihtiyaçlarımızı çıkartıp ona göre çıkarabiliriz.
[mysqld]
user = mysql
default_authentication_plugin=mysql_native_password
log_bin = /var/log/mysql/mysql-bin.log
server-id = 2
read_only = 1
tmpdir = /tmp
binlog_format = ROW
max_binlog_size = 500M
sync_binlog = 1
expire-logs-days = 7
slow_query_log = 1
Konfigürasyon yapıldıktan sonra 2 slave makinesinde servisi restart ediyoruz. Konfigürasyonda hata var ise o hataya göre güncelleme yapılabilir.
systemctl restart mysql
MySQL özelinde konfigürasyon yapmamız için 2 Slave makinesinde mysql komutunu çalıştırıyoruz.
mysql -u root -p güncellediğimizrootşifresi
2 Slave makinesinde Slave stop ediyoruz.
slave stop;
Slave sunucularını Master sunucularına bağlayabilmemiz için aşağıdaki komutu çalıştırmamız gerekir. Bu komut içeriğinde kullanıcı bilgisi, ip bilgisi ve log file ile log position bilgilerini girmemiz gerekmektedir.
MASTER_HOST= Master sunucu ipsi
MASTER_USER ve MASTER_PASSWORD= Master makinesinde oluşturduğumuz kullanıcı ve parola bilgisidir.
MASTER_LOG_FILE ve MASTER_LOG_POS= Show status teki log_file ile Position bilgisi olacaktır.
CHANGE MASTER TO MASTER_HOST='192.168.56.150', MASTER_USER='replica', MASTER_PASSWORD='Pass@123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=3481;
Yukarıdaki komutu girdikten sonra artık 2 Slave sunucularında slave i başlatabiliriz.
start slave;
Bu işlemleri gerçekleştirdikten sonra slave sunucularında mastera bağlı olup olmadığını kontrol etmemiz gerekir.
show slave status\G;
Çalıştırdığımız komut sonucu aşağıdaki gibi ise Slave sunucuları Master sunucularına bağlanmış olarak gözükmektedir.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Son olarakta 1 slave sunucusunda çıktı aşağıdaki gibidir.
