MySQL replikasyonu kullanıcıların bir veya daha fazla MySQL veritabanının birden fazla kopyasını yönetmesine olanak tanıyan ilginç bir özelliktir. Veriler otomatik olarak kaynak veritabanından replica veritabanlarına kopyalanır. Ana veritabanından ödün vermeden verilerle çalışmak, veri yedekleme veya veritabanı erişimini ölçeklendirmek gibi sayısız durumda yararlı olabilir.
Bu kılavuzda, bir sunucuda kaynak veritabanı olarak bir MySQL örneği kurma ve ardından başka bir sunucuda bunun replikası olarak çalışacak bir MySQL örneği yapılandırma adımlarını inceleyeceğiz.
Gereksinimler
Bu kılavuz, MySQL replikasyonunun çok basit bir örneğini gösterecektir. Bir kaynak ve bir replica veritabanı içerir. Kaynak veritabanı, veritabanının birincil kopyasıyken, replica veritabanı, kaynak veritabanının replikası olacaktır. Gösterimimiz için iki sunucu aşağıdaki IP adresleriyle yapılandırılmıştır:
- Kaynak sunucu: 31.171.240.179
- Replica sunucu: 31.171.250.139
Her sunucu en son Ubuntu 20.04 sunucu yapılandırmasıyla yapılandırılmıştır. İlk olarak, Ubuntu sunucunuzu nasıl kuracağınızı gösteren eğitimin adımlarını izleyin. Replica veritabanlarının sayısının daha fazla olabileceğini unutmayın. Bu kılavuz, MySQL'in zaten kurulu ve yapılandırılmış olduğunu varsayar. MySQL kurulumuyla ilgili yardıma mı ihtiyacınız var? Bu kılavuz, MySQL kurulumu ve temel kullanımı.
Kısacası, ihtiyacınız olan paketler şunlardır:
|
1 |
$ sudo apt install mysql-server mysql-client |
Her iki sistemdeki güvenlik duvarları, her iki sistemden gelen trafiğe şu bağlantı noktasında izin verecek şekilde yapılandırılmalıdır: 3306. Bu, MySQL için varsayılan bağlantı noktasıdır. Uygulamalı UFW temelleri hakkında blog yazımızdan daha fazla bilgi edinebilirsiniz.
Kaynak Veritabanı Yapılandırması
-
MySQL yapılandırmasını ince ayar yapma
MySQL, birincil yapılandırma dosyası olarak my.cnf dosyasını kullanır. my.cnf dosyasını, sunucuyu kaynak olarak belirlemek için güncelleyeceğiz. İlk olarak, yapılandırma dosyasını bir metin düzenleyiciyle açın:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Ardından, mysqld bölümünün altına aşağıdaki satırları ekleyin:
|
1 2 3 4 |
bind-address = 31.171.240.179 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Bu satırlar ne anlama geliyor?
bind-address: Bir hizmet ile bir IP adresi arasındaki ilişkiyi tanımlayan girdidir. Varsayılan olarak değer127.0.0.1(localhost) olabilir. Yeni değer, sunucunun IP adresi olacaktır.server-id: MySQL replikasyonunda, her sunucunun benzersiz bir sunucu kimliğine (server ID) sahip olması gerekir. Herhangi bir sayı olabilir. Basitlik açısından, şu şekilde ayarlanmıştır:1.log_bin: Replikasyonun gerçek ayrıntılarını depolar. Replica veritabanı, günlükte (log) kayıtlı olan her şeyi kopyalayacaktır.binlog_do_db: Bu girdi, replica sunucusunda replikasyona konu olacak veritabanını belirtir. Birden fazla veritabanı olabilir. Burada örnek veritabanınewdatabase.
şeklindedir. Değişiklikleri yaptıktan sonra yapılandırma dosyasını kaydedin. MySQL'in değişiklikleri şuraya yüklemesi için yeniden başlatılması gerekir: my.cnf:
|
1 |
$ sudo service mysql restart |
-
Replica kullanıcısına izin verme
Bir sonraki adım, bir replica kullanıcısı oluşturmak ve uygun ayrıcalıkları vermektir. Bunun MySQL kabuğundan yapılması gerekir. İlk olarak, MySQL kabuğunu başlatın:
|
1 |
$ sudo mysql -u root -p |
Ardından, replica veritabanı için özel bir kullanıcı oluşturun. Kullanıcı adını ve şifreyi uygun şekilde değiştirin:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Şimdi, kullanıcıya uygun ayrıcalıkları verin:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
Blog yazımızdan MySQL kullanıcısı ve izinleri hakkında daha fazla bilgi edinebilirsiniz. Ardından, değişikliklerin geçerli olması için yetki tablosunu yeniden yükleyin:
|
1 |
$ FLUSH PRIVILEGES; |
-
Veritabanına ince ayar yapma
Replika üzerinde kaynak veritabanının bir kopyasına ihtiyacımız var. Yapıyı manuel olarak oluşturmak mümkündür. Ancak çoğu durumda bu oldukça zahmetlidir. Bu nedenle veritabanını doğrudan dışa aktarmak en optimal çözümdür. Bu örnekte kaynak veritabanı: newdatabase. Mevcut veritabanını değiştirin:
|
1 |
$ USE newdatabase; |
Aşağıdaki komut veritabanını kilitleyerek yeni değişiklikler yapılmasını önleyecektir:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Ardından, veritabanı durumunu kontrol edin:
|
1 |
$ SHOW MASTER STATUS; |
Bu konumdan itibaren replika veritabanı, kaynaktan replikasyona başlayacaktır. Bu sayılar daha sonra yararlı olacaktır, bu nedenle bunları kaydedin. Aynı pencereden herhangi bir değişiklik yapılırsa, MySQL veritabanının kilidini otomatik olarak açacaktır. Bu nedenle, aşağıdaki adımları farklı bir terminal sekmesinde veya penceresinde gerçekleştirmeniz önerilir. Veritabanı hala kilitli. Taşınabilir bir SQL dosyasına aktarın:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
İşlem tamamlandı. Sırada, veritabanının kilidini açın:
|
1 |
$ UNLOCK TABLES; |
Son olarak, kabuktan çıkın:
|
1 |
$ QUIT; |
Replika Yapılandırması
Şimdi replika veritabanını yapılandırma zamanı.
-
Kaynak veritabanını içe aktarma
Replika sunucusunda kaynak veritabanının bir kopyasına ihtiyacımız var. Bunu yapmak için daha önce dışa aktardığımız SQL dosyasını kullanacağız. MySQL kabuğunu başlatın:
|
1 |
$ sudo mysql -u root -p |
Bundan sonra, aynı veritabanı adını kullanarak boş bir veritabanı oluşturun:
|
1 |
$ CREATE DATABASE newdatabase; |
Ardından, kabuktan çıkın:
|
1 |
$ EXIT; |
Şimdi, SQL dosyasını veritabanına aktarın:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
MySQL yapılandırmasını ince ayar yapma
MySQL yapılandırma dosyasında belirtilmesi gereken birkaç şey vardır. Yapılandırma dosyasını bir metin düzenleyicide açın:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Aşağıdaki girdiler mysqld bölümünün altına gelecektir. Aksi takdirde çalışmayacaktır. İlki sunucu kimliğidir (server ID). Daha önce belirtildiği gibi, kaynak-replika replikasyon yapılandırmasındaki tüm sunucular için benzersiz olmalıdır. Gösterim amacıyla şu şekilde ayarlanmıştır: 2:
|
1 |
$ server-id = 2 |
Ardından, aşağıdaki satırları ekleyin:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Burada, yalnızca relay-log yeni bir girdidir. Replika sunucusunun replikasyon sırasında oluşturduğu günlük dosyasıdır. Günlük biçimi, ikili günlük (binary log) ile aynıdır. Yapılandırma dosyasını kaydedin ve MySQL'i yeniden başlatın:
|
1 |
$ sudo service mysql restart |
-
Replikasyonu etkinleştirme
Son olarak, MySQL içinden replikasyonu etkinleştirmeye hazırız. MySQL kabuğunu başlatın:
|
1 |
$ sudo mysql -u root -p |
Aşağıdaki komutu çalıştırın. İlk olarak, IP adresini, kullanıcı adını ve şifreleri uygun şekilde değiştirin:
|
1 |
$ CHANGE MASTER TO MASTER_HOST='31.171.240.179',MASTER_USER='cloudsigma_master', MASTER_PASSWORD='password_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
Komut şunları gerçekleştirir:
- Mevcut sunucu, kaynak sunucunun replikası olarak işaretlenir.
- Replika sunucusu uygun oturum açma kimlik bilgilerine sahiptir.
- Replika sunucusu replikasyona nereden başlayacağını bilir. Kaynak sunucuda kontrol ettiğimiz veritabanı durumunu hatırlıyor musunuz? Kaynak günlük dosyası ve günlük konumu oradan gelir.
Son olarak, replika sunucusunu etkinleştirin:
|
1 |
$ START REPLICA; |
-
Çeşitli
Replikanın mevcut durumunun ayrıntılarını kontrol etmeniz mi gerekiyor? MySQL kabuğunda aşağıdaki komutu çalıştırın. Sonundaki \G ifadesi, metinleri daha okunabilir hale getirmek için yeniden düzenlemek içindir:
|
1 |
$ SHOW REPLICA STATUS\G |
Bir bağlantı sorunu varsa, bunu atlamak için replika sunucusunu başlatmayı deneyin:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Sonuç
MySQL replikasyonunun birçok etkisi vardır. Bu, temel formunun yalnızca kısa bir gösterimidir. Ancak, birden fazla kaynak-replika yapılandırmasına kolayca genişletilebilir. Aynı adımlar, daha üst düzey karmaşık yapılandırmalar için de geçerli olacaktır. Herhangi bir yapılandırmayı sonrasında test etmek her zaman iyi bir fikirdir. Kaynak veritabanında bazı insert, delete veya update komutlarını çalıştırmayı deneyin. Kurulum çalışıyorsa, replika veritabanı her şeyi düzgün bir şekilde almalıdır.
Ayrıca, MySQL ile neler yapabileceğinizi kapsayan blogumuzdaki diğer kaynaklara da göz atabilirsiniz:
- SQLite vs MySQL vs. PostgreSQL: İlişkisel Veritabanı Yönetim Sistemlerinin Karşılaştırılması
- MariaDB veya MySQL Root Şifresi Nasıl Sıfırlanır
- Ubuntu 20.04 üzerine LEMP yığını (Linux, Nginx, MySQL PHP) Nasıl Kurulur
Keyifli çalışmalar!







Yorumlar
Henüz yorum yapılmamış. İlk siz olun.