DBAtlas · Атлас эксплуатации баз данных

Повысить реплику / выполнить отработку отказа (promote)

Oracle

-- Data Guard broker (DGMGRL):
SWITCHOVER TO 'standby_db';     -- planned, no data loss
-- FAILOVER TO 'standby_db';     -- on loss of the primary, emergency

SWITCHOVER — плановая смена ролей; FAILOVER выполняется, когда primary недоступен, и несёт риск потери данных.

PostgreSQL

-- Promote the standby to primary:
SELECT pg_promote();
-- or from the shell: pg_ctl promote -D /var/lib/pgsql/data

Перед повышением убедитесь, что старый primary действительно остановлен (риск split-brain). После повышения для возврата старого primary как реплики нового primary нужен pg_rewind; для этого должны быть включены wal_log_hints = on или контрольные суммы данных.

MySQL

-- On the replica (manual):
-- 1) Stop receiving new events, wait until the received relay log is fully applied:
STOP REPLICA IO_THREAD;
SELECT RECEIVED_TRANSACTION_SET FROM performance_schema.replication_connection_status;
SELECT @@GLOBAL.gtid_executed;  -- the received set must be fully contained here
-- 2) Remove replication and enable writes:
STOP REPLICA;
RESET REPLICA ALL;
SET GLOBAL read_only = OFF;  -- also turns off super_read_only
-- 3) Fence the old source against writes, then redirect the application.

Если RESET REPLICA ALL выполнить до полного применения relay log, полученные, но не применённые транзакции теряются. Реплики обычно работают с включёнными read_only/super_read_only; запись не принимается, пока они не отключены. Если старый источник всё ещё доступен для записи, есть риск split-brain. Синтаксис — 8.0.22+ (до этого STOP SLAVE / RESET SLAVE ALL; старая форма удалена в 8.4). Для автоматической и безопасной отработки отказа в продакшене предпочтительны InnoDB Cluster/Group Replication, Orchestrator или MHA.

SQL Server

-- On the target secondary replica (synchronous):
ALTER AVAILABILITY GROUP [AG_Name] FAILOVER;
-- Force it, with risk of data loss:
-- ALTER AVAILABILITY GROUP [AG_Name] FORCE_FAILOVER_ALLOW_DATA_LOSS;

Плановая отработка отказа на синхронную реплику проходит без потери данных; FORCE используется только при аварии.

MongoDB

// Trigger an election on the current primary:
rs.stepDown(60)   // step down from primary for 60 s

stepDown запускает новые выборы; чтобы предпочесть конкретный узел, настройте значения priority членов.

Redis

# Make the replica an independent primary:
REPLICAOF NO ONE
# With Sentinel (recommended): SENTINEL FAILOVER <master-name>

Если используется Sentinel/Cluster, вместо ручного REPLICAOF используйте SENTINEL FAILOVER; иначе есть риск split-brain.

Открыть в DBAtlas →