지연 replica로 잘못된 DROP / DELETE 복구(SOURCE_DELAY + UNTIL)
MySQL복제명령어
-- Setup: the replica applies events one hour behind
STOP REPLICA;
CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 3600;
START REPLICA;
-- During the incident: stop the applier (the receiver keeps fetching binlogs)
STOP REPLICA SQL_THREAD;
-- Find the bad transaction's GTID in the source binlog, apply up to just before it
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;하는 일
replica가 이벤트를 고정된 시간만큼 늦게 적용하게 한다. 잘못된 DROP / DELETE가 source에 발생하면 replica를 해당 트랜잭션 직전까지 진행시켜 손실된 데이터를 복구한다.
사용 시점
백업 복원에 몇 시간이 걸리는 대형 데이터베이스에서 인적 오류에 대비한 빠른 복구 계층으로.
주의
coordinator가 OFF이면 데이터는 잘못된 작업 직전 상태다. 영향받은 테이블을 mysqldump로 덤프하여 source에 로드한다. 이후 replica를 다시 지연 모드로 되돌린다. 잘못된 트랜잭션까지 적용하면 여기서도 데이터가 사라진다. 지연 replica는 페일오버 후보가 되어서는 안 된다(Orchestrator / Router / ProxySQL에서 제외). 지연 기간 내내 relay log가 쌓이므로 디스크 크기를 그에 맞게 산정한다.