MySQL从库备份引发CPU 100%:级联故障排查与修复最佳实践

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
PolarDB Agent Flow,2核4GB
RDS Agent(兼容OpenClaw),2核4GB
简介: 本文以凌晨CPU 100%故障为切入点,真实复盘一次由从库物理备份触发`FLUSH TABLES WITH READ LOCK`锁表引发的级联故障:查询阻塞→连接池耗尽→Full GC风暴→服务雪崩。详解根因、排查路径(jstat/GC分析→锁诊断→线程追踪)及改进方案(XtraBackup热备、超时降级、分层告警等),强调备份策略必须评估业务影响。(239字)

📌今日关键词:CPU 100%、从库备份、锁表、Full GC、级联故障、线程池、故障复盘、DBA

大家好,我是数据库小学妹 👋

凌晨3点手机震醒的时候,我整个人是懵的。

CPU 100%告警。我之前猜过慢SQL、连接风暴、甚至以为是攻击。

直到亲身经历了一次。根因居然是从库的一个备份任务。

今天完整复盘一下。

故障时间线

凌晨3点15分。收到CPU 100%告警。

打开监控一看,Java应用CPU打满了。JVM堆内存Old区也快顶到头。Full GC每几秒就触发一次。

我当时第一反应是:是不是有慢SQL?连上去看了眼数据库:

SHOW PROCESSLIST;

结果吓了一跳。大量查询的状态全是 Waiting for table lock。连接池被占满了。

再查锁的情况:

SHOW ENGINE INNODB STATUS;

看到了一个熟悉的关键词:FLUSH TABLES WITH READ LOCK

从库正在跑物理备份。这个命令会锁全库。所有读查询全被挡住了,一个接一个排队。

根因:从库备份锁表

问题出在备份策略。从库物理备份时执行了这个命令:

FLUSH TABLES WITH READ LOCK;

备份工具靠它来拿到数据文件的一致性快照。但代价是锁释放之前,所有查询全部阻塞。

主库正常写入,从库应用日志也正常。但应用侧的从库读请求全部超时堆积了。

完整故障链

这个故障是典型的级联故障。我后来画了张图才彻底搞明白。

一切从备份锁表开始。FLUSH TABLES WITH READ LOCK 拿到全局读锁后,所有从库读查询被阻塞。查询进来了但跑不了,就在连接池里排队等着。

问题来了。每个排队的查询,对应的JDBC连接和ResultSet对象都还占着内存。查询越来越多,线程池里的活跃连接一路飙升。堆内存迅速上涨,Old区很快被打满。

到这一步其实还有救。但JVM发现Old区满了,开始疯狂触发Full GC。问题是这些被阻塞的线程对象根本回收不掉——它们还在"活着",在等锁。GC跑了一遍又一遍,什么都回收不了。

我后来用jstat确认了这一点:

jstat -gcutil <pid> 1000

Full GC次数在飞涨,每次回收后Old区占用几乎没降。当时那堆数字我看不太懂,后来才知道这叫"GC风暴"——GC线程和业务线程抢CPU,但业务线程都在等锁,CPU基本全被GC吃掉了。

最终结果:Java应用线程池耗尽,CPU 100%,服务完全不可用。

从一个备份锁表到整个服务崩掉,一环扣一环,每一步都不致命,但叠加起来就要命。

快速止血

找到从库正在执行备份后,手都在抖。先止血再说。

第一步,kill掉从库的备份进程,释放全局读锁:

# 找到备份进程
ps aux | grep xtrabackup
# kill掉
kill -9 <pid>

第二步,重启Java应用,等线程池释放,GC恢复。

从发现问题到恢复服务,花了将近20分钟。说实话,当时脑子一片空白,走了不少弯路。如果监控更完善,应该能更快定位。

后来我怎么改的

止血之后,更得解决根因。不然下次还会踩。

当时真的很后悔没早点换备份方案。FLUSH TABLES WITH READ LOCK 是老方案了,锁全库这个特性,平时不觉得有问题,一出事就是大事。后来换成了 XtraBackup,备份期间不锁表,从根上断了这个隐患:

