数据库主库故障时,业务快速切换的核心是:先摘流量、再选新主、后切连接,最后校验数据并保留回切窗口;没有演练的自动切换,不如有预案的手动切换可靠。
数据库主库故障时业务如何快速切换:先判故障域,再切流量
故障域判断:别把网络抖动当主库宕机
主库连不上,不一定就是主库死了,先分清是主库进程崩溃、主机宕机、网络分区,还是应用连接池打满,操作上可以按下面顺序查。
- 在从库执行
SHOW REPLICA STATUS\G,看Replica_IO_Running、Replica_SQL_Running、Seconds_Behind_Source。 - 在应用侧执行
mysqladmin -h 主库VIP ping,或telnet 主库IP 3306。 - 登录数据库主机看
systemctl status mysqld、/var/log/mysql/error.log、dmesg。 - 检查监控:QPS、连接数、主库心跳、VIP漂移记录、Proxy健康检查。
- 如果是云数据库,先看控制台事件和可用区状态,再决定是否手动切换。
这一步的目标只有一个:确认旧主是否还能恢复,旧主能快速恢复,就不要急着切;旧主短时间不可恢复,才进入切换流程。
切换决策:RTO和RPO怎么定
据中国信通院公开资料,容灾建设通常把RTO和RPO作为核心指标,RTO是业务能忍多久,RPO是能丢多少数据,两个指标不同,切换方案完全不同。
| 场景 | RTO目标 | RPO目标 | 常见方案 | 切换动作 |
|---|---|---|---|---|
| 同城单机房主库故障 | 分钟级 | 接近0 | 半同步复制+VIP | 提升从库,切VIP |
| 跨城容灾 | 十分钟级 | 秒级到分钟级 | 异步复制+DNS/Proxy | 切只读,人工确认 |
| 云数据库多可用区 | 秒级到分钟级 | 接近0 | 云托管高可用 | 控制台或自动切换 |
| 电商大促核心库 | 秒级到分钟级 | 尽量不丢 | 半同步+Proxy+降级 | 先保写入,再保查询 |
RTO和RPO不是技术参数,而是业务承诺。 写不进预案的指标,故障时基本做不到。
MySQL主从切换与MHA方案哪个好?先看场景再选工具
传统主从+VIP手动切换
这是最可控的路径,适合核心交易库,步骤如下。
- 确认旧主不可恢复:
mysqladmin -h old_master ping,或多次探测3306端口。 - 选新主:对比从库的GTID、
Exec_Master_Log_Pos、Relay_Master_Log_File,选数据最全、延迟最小的从库。 - 提升新主:
STOP REPLICA;RESET REPLICA ALL;SET GLOBAL read_only=OFF;SET GLOBAL super_read_only=OFF;
- 其他从库指向新主:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='new_master', SOURCE_USER='repl', SOURCE_PASSWORD='', SOURCE_AUTO_POSITION=1;START REPLICA;
- 切VIP:
ip addr add 10.0.0.10/24 dev eth0,再执行arping -c 3 -A -I eth0 10.0.0.10,用Keepalived时检查状态切换。 - 应用改连接串或刷新DNS,使用ProxySQL时,更新
mysql_servers的hostgroup_id,执行LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;。

MHA、Orchestrator、云托管怎么选
- MHA:老牌MySQL主从切换工具,依赖SSH,能自动选主,但社区活跃度下降,适合存量自建MySQL。
- Orchestrator:拓扑管理强,支持Raft和Web界面,适合多主从、多集群环境。
- ProxySQL+VIP:不是切换工具,但能减少应用改配置,适合配合手动或自动切换。
- 云数据库多可用区:控制台可切换,代理连接通常能自动漂移,但应用连接池仍要验证。
业内专家指出,切换工具的选择要服务于故障域,而不是反过来,能手动切稳的团队,上自动切换才有意义。
自动切换的风险
- 脑裂:旧主恢复后继续写,旧主恢复必须先
SET GLOBAL read_only=ON; SET GLOBAL super_read_only=ON;,再以从库身份加入。 - 数据丢失:异步复制下,新主可能少一部分事务,核心库尽量用半同步。
- 应用连接池未刷新:旧连接仍指向旧主,重启连接池,或设置
maxLifetime小于数据库wait_timeout。 - DNS缓存:TTL太长,业务迟迟切不过去,核心系统优先VIP或Proxy,不优先DNS。
同城双活数据库切换要多久?真实耗时拆解
分钟级切换的时间都花在哪
同城双活数据库切换要多久,取决于发现、决策、执行、重连、校验五段。
- 故障发现:10秒到60秒,看监控粒度。
- 人工决策:1分钟到5分钟,核心系统常保留确认环节。
- 新主提升:10秒到30秒。
- 从库重指:10秒到60秒。
- VIP/DNS切换:VIP通常秒级,DNS可能几分钟。
- 应用重连:10秒到60秒,连接池越大越慢。
-

