主从脑裂可通过外部仲裁(如MHA、Orchestrator、Consul)+ super_read_only强制只读 + 半同步复制(超时500–1000ms)+ 切换后立即锁死旧主来有效预防。
主从脑裂是 MySQL 集群中最危险的故障之一:主库宕机后,多个从库同时被提升为新主库,导致数据写入分裂、不一致甚至丢失。避免脑裂不是靠“多选几个从库”,而是靠明确的仲裁机制 + 严格的故障切换流程 + 持续的状态监控。
MySQL 自身不提供跨节点的强一致性选举能力。依赖单个监控节点(比如脚本+VIP)极易因网络分区误判,引发双主。必须引入具备法定票数(quorum)和心跳超时检测的第三方仲裁服务:
即使发生误提升,只要从库处于严格只读状态,就能阻断非法写入。不能只设 read_only=ON,必须开启 super_read_only=ON(MySQL 5.7.8+),否则拥有 SUPER 权限的用户仍可写入:
read_only=ON 和 super_read_only=ON
super_read_only;切回前务必重新打开SELECT @@read_only, @@super_read_only;,纳入巡检脚本半同步不是为了提速,而是为故障切换争取“数据安全窗口”。当主库提交事务时,至少一个从库确认接收并落盘,才能返回成功。关键在于超时值设置:
脑裂常发生在旧主短暂恢复后继续接受写入。必须在切换完成瞬间执行“断联+锁死”操作:
SET GLOBAL super_read_only = ON; SET GLOBAL read_only = ON;
og 位置,后续用于比对新主数据是否完整覆盖不复杂但容易忽略:脑裂预防的核心不在技术堆砌,而在每次故障演练中验证仲裁是否真能拒绝“孤岛节点”的投票请求,以及切换后是否有人真正去检查旧主状态。