# XtraBackup 热备份,不需要全局锁
xtrabackup --backup --target-dir=/data/backup/

然后加了备份监控。备份开始和结束都记录时间。超过预期时长立刻告警,不能等出了事才查。

连接超时也调了。从30秒降到10秒。之前设太长了,请求排队30秒才超时,积压量翻了好几倍。

最后是告警分层。之前只盯CPU和数据库延迟,线程池和内存都没监控。这次加上了:线程池使用率80%就告警,别等到100%才反应。

我的教训

回头看,这次故障其实挺冤的。

备份策略居然没评估过锁表影响。备份方案选型的时候只看了"能不能备份成功",没想过备份期间对业务有什么影响。这是最关键的失误。

监控也缺了一大块。平时只盯CPU和数据库延迟,线程池和内存根本没管。这次jstat的Full GC数据是排查的关键线索,但平时根本没看过这个指标。连接超时也设太长了,排队30秒才超时,积压起来根本刹不住。

还有从库读请求缺少降级机制。数据库一挂,应用也跟着挂。如果应用侧有熔断,至少写入不会受影响。

排查的突破口是jstat的Full GC数据异常。顺着GC找到线程积压,再顺着线程找到锁表。和上篇讲的思路一样,先看现象,再一层层追。

避坑清单

  1. 备份方案选型时,先搞清楚备份期间数据库还能不能正常服务。不是"能备份"就行
  2. 生产环境首选 XtraBackup 这类热备份工具,备份期间不锁表
  3. 连接超时设太久,故障时请求会疯狂排队。积压比故障本身更致命
  4. 线程池使用率 80% 就该告警,等到 100% 服务已经挂了
  5. 数据库超时要有熔断,不能一个故障拖垮整套服务
  6. jstat 的 GC 数据别忽略,异常时能帮你快速缩小排查范围
  7. 备份任务要监控时长,超时说明有问题,不能等出了事才查
  8. 告警要分层。CPU、线程池、内存、IO 都要覆盖,只盯 CPU 会漏信号
  9. 凌晨 3 点先止血拉服务,根因白天再慢慢查。恢复永远优先排障
  10. 不复盘的故障迟早会重演

这次给我最深的教训是:备份方案不能只看"能不能备份成功"。备份期间对业务的影响,才是真正的评估重点。

级联故障的触发条件往往很普通。一个备份任务,一个锁表操作,每个环节单独看都没什么大不了。但叠在一起,系统就扛不住了。

上篇讲了排查工具和方法。这篇讲了真实故障场景。两篇结合起来,下次遇到CPU 100%就不慌了。

我是数据库小学妹,咱们下篇见 👋

相关文章
|
5天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
6天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
679 5
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
6天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
8693 37
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
6天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
681 5
|
6天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
6天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
738 149
|
6天前
|
人工智能 运维 自然语言处理
阿里云百炼Qwen3.7-Max模型详解:综合能力、核心优势与订阅计划参考指南
2026年,大模型技术持续向通用化、高性能、场景化方向迭代,阿里云百炼作为一站式大模型服务平台,持续推出迭代升级的模型产品,Qwen3.7-Max便是当前主力旗舰级大模型之一。该模型依托深度优化的底层架构与大规模训练数据,在文本理解、逻辑推理、多模态交互、代码生成、长文本处理等多个维度实现能力升级,同时搭配灵活的订阅计划体系,能够适配个人开发者、中小企业、大型企业、政企机构等不同类型用户的使用需求。
576 2
|
6天前
|
JSON 缓存 安全
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
CC Switch 通过本地路由(`127.0.0.1:15721`)实现协议转换:将 Codex 的 Responses API 请求自动映射为 DeepSeek 等厂商的 Chat Completions 接口,兼容流式响应与工具调用,无需修改 Codex 源码,安全隔离 API Key。(239字)
1716 3
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
|
6天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
1965 10
|
6天前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
789 1