Kubedo Academy’e hoş geldiniz! Bu laboratuvarda MySQL replikasyon, GTID ve yüksek erişilebilirlik konularını öğreneceksiniz.
Zorluk seviyesi: İleri
Süre: Yaklaşık 60 dakika
1. Replikasyon Nedir?
Replikasyon, verilerin bir MySQL sunucusundan (master/source) diğerlerine (slave/replica) kopyalanması işlemidir.
Neden Replikasyon?
| Amaç | Açıklama |
|---|---|
| Yedeklilik | Master arızasında slave devralır |
| Okuma Ölçekleme | Read query’leri slave’lere dağıtma |
| Yedekleme | Slave’den backup alarak master’ı etkilememe |
| Analitik | Raporlama için ayrı sunucu |
| Coğrafi Dağıtım | Kullanıcılara yakın sunucular |
Replikasyon Türleri
| Tür | Açıklama |
|---|---|
| Asenkron | Master beklemez (varsayılan) |
| Yarı-senkron | En az bir slave onaylar |
| Senkron | Tüm slave’ler onaylar (Group Replication) |
2. Replikasyon Mimarisi
Master-Slave (Source-Replica)
[Master]
|
├── [Slave 1] (read replica)
├── [Slave 2] (backup)
└── [Slave 3] (analytics)
Master-Master
[Master 1] ←→ [Master 2]
[!CAUTION] Master-Master yapılandırması conflict riski taşır. Aynı veriyi aynı anda güncellemeyin!
Chain Replication
[Master] → [Slave 1] → [Slave 2]
3. Binary Log Formatları
Format Türleri
| Format | Açıklama | Avantaj/Dezavantaj |
|---|---|---|
| STATEMENT | SQL ifadelerini loglar | Küçük log, non-deterministic sorun |
| ROW | Satır değişikliklerini loglar | Büyük log, güvenilir |
| MIXED | Otomatik seçim | Dengeli |
Yapılandırma
[mysqld]
binlog_format = ROW
[!TIP] Production ortamda ROW format önerilir. STATEMENT ile non-deterministic fonksiyonlar (NOW(), RAND()) sorun çıkarabilir.
4. Geleneksel Replikasyon Kurulumu
Master Yapılandırması
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW
binlog_do_db = kubedo
Replikasyon Kullanıcısı Oluşturma (Master)
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplicaPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
Master Durumunu Alma
$ SHOW MASTER STATUS;Çıktı:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 154 | kubedo | |
+------------------+----------+--------------+------------------+
Slave Yapılandırması
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 2
relay_log = /var/log/mysql/relay-bin
read_only = ON
Slave’i Master’a Bağlama
CHANGE MASTER TO
MASTER_HOST = '192.168.1.10',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'ReplicaPass123!',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_LOG_POS = 154;
Replikasyonu Başlatma
$ START SLAVE;
SHOW SLAVE STATUS\G5. GTID Replikasyon
GTID (Global Transaction Identifier), her transaction’a benzersiz bir ID atar.
GTID Avantajları
- Log file ve position takibine gerek yok
- Failover daha kolay
- Otomatik pozisyon bulma
GTID Formatı
server_uuid:transaction_id
Örnek: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
GTID Yapılandırması (Master ve Slave)
[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON
GTID ile Slave Kurulumu
CHANGE MASTER TO
MASTER_HOST = '192.168.1.10',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'ReplicaPass123!',
MASTER_AUTO_POSITION = 1;
START SLAVE;
GTID Durumu
$ SHOW MASTER STATUS;
SHOW SLAVE STATUS\G
SELECT @@GLOBAL.GTID_EXECUTED;6. Replikasyon İzleme
Slave Durumu Kontrolü
SHOW SLAVE STATUS\G
Önemli alanlar:
| Alan | Değer | Açıklama |
|---|---|---|
Slave_IO_Running | Yes | IO thread durumu |
Slave_SQL_Running | Yes | SQL thread durumu |
Seconds_Behind_Master | 0 | Gecikme (lag) |
Last_Error | - | Son hata mesajı |
Replikasyon Lag İzleme
-- Slave'de
SHOW SLAVE STATUS\G
-- Seconds_Behind_Master değerini kontrol et
Performans Schema ile İzleme
SELECT * FROM performance_schema.replication_connection_status;
SELECT * FROM performance_schema.replication_applier_status;
7. Replikasyon Sorun Giderme
Yaygın Sorunlar
| Sorun | Belirti | Çözüm |
|---|---|---|
| Duplicate key | SQL thread durur | SKIP veya veri düzeltme |
| Missing table | SQL thread durur | Tabloyu yeniden oluştur |
| Network | IO thread durur | Bağlantıyı kontrol et |
| Lag | Seconds_Behind_Master yüksek | Slave kapasitesini artır |
Hata Atlama
-- Tek transaction atla
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
-- GTID ile atla
SET GTID_NEXT = '3E11FA47-71CA-11E1-9E33-C80AA9429562:23';
BEGIN; COMMIT;
SET GTID_NEXT = AUTOMATIC;
START SLAVE;
Replikasyonu Sıfırlama
STOP SLAVE;
RESET SLAVE ALL;
-- Yeniden yapılandır
CHANGE MASTER TO ...;
START SLAVE;
8. Yüksek Erişilebilirlik
Failover Stratejileri
| Strateji | Açıklama |
|---|---|
| Manuel | DBA müdahalesi |
| Otomatik | Orchestrator, MHA, ProxySQL |
| Group Replication | MySQL native çözüm |
MySQL Group Replication
[Primary] ←→ [Secondary 1] ←→ [Secondary 2]
↑______________↓_______________↓
(consensus)
InnoDB Cluster
MySQL InnoDB Cluster bileşenleri:
- Group Replication: Veri replikasyonu
- MySQL Router: Uygulama yönlendirme
- MySQL Shell: Yönetim aracı
ProxySQL ile Yük Dağıtımı
[Application]
|
[ProxySQL]
/ | \
[M] [S1] [S2]
ProxySQL özellikleri:
- Read/Write splitting
- Query routing
- Connection pooling
- Query caching
9. Backup ve Replikasyon
Slave’den Backup Alma
# Slave SQL thread'i durdur
mysql -e "STOP SLAVE SQL_THREAD"
# Backup al
mysqldump -u root -p --single-transaction kubedo > backup.sql
# Slave'i devam ettir
mysql -e "START SLAVE SQL_THREAD"
[!TIP] Production master’dan değil, slave’den backup almak master performansını etkilemez.
10. Best Practices
Genel Öneriler
- GTID kullanın - Failover’ı kolaylaştırır
- ROW format - Güvenilir replikasyon
- read_only - Slave’lerde yazma engelleme
- Monitoring - Lag ve hataları izleyin
- Semi-sync - Kritik veriler için
Güvenlik
-- Slave'de
SET GLOBAL super_read_only = ON;
-- Master'da replikasyon kullanıcısı için IP kısıtlaması
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY '...';
Konu Tekrarı - Kısa Sınav
Sonraki Adımlar
Bu eğitimle MySQL replikasyon temellerini öğrendiniz. İleri konular için:
- MySQL InnoDB Cluster: Tam entegre HA çözümü
- Percona XtraDB Cluster: Galera tabanlı çoklu master
- ProxySQL: Query routing ve load balancing
- Orchestrator: Otomatik failover yönetimi