适用场景

数据库高可用的目标是"故障时业务能继续",而不是"永远不宕机"。关键是切换要快、数据要一致、切换后要有人知道。

配置步骤(MySQL 主从与半同步)

-- 主库
CHANGE MASTER TO MASTER_HOST='10.0.10.21', MASTER_USER='repl', MASTER_PASSWORD='口令', MASTER_AUTO_POSITION=1;
-- 半同步插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
-- 从库状态
SHOW SLAVE STATUS\G

关键参数与建议

  • 复制模式选择:同步/半同步(强一致,性能略降)vs 异步(性能好,可能丢数据)
  • 切换要自动化但可人工干预,切换后必须校验数据完整性
  • 读写分离要把"强一致性读"走主库(如支付后立即查询)
  • 延迟监控与告警必须有,延迟大时自动摘除从库
  • 定期做切换演练与备份恢复演练,两件事不能省

容易踩的坑

  • 复制账号权限过大或使用 root
  • 未开 GTID,切换时找位点容易出错
  • 从库只读未开(read_only),误写造成数据不一致

验证与巡检

SHOW SLAVE STATUS\G | grep -i -E 'Running|Behind'
  • 巡检:IO/SQL 线程 Yes、延迟 <1 秒、从库只读开启

小结

数据库高可用的验收标准:模拟主库故障,业务在约定时间内恢复,且数据一致性校验通过。做不到就还在"纸面高可用"。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。