Gecikmeli replika ile hatalı DROP / DELETE'ten kurtar (SOURCE_DELAY + UNTIL)
MySQLReplikasyonKomut
-- Kurulum: replika olaylari 1 saat geriden uygular
STOP REPLICA;
CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 3600;
START REPLICA;
-- Olay aninda: applier'i durdur (receiver binlog almaya devam eder)
STOP REPLICA SQL_THREAD;
-- Hatali transaction'in GTID'sini kaynagin binlog'unda bul, hemen oncesine kadar uygula
CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 0;
START REPLICA SQL_THREAD UNTIL SQL_BEFORE_GTIDS = 'af6bc361-c353-11f1-8f12-f69e63ad6c0e:17';
SELECT SERVICE_STATE FROM performance_schema.replication_applier_status_by_coordinator;Ne yapar?
Replikanın olayları belirli bir süre geriden uygulamasını sağlar; hatalı bir DROP / DELETE kaynağa düştüğünde replikayı tam o transaction'dan önceye kadar ilerletip silinen veriyi buradan geri almayı mümkün kılar.
Ne zaman kullanılır?
Yedekten geri dönüşün saatler süreceği büyük veritabanlarında insan hatasına karşı hızlı kurtarma katmanı olarak.
Dikkat
Coordinator OFF olduğunda veri hatalı işlemden hemen önceki haldedir; ilgili tabloyu mysqldump ile al ve kaynağa yükle. İş bitince replikayı yeniden gecikmeli moda al; hatalı transaction'ı da uygularsa veri bu replikada da kaybolur. Gecikmeli replika failover adayı olmamalı (Orchestrator / Router / ProxySQL'de hariç tut). Gecikme süresince relay log birikir; disk alanını buna göre ayır.