在大型高并发系统中,MySQL 常见的生产事故主要集中在以下几个方面:
1.数据库连接数耗尽
现象:
-
服务端大量 Too many connections 错误。
-
应用无法连接数据库,业务接口超时。
常见原因:
-
连接池配置不合理(最大连接数、空闲连接未释放)。
-
慢查询导致连接长时间占用。
-
突发流量暴增,连接数不够用。
解决方案:
-
增加 max_connections。
-
使用连接池优化(HikariCP、Druid)。
-
缓存热点数据,减少数据库压力。
-
快速排查慢查询(慢日志 + explain)。
详细解决方案及步骤:
「MySQL 数据库连接数耗尽」的排查、优化、彻底解决方案(生产级),包括 思路 + 步骤 + 实战命令。-CSDN博客
2.慢查询导致数据库“卡死”
现象:
-
数据库 CPU 飙升、Load 极高。
-
业务查询卡顿甚至超时。
常见原因:
-
未命中索引导致全表扫描。
-
大事务未提交,锁表/锁行。
-
排序/分组/子查询导致临时表过大。
解决方案:
-
EXPLAIN 分析 SQL,优化索引。
-
限制大查询 (limit 分页、分批处理)。
-
查询超时控制 (max_execution_time)。
-
拆表、冷热数据分离。
详细解决方案及步骤:
3. 死锁
现象:
-
应用层报错 Deadlock found when trying to get lock。
-
业务部分失败,事务回滚。
常见原因:
-
并发下多事务交叉锁定资源。
-
更新顺序不一致、范围查询导致间隙锁。
解决方案:
-
保证事务更新顺序一致。
-
降低锁粒度(行锁优先)。
-
索引优化,避免范围锁。
-
业务层幂等重试。
详细解决方案及步骤:
4.主从延迟严重
现象:
-
从库数据延迟几秒~几十秒。
-
读取从库的请求出现数据不一致。
常见原因:
-
主库写入压力过大。
-
从库硬件性能瓶颈(IOPS、CPU)。
-
大事务或大批量操作。
解决方案:
-
读写分离时,强一致性业务强制读主库。
-
优化主库写入,批量写入优化。
-
加快从库复制(semi-sync、GTID)。
-
异步任务分摊写压力。
详细解决方案及步骤:
5.磁盘空间耗尽(表膨胀/日志膨胀)
现象:
-
数据库不可写、服务异常。
-
binlog、undo log、临时表文件爆满。
常见原因:
-
表数据量暴增(没有归档、冷热数据未分离)。
-
binlog 未清理。
-
大事务未提交导致 undo log 无法回收。
解决方案:
-
表分区、冷热数据归档。
-
binlog 自动清理(expire_logs_days)。
-
定期清理历史数据。
详细解决方案及步骤:
MySQL磁盘空间耗尽(表膨胀/日志膨胀)排查与优化全流程-CSDN博客
6.InnoDB Buffer Pool 不足
现象:
-
查询频繁走磁盘 IO,响应缓慢。
-
系统 Load 偏高。
常见原因:
-
Buffer Pool 配置过小。
-
热点数据超出内存承载。
解决方案:
-
调整 innodb_buffer_pool_size 至物理内存 60%~70%。
-
冷热数据拆分、读缓存(Redis)。
-
大表冷热分离或拆分。
详细解决方案及步骤:
MySQL InnoDB Buffer Pool 不足 排查与优化全流程(超详细版)-CSDN博客
7.大事务阻塞写入与读取
现象:
-
某表长时间被锁定,导致相关业务查询卡顿。
-
DDL 操作被卡住(表被长事务占用)。
常见原因:
-
忘记提交事务(隐式事务)。
-
批量写入/删除无分批。
-
大表 alter 表结构。
解决方案:
-
分批次、小事务处理。
-
Online DDL 工具(gh-ost、pt-online-schema-change)。
-
事务超时控制。
详细解决方案及步骤:
MySQL生产问题 大事务阻塞写入与读取 排查与优化全流程-CSDN博客
8.数据库主库宕机 / 崩溃
现象:
-
整个业务读写瘫痪。
-
需要手动切换主从。
常见原因:
-
硬件故障、IO 崩溃。
-
MySQL Bug / OOM。
-
运维误操作。
解决方案:
-
主从 + VIP 自动切换(MHA、Orchestrator)。
-
日志、数据定期备份。
-
冷备、热备、容灾方案。
详细解决方案及步骤:
MySQL生产问题 主库宕机/崩溃 排查与优化全流程-CSDN博客
9.半同步复制丢数据风险
现象:
-
主从切换后,少量事务丢失。
-
高并发下半同步无法保障完全强一致。
常见原因:
-
半同步配置不当(超时后转异步)。
-
并发写入冲突,切换后数据未同步完成。
解决方案:
-
关键业务走强同步。
-
补偿机制(比对主从数据、一致性校验)。
-
优化同步延迟。
详细解决方案及步骤:
MySQL生产问题 半同步复制丢数据风险 排查与优化全流程-CSDN博客
10.热点行争用严重(更新频繁)
现象:
-
单行数据被高频更新,导致锁争用。
-
TPS 无法上去。
常见原因:
-
某些统计表、账户余额表行更新频繁。
-
排他锁阻塞。
解决方案:
-
拆分热点行(按用户、按时间)。
-
Cache + 异步落库(Redis 缓存写合并)。
-
增量写入,避免频繁更新同一行。
详细解决方案及步骤:
MySQL 热点行争用严重(更新频繁)排查与优化全流程-CSDN博客
✅总结:
高并发场景下,MySQL 容易出连接打满、慢查询卡死、主从延迟、锁争用、空间膨胀、主库宕机等事故,本质都是*“流量、数据量、访问模式” 超出了数据库设计的承载能力*。