数据校验:5分钟到30分钟,不能省。
故障发现、DNS缓存、连接池刷新,经常才是大头。 数据库提升本身反而很快。
缩短切换时间的实操
- 用VIP或ProxySQL代替纯DNS,DNS TTL设短一些。
- 开启半同步复制,降低RPO。
- 应用连接串配置多主机,
jdbc:mysql://vip:3306/db?autoReconnect=true&failOverReadOnly=false&maxReconnects=3。 - 连接池配置健康检查,例如HikariCP的
connectionTestQuery=SELECT 1、validationTimeout=3000。 - 监控每2秒探测
SELECT 1,不要只探端口。 - 每季度做一次切换演练,记录实际RTO。
- 提前准备回切脚本,避免旧主恢复后手工操作混乱。
切换后必须做的校验
- 检查新主
read_only是否关闭,其他从库是否指向新主。 - 检查GTID是否连续:
SELECT @@GLOBAL.gtid_executed; - 校验核心业务表:订单、支付、库存、账户余额。
- 检查自增ID、唯一索引、触发器、定时任务。
- 观察复制延迟,确认没有持续放大。
- 旧主恢复后先只读加入,追平后再评估回切。
北京地区数据库主库故障应急切换服务价格大概多少?
北京地区数据库主库故障应急切换服务价格大概多少,公开云市场和招标信息显示差异很大,基础演练咨询、单次应急支持、7×24核心系统驻场,通常不在同一量级,报价主要看下面几项。
- 数据库类型和节点规模:MySQL、PostgreSQL、Oracle、分布式数据库,复杂度不同。
- 是否要求现场:北京同城到场和远程支持,成本不同。
- RTO/RPO要求:秒级切换和分钟级切换,方案成本不同。
- 演练次数:一次演练和全年多次演练,人力投入不同。
- 是否包含云资源:云主机、带宽、跨可用区流量另算。
- 是否包含回切:只切过去不管回来,报价通常更低。
自建与采购的对比
| 维度 | 自建团队 | 采购应急服务 |
|---|---|---|
| 成本 | 长期人力 | 按次、按年或按项目 |
| 响应 | 看值班制度 | 看合同SLA |
| 适合 | 有DBA梯队 | 缺人、核心系统、合规要求高 |
| 风险 | 人员流动 | 服务商是否熟悉你的架构 |
选服务商的检查清单
- 是否提供切换演练,而不是只给脚本。
- 是否有回切方案和旧主恢复流程。
- 是否签SLA,明确响应时间和RTO。
- 是否覆盖监控、Proxy、VIP、连接池、数据校验。
- 是否愿意做故障注入测试。

电商大促期间数据库主库故障怎么切?
大促前:把切换开关准备好
- 只读降级:非核心查询走只读从库,允许延迟。
- 写入排队:订单、支付失败时进队列,避免直接丢单。
- 限流:对非核心接口限流,保核心链路。
- 预案:主库故障后,先切从库,再关闭报表、推荐、日志等写入。
- 演练:大促前至少做一次全链路切换演练。
大促中:先保交易还是先保查询
电商大促期间数据库主库故障怎么切,答案通常是先保支付、订单、库存扣减,再保查询,查询可以走只读从库,允许几秒延迟,非核心功能可以降级,切换动作要快,但数据校验不能省,订单和支付要对账,库存要防超卖。
大促后:回切与数据补偿
- 对账:订单、支付、库存、优惠券逐项核对。
- 补单:对失败事务做补偿,补偿要幂等。
- 修复复制:旧主恢复后以只读加入,追平GTID。
- 回切:选低峰窗口,按预案回切,回切前再校验一次。
数据库主库故障切换的胜负手在平时:监控、复制模式、切流通道、演练,把RTO和RPO写进预案并定期验证,业务才能在故障时快速稳住。
数据库主库故障切换Q&A
数据库主库故障时业务如何快速切换,自动切换一定比手动快吗?
不一定,自动切换减少人为等待,但可能误判、脑裂,核心系统常用“自动检测+人工确认”或“半自动切换”,手动切换慢在决策,快在可控,自动切换快在执行,风险在误切,选哪种,看业务能否接受误切和回滚成本。
MySQL主从切换与MHA方案哪个好,云数据库还需要自己搭吗?
云数据库多可用区通常自带高可用,控制台可切换,不必自己搭MHA,自建MySQL可考虑Orchestrator、MHA、ProxySQL+VIP,是否自搭,看合规、成本和可控性,已有DBA团队且需要深度定制,自建更合适;缺人且追求稳定,云托管更省心。
同城双活数据库切换要多久,切换后旧主恢复怎么办?
同城双活若用VIP+半同步,业务侧通常秒级到分钟级;若走DNS,可能受TTL影响,旧主恢复后先设 read_only=ON 和 super_read_only=ON,以从库身份指向新主,确认GTID追平后再评估回切,旧主未追平前,禁止直接写。