场景目标
建立可审阅的单写拓扑、复制与代理监控,验证备份恢复记录;在受控窗口完成一次计划切换,记录冻结写入、GTID 追平、旧主隔离、新主放行与应用恢复时间;根据业务抽样和事务证据报告实际 RPO/RTO,并使旧主以经过校验的副本身份恢复冗余。
数据库与存储 · 高级
围绕 GTID 复制、旧主隔离、代理入口和受控切换,建立有一致性检查与恢复边界的 MySQL 高可用流程。
建立可审阅的单写拓扑、复制与代理监控,验证备份恢复记录;在受控窗口完成一次计划切换,记录冻结写入、GTID 追平、旧主隔离、新主放行与应用恢复时间;根据业务抽样和事务证据报告实际 RPO/RTO,并使旧主以经过校验的副本身份恢复冗余。
以 MySQL 8.4 GTID 语法为示例,其他版本需核对命令、复制兼容性和权限;确认 ProxySQL、Keepalived 版本及配置方式。至少两个容量合格的数据库节点、两个代理节点,并具备阻断旧主所有应用写入路径的隔离能力;VIP 方案须由网络环境支持,云网络限制需提前验证。准备数据库检查与复制账号、代理管理权限、可信凭据注入方式、足够的 binlog 保留空间,以及已在隔离环境恢复过的备份记录。维护窗口需能冻结写入并安排 DBA、应用和网络负责人协同。预计 360 分钟覆盖首批配置与计划演练,不含硬件采购、全量数据复制、备份重建和长周期负载观察。
用 GTID 复制维持候选副本,ProxySQL 处理应用路由,Keepalived 只负责代理入口冗余;数据权威、旧主隔离与提升由独立受控流程确认。
点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。
业务连接使用已登记入口,核对事务、读后写一致性和连接重建;任何直连例外都必须纳入写入隔离清单。
应用向受控入口发送数据库请求,仍需处理失败连接和提交结果未知的事务。
VIP 由可用代理节点承载;该连线不意味着 Keepalived 处理 SQL 或提升数据库。
写请求仅转到已确认权威主库,读路由按应用一致性要求单独评估。
箭头表示事务复制的数据方向;异步复制可能存在尚未送达或未回放的事务。
提升前由唯一责任流程确认旧主所有写入口失效,隔离不明则停在停写或只读状态。
切换时针对图示原主节点执行隔离;它恢复后不能绕过新主权威重新承接写入。
只有数据与隔离条件满足后才提升候选;计划追平切换与旧主失联故障切换必须采用不同证据。
新主权威确认后更新并持久化路由,再逐批允许应用重连,不让 VIP 漂移代替数据库切换。
通过经确认的 exporter 采集复制、容量与角色状态,采集失败不代表数据库已经切换。
ProxySQL 和 Keepalived 不负责确认权威事务或可靠隔离旧主。未验证外部编排与 fencing 时,不应宣称自动高可用完成。
失联主库可能有未知已提交事务;GTID 与业务核对用于衡量缺口,不能将计划切换的追平结果套用到突发故障。
写入权威一旦推进,应保存新主数据与时间线,再处理旧主分叉。回到原机器必须作为新的受控切换,不覆盖新主已提交数据。
图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。
适用于 MySQL 单写主库与至少一个副本、使用 GTID 复制的受管环境。ProxySQL 管理应用连接与后端路由,Keepalived 为代理层提供可漂移入口,Prometheus 观测复制和代理状态。数据库提升由明确的人工流程或已验证的外部编排负责。
本方案不是 Group Replication 或 InnoDB Cluster 的安装手册。ProxySQL 与 Keepalived 不负责判定数据权威、完成 MySQL 提升或保证数据库仲裁;仅漂移 VIP 不能阻止旧主接受直连写入。异步复制存在尚未复制事务丢失的可能,RPO 与 RTO 必须通过实际演练测量。
只允许一个经确认的写入源,应用通过受控入口重连;保存切换前后的 GTID、关键业务校验、代理运行配置及时间线。新主接收写入后保持其权威,旧主先隔离再按新主重建或追平为副本,恢复冗余后另行规划后续切换。
标记当前权威主库、候选副本、应用直连入口和复制方向,确认没有遗漏的写入客户端。核对各节点版本、唯一标识、GTID 模式、只读状态、磁盘余量及备份恢复记录,凭据通过受控客户端配置提供。以下 SQL 只读取实例状态,需分别连接已核对身份的节点执行,结果连同实例地址、时间和业务校验基线归档。
SELECT VERSION(), @@server_uuid, @@gtid_mode;
SELECT @@read_only, @@super_read_only, @@GLOBAL.gtid_executed;节点角色、UUID 与资产清单一致,仅已确认主库对应用可写;候选副本具备容量与复制条件,恢复记录包含实际还原和业务抽样。未知写入口、版本差异和数据异常均已查明。
此阶段不改变复制与角色。若发现双写、备份未验证或候选数据来源不清,停止高可用变更并先冻结相关变更计划;保留实例证据,由 DBA 确认权威数据后再继续。
确定执行提升的唯一责任方,明确计划切换与突发故障的不同路径:计划切换可先停写等待追平,旧主失联时则必须先证实隔离并评估未知事务。列出应用、网络与数据库层所有写入口及隔离验证方式,约定最大等待、可接受数据缺口和升级联系人。准备每阶段检查表,尤其区分新主尚未接写和已经接写,避免使用同一套回退动作。
检查表写明谁能提升、谁确认隔离、谁放行应用,且所有直连路径都有验证方法;未达到数据与隔离条件时明确停在只读或停写状态。业务负责人理解实际复制模式的 RPO 边界。
若隔离手段无法证明旧主不可接写,撤回自动切换计划并维持当前受控拓扑。此步骤不做角色修改;未明确恢复边界前不执行故障注入,不把代理健康检查当作隔离证据。
在候选副本检查接收、回放线程及错误,结合 GTID 差集、工作线程积压、磁盘和网络确认复制质量,不把延迟为零视为数据一致性的充分证据。核对复制过滤、延迟副本及历史手工写入是否影响候选资格,并在负载可控时做关键业务抽样。下列只读命令在副本执行;若使用多通道复制,应按本环境明确目标通道,不能混用状态。
SHOW REPLICA STATUS;
SELECT @@GLOBAL.gtid_executed;接收与回放线程健康且没有未解释错误,候选 GTID 与业务抽样结论可复核;复制过滤和延迟配置符合切换要求。以多个采样点确认复制没有持续积压,并保留主副本同时段证据。
发现复制异常则取消该候选资格,停止切换准备并保留错误和 GTID 记录。不得通过跳过事务、清空复制元数据或注入空事务来制造通过结果;先修复或重建副本再重新验收。
在 ProxySQL 配置受控后端、读写主机组、监控账号与连接规则,先用测试应用核对事务、读后写一致性和重连行为,不假定任意 SELECT 都适合副本。区分配置层、运行层与磁盘持久层,按变更流程同步并复核。Keepalived 仅为代理入口提供冗余,健康检查需覆盖代理可用性;单独演练代理故障,数据库角色应保持不变,网络不支持 VIP 时先解决入口方案。
测试写请求只进入权威主库,事务和一致性要求按应用规则满足;代理重启后配置仍正确。代理入口切换可观察且不触发数据库提升,所有应用端点和直连例外均与登记清单一致。
代理异常时恢复已保存的路由及运行配置,仅在数据库权威未变化的前提下恢复原应用入口。若数据库已切换,任何备用入口也必须指向已确认的新主,禁止通过旧地址重新打开旧主写入。
接入经确认兼容的数据库与代理指标端点,观测复制线程、事务积压、连接数、锁等待、磁盘水位及代理后端状态,采集账号遵循实际所需权限。把采集失联与数据库故障区分开,告警中附上实例身份、当前角色和检查入口。检查 binlog 保留是否覆盖预期故障恢复时间,用已登记测试信号确认告警到达,并准备记录切换各阶段时间的统一时钟。
主副本与代理关键指标连续更新,角色和数据来源可辨认;采集失联不会被误报为已完成主库切换。测试告警到达指定责任组,恢复入口及实例标识有效,容量阈值有明确处置动作。
采集影响实例时先停用相关采集目标,恢复旧监控配置与账号权限;不得为了消除告警修改数据库角色。监控证据不完整时暂停切换演练,待时间线和关键状态可观察后再继续。
在批准窗口冻结应用写入并排空相关事务,确认旧主不再产生业务写入后记录终点 GTID,等待候选应用全部目标事务并完成校验。验证旧主的写入隔离,再由唯一编排责任方提升候选、调整代理路由,最后逐批开放应用连接。每完成一阶段记录证据与时间;若模拟旧主失联,必须另行确认隔离及未知事务的处置结论,不能套用已追平的计划切换结论。
保存停写终点、候选追平证据及旧主隔离结果,放行后只有新主承接测试与业务写入。应用重连、事务结果和关键业务计数通过约定校验,实际中断时间及可能的数据缺口如实记录。
新主尚未接写且双方状态已核实一致时,可按检查表撤销候选提升并恢复原主。新主已接写后不得切回旧主或覆盖旧备份;保持旧主隔离,暂停新增写入并以新主为权威排查。
切换后先保存新主 GTID、业务校验和备份状态,再处理旧主;旧主保持隔离与只读,检查是否存在分叉事务,按新主的数据源追平或使用已验证的新备份重建为副本。确认复制恢复后再登记其候选资格,不自动抢回原角色。交接当前权威、剩余风险、实际恢复时间、代理配置和恢复步骤,另行安排完整负载观察及下一次演练。
旧主只能作为已校验副本接入,没有未解释的分叉事务;当前写入口全部指向新主,冗余和备份链路恢复。验收记录区分本次实测结果与后续观察,值班人员能够复述角色和停止条件。
旧主重建或追平失败时继续隔离该节点,保留新主服务并按容量风险决定是否限流。不得为恢复原拓扑覆盖新主已提交数据;需要再次切换时重新执行停写、追平、隔离与放行流程。