ADMIN ACTIVATE STANDBY
ADMIN ACTIVATE STANDBY 用于在计划外切换(Failover)场景下将 standby 集群激活为 primary。不指定模式时,系统会根据当前复制状态和已接收日志的安全性自动选择 FLASHBACK(回退到一致性快照点)或 FORCE_COMMIT(强制提交已接收数据)。你也可以显式指定 FLASHBACK、FORCE_COMMIT,或使用 FORCE 强制以 FLASHBACK 方式激活。
该语句必须在当前 standby 集群上执行。
警告:
在执行
ACTIVATE STANDBY前,必须确认原primary已彻底停机或网络隔离,否则可能导致“脑裂”现象,造成不可逆的数据冲突和不一致。
所需权限
执行该语句需要 SUPER 权限。
语法图
ADMIN ACTIVATE STANDBY;
ADMIN ACTIVATE STANDBY MODE = FLASHBACK | FORCE_COMMIT;
ADMIN ACTIVATE STANDBY FORCE;参数说明
| 参数 | 说明 |
|---|---|
| 不指定模式 | 默认模式。异步复制时使用 FLASHBACK,同步复制时使用 FORCE_COMMIT。 |
FLASHBACK | 将 standby 的数据回退到一个一致性快照点后激活为 primary。适用于异步复制场景,或同步复制场景但无法确认原 primary 状态 |
FORCE_COMMIT | 强制提交 standby 已接收的所有数据后激活为 primary。仅限同步复制场景,可确保 RPO = 0 |
FORCE | 跳过对原 primary 可访问性和复制关系是否已删除的检查,并强制以 FLASHBACK 方式激活。FORCE 不能与 MODE = FORCE_COMMIT 组合使用。 |
使用 FORCE_COMMIT 前必须满足以下条件:
- 当前实际复制模式为
SYNC,可通过INFORMATION_SCHEMA.LR_STATUS_GLOBAL.REPLICATION_MODE检查。处于MAXIMUM_AVAILABILITY保护模式但实际复制模式为ASYNC时,不满足此条件。 - 原
primary尚未执行ADMIN DROP LOG REPLICATION - 已确认原
primary已彻底停机或网络隔离
若已在原 primary 上执行过 ADMIN DROP LOG REPLICATION,只能使用 FLASHBACK 方式(显式指定 MODE = FLASHBACK 或使用 FORCE)。
使用默认模式时,无需指定 MODE。如果同步复制期间存在无法安全提交的已接收日志,系统会自动改用 FLASHBACK,而不会以 FORCE_COMMIT 方式激活。
使用 FORCE 会跳过部分故障检查,仅建议在确认需要强制激活时使用。执行前仍应确认原 primary 已彻底停机或网络隔离。
示例
使用默认模式激活:
ADMIN ACTIVATE STANDBY;使用 FLASHBACK 模式激活:
ADMIN ACTIVATE STANDBY MODE = FLASHBACK;使用 FORCE_COMMIT 模式激活:
ADMIN ACTIVATE STANDBY MODE = FORCE_COMMIT;强制以 FLASHBACK 方式激活:
ADMIN ACTIVATE STANDBY FORCE;MySQL 兼容性
ADMIN ACTIVATE STANDBY 语句是 TiDB 对 MySQL 语法的扩展。