Bu kılavuz, Ubuntu 8.0|20.04’te MySQL 18.04 Master-Slave Çoğaltmasını Yapılandırmanıza yardımcı olmak içindir. MySQL, yaygın olarak benimsenen açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir. Bazı Altyapı kurulumları, SELECT deyimleri gibi okuma işlemleri için salt okunur bir veritabanı sunucunuz olmasını gerektirir.
MySQL çoğaltma işlemi, MySQL verilerinin birden çok kopyasını korumanıza olanak tanır. Master’daki tüm veriler otomatik bir süreçte Slave sunucularıyla senkronize edilir ve bir felaket yaşarsanız, commit işlemleri için Slave’i kolayca Master’a yükseltebilirsiniz. Çoğaltmanın ana rolü, kolay ölçeklenebilirlik için okuma ve yazma iş yüklerini birden çok sunucuya yaymaktır.
Bu kurulum aşağıdaki Sunucu ayrıntılarını kullanacaktır:
Master MySQL Server:10.131.74.92 Slave MySQL Server: 10.131.35.167
Adım 1: Ubuntu’da Ana Sunucuyu Yapılandırın
Yapılacak ilk yapılandırma değişikliği, ana veritabanı için Sunucu Kimliği’ni ayarlamaktır:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
Aşağıdaki satırı [mysqld] bölümünün altına ekleyin. Numara kümesinin benzersiz olması gerektiğini, kümedeki herhangi bir düğümde yeniden kullanılamayacağını unutmayın.
server-id = 1
log_bin konumu ayarlayın, burası tüm çoğaltma bilgilerinin bulunduğu yerdir. Master üzerinde yapılan tüm değişiklikler bu dosyaya yazılır. Tüm köleler ondan veri kopyalayacaktır.
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
Tamamen basit bir yapılandırma aşağıdaki gibi görünür:
[mysqld]
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
Değişikliklerin etkili olması için mysql hizmetini yeniden başlatın:
sudo systemctl restart mysql
Adım 2: Ana veritabanı sunucusunda Çoğaltma kullanıcısı oluşturma
Artık bağlanırken slave’ler tarafından kullanılacak bir veritabanı kullanıcısı oluşturmamız gerekiyor. MySQL veritabanına kök kullanıcı olarak giriş yapın ve kullanıcıyı oluşturun:
root@node-01:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE USER rpl_user@10.131.35.167 IDENTIFIED BY 'StrongPassw0rd';
Query OK, 0 rows affected (0.08 sec)
Kullanıcıya REPLICATION SLAVE ayrıcalıkları verin:
mysql> grant replication slave on *.* to rpl_user@10.131.35.167;
Query OK, 0 rows affected (0.09 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
Oluşturulan kullanıcı için izinleri onaylayın:
mysql> show grants for replica_user@10.131.35.167;
+------------------------------------------------------------------+
| Grants for replica_user@10.131.35.167 |
+------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `replica_user`@`10.131.35.167` |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
3. Adım: Slave Server’ı kurun ve yapılandırın
MySQL Server 8.0’ı, Master sunucu için kullanılan benzer bir işlemle Slave sunucusuna yükleyin. Daha önce paylaşılan bağlantıları kullanarak yükleyin.
Yükleme tamamlandığında, dosyayı düzenleyerek bağımlı dosyayı yapılandırın:
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
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
read_only = 1: Bu, bağımlı üniteyi salt okunur moda ayarlar. Yalnızca SUPER ayrıcalığına ve çoğaltma bağımlı iş parçacığına sahip kullanıcılar üzerindeki verileri değiştirebilir. Bu, master yerine slave üzerindeki verileri yanlışlıkla değiştirebilecek hiçbir uygulama olmamasını sağlar.
server-id = 2: Bu, Benzersiz bir sunucu kimlik numarasıdır. “Ana-ana bilgisayar” ayarlanmamışsa varsayılan olarak 1 olacaktır.
log_bin = /var/log/mysql/mysql-bin.log: Bu, ikili günlüğe kaydetmeyi etkinleştirir. Bu, bir çoğaltma yapılandırmasında MASTER olarak hareket etmek için gereklidir. En son yedeklemenizden belirli bir noktaya kurtarma yapabilmeniz gerekiyorsa ikili günlüğe de ihtiyacınız vardır.
Değişiklik yapmayı bitirdikten sonra mysql server’ı yeniden başlatın:
sudo systemctl restart mysql
Step 4: Initialize Replication process
Slave sunucuda Replikasyon işlemini başlatmaya hazır olmalıyız. Master’da Status’u kontrol ederek başlayın:
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 155
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
Mevcut Master günlük dosyasını ve konumunu not edin. Ardından, ana durum komutundan elde edilen ayrıntılarla Slave sunucusunu yapılandırın:
root@node-02:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CHANGE MASTER TO MASTER_HOST='10.131.74.92',
-> MASTER_USER='rpl_user',
-> MASTER_PASSWORD='password',
-> MASTER_LOG_FILE='mysql-bin.000002',
-> MASTER_LOG_POS=155;
Query OK, 0 rows affected, 2 warnings (0.11 sec)
Ardından bağımlı cihazda çoğaltmayı başlatın:
mysql> start slave;
Query OK, 0 rows affected (0.06 sec)
Bağımlı durumunu kontrol etmek için şunu kullanın:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.131.74.92
Master_User: rpl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 550
Relay_Log_File: node-02-relay-bin.000002
Relay_Log_Pos: 717
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 550
Relay_Log_Space: 927
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: d62cd5d2-784a-11e8-9768-eacea5a1be5e
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
1 row in set (0.00 sec)
Bağımlı GÇ ve SQL, çalışma durumunu belirtmelidir:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
Bu, çoğaltma kurulumumuzun beklendiği gibi çalıştığının bir kanıtıdır.
Yazının orijinaliini buradan okuyabilirisniz.