- Konu sahibi
- #1
MySQL replication için bir sunucu source, diğer sunucu replica olarak yapılandırılır. Source üzerindeki işlemler binary log'a yazılır; replica bu kayıtları okuyup kendi relay log'una alır ve uygular. Yeni bir kurulumda dosya/konum takibi yerine GTID tabanlı replication kullanmak daha pratiktir. Aşağıdaki örnek, MySQL 8.4 kullanan, uygulama verisi bulunmayan iki yeni test sunucusu içindir. Mevcut bir source’a boş replica ekleme yöntemi değildir; o durumda tutarlı başlangıç kopyası ve GTID hazırlığı ayrıca gerekir.
Source sunucunun MySQL yapılandırmasına ekleyin:
Replica sunucunun yapılandırmasına ekleyin:
Bu değişikliklerden sonra iki MySQL servisini yeniden başlatın. Source'ta binary log açık değilse replication çalışmaz. MySQL 8.4 için ROW satır biçimi varsayılandır. İki sunucunun server_uuid değerleri de farklı olmalıdır; veri dizinini körlemesine kopyalamayın. Mevcut üretim topolojisinde GTID modunu açmak, bu yeni test kurulumundan farklı bir geçiş planı gerektirir.
192.0.2.20 temsilî replica IP adresidir; source’un gördüğü gerçek bağlantı adresiyle değiştirin. Parola yer tutucusunu benzersiz bir gizli değerle değiştirin; örnek parolayı kullanmayın. Kullanıcı bilgileri replica'nın bağlantı metadata'sında tutulduğu için replication'a özel ayrı bir hesap kullanmak daha doğru olur.
Bu örneğin ön koşulu source üzerinde TLS ve db.example.com adına uygun sunucu sertifikasıdır. Replica üzerinde güvenilen CA dosyası bulunmalıdır; örnek yolu gerçek dosyayla değiştirin. Doğrulama hatasında TLS kontrolünü kapatmak yerine sertifika adını, zincirini ve güven deposunu düzeltin.
Test için source üzerinde bir veritabanı ve kayıt oluşturun:
Ardından replica üzerinde şu sorguyu çalıştırın:
Satırın görünmesi bu test işleminin aktarıldığını gösterir; bütün verilerin tutarlılığını, failover hazırlığını veya sıfır veri kaybını garanti etmez. Kaynakta işlem yapıldığı halde replica'da görünmüyorsa önce
1. Sunucuları hazırlayın
İki MySQL sunucusunun TCP/IP üzerinden birbirine erişebildiğini ve 3306 portunun replica tarafından source'a ulaşılabilir olduğunu kontrol edin. Sunucularınserver_id değerleri farklı olmalıdır. Örnekte source adresi db.example.com, source kimliği 1, replica kimliği 2 kabul edilmiştir.Source sunucunun MySQL yapılandırmasına ekleyin:
Kod:
[mysqld]
server-id=1
log-bin=source-bin
gtid-mode=ON
enforce-gtid-consistency=ON
Replica sunucunun yapılandırmasına ekleyin:
Kod:
[mysqld]
server-id=2
relay-log=replica-relay-bin
super-read-only=ON
gtid-mode=ON
enforce-gtid-consistency=ON
Bu değişikliklerden sonra iki MySQL servisini yeniden başlatın. Source'ta binary log açık değilse replication çalışmaz. MySQL 8.4 için ROW satır biçimi varsayılandır. İki sunucunun server_uuid değerleri de farklı olmalıdır; veri dizinini körlemesine kopyalamayın. Mevcut üretim topolojisinde GTID modunu açmak, bu yeni test kurulumundan farklı bir geçiş planı gerektirir.
2. Source üzerinde replication kullanıcısı oluşturun
Bu SQL'i source üzerinde çalıştırın. Kullanıcıya yalnızca replication için gereken yetki verilir:
Kod:
CREATE USER 'repl'@'192.0.2.20'
IDENTIFIED BY 'BENZERSIZ_GIZLI_PAROLA';
GRANT REPLICATION SLAVE ON *.*
TO 'repl'@'192.0.2.20';
192.0.2.20 temsilî replica IP adresidir; source’un gördüğü gerçek bağlantı adresiyle değiştirin. Parola yer tutucusunu benzersiz bir gizli değerle değiştirin; örnek parolayı kullanmayın. Kullanıcı bilgileri replica'nın bağlantı metadata'sında tutulduğu için replication'a özel ayrı bir hesap kullanmak daha doğru olur.
3. Replica'yı source'a bağlayın
Aşağıdaki SQL'i replica üzerinde çalıştırın.SOURCE_AUTO_POSITION=1, source ve replica'nın GTID setlerini karşılaştırarak gerekli işlemleri otomatik seçmesini sağlar; bu nedenle binary log dosyası ve pozisyonu yazılmaz.
Kod:
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='db.example.com',
SOURCE_PORT=3306,
SOURCE_USER='repl',
SOURCE_PASSWORD='BENZERSIZ_GIZLI_PAROLA',
SOURCE_SSL=1,
SOURCE_SSL_CA='/guvenli-yol/ca.pem',
SOURCE_SSL_VERIFY_SERVER_CERT=1,
SOURCE_AUTO_POSITION=1;
START REPLICA;
SHOW REPLICA STATUS\G
Bu örneğin ön koşulu source üzerinde TLS ve db.example.com adına uygun sunucu sertifikasıdır. Replica üzerinde güvenilen CA dosyası bulunmalıdır; örnek yolu gerçek dosyayla değiştirin. Doğrulama hatasında TLS kontrolünü kapatmak yerine sertifika adını, zincirini ve güven deposunu düzeltin.
4. Çalıştığını doğrulayın
SHOW REPLICA STATUS\G çıktısında en az şu iki değer Yes olmalıdır:| Alan | Beklenen değer | Anlamı |
|---|---|---|
| Replica_IO_Running | Yes | Replica source'a bağlanıp binary log okuyor. |
| Replica_SQL_Running | Yes | Okunan işlemleri replica üzerinde uyguluyor. |
Kod:
CREATE DATABASE repl_test;
USE repl_test;
CREATE TABLE mesaj (
id INT PRIMARY KEY,
icerik VARCHAR(100) NOT NULL
) ENGINE=InnoDB;
INSERT INTO mesaj VALUES (1, 'replication calisiyor');
Ardından replica üzerinde şu sorguyu çalıştırın:
Kod:
SELECT * FROM repl_test.mesaj;
Satırın görünmesi bu test işleminin aktarıldığını gösterir; bütün verilerin tutarlılığını, failover hazırlığını veya sıfır veri kaybını garanti etmez. Kaynakta işlem yapıldığı halde replica'da görünmüyorsa önce
SHOW REPLICA STATUS\G içindeki Last_IO_Error ve Last_SQL_Error alanlarını inceleyin.Önemli kararlar ve yaygın hatalar
- Replica'da source ile aynı başlangıç verisini kullanın. Mevcut ve farklı verilerle başlatmak, replication sırasında duplicate key veya eksik tablo hataları oluşturabilir.
- Her sunucuda farklı
server-idkullanın. Aynı değer, source'un replica'ları ayırt edememesine yol açar. - GTID kullanırken
SOURCE_AUTO_POSITION=1ile birlikteSOURCE_LOG_FILEveSOURCE_LOG_POSvermeyin; bu iki yöntem aynı bağlantı tanımında karıştırılmamalıdır. - Replica üzerinde uygulama yazmalarını sınırlandırın. Source'ta olmayan bir satırın replica'da oluşturulması veri çakışmasına ve SQL thread'in durmasına neden olabilir.
- Replication yedekleme değildir. Source'taki yanlış silme işlemi replica'ya da taşınabilir; ayrıca bağımsız yedek ve düzenli gecikme takibi gerekir.