MySQL 核心原理 + 生产高频问题全方位总结

举报
yd_218759924 发表于 2026/07/19 10:22:36 2026/07/19
【摘要】 mysql
MySQL 是当下互联网最主流的关系型数据库,几乎所有后端、运维、云原生岗位都必须熟练掌握。本文从核心架构、存储引擎、索引原理、事务锁、主从复制、生产故障六个维度,一站式梳理 MySQL 必备知识点,适合入门、面试、生产复盘。

一、MySQL 整体架构

MySQL 采用分层架构,从上到下分为四层:
  1. 连接层:处理客户端连接、权限验证、连接池管理,控制最大连接数
  2. 服务层(核心):SQL 解析、语法校验、优化器、查询缓存、日志记录
  3. 引擎层:真正负责数据读写,支持多引擎切换(InnoDB、MyISAM)
  4. 存储层:磁盘文件持久化、数据落地
日常优化、报错、性能问题,90% 都出在服务层 + 引擎层

二、两大存储引擎区别(面试必考)

1、InnoDB(默认、生产必用)

  • 支持事务、ACID、行锁、外键、MVCC
  • 支持崩溃恢复、数据安全高
  • 读写均衡,适合业务数据表
  • 数据和索引统一存储在 ibd 文件

2、MyISAM(老旧、基本淘汰)

  • 不支持事务、不支持行锁、崩溃无法恢复
  • 只有表锁,并发写入极差
  • 查询速度快,适合静态日志、历史归档表

三、索引原理与优化

MySQL 默认使用 B+ 树索引,特点:层高更低、查询稳定、适合范围查询。

1、普通索引分类

  • 主键索引:聚簇索引,数据直接存在索引叶子节点
  • 普通索引:二级索引,叶子节点存主键值
  • 唯一索引:禁止重复值
  • 联合索引:遵循最左匹配原则

2、索引失效高频场景

  • like 以 % 开头:like '%test'
  • 索引列参与运算、函数
  • 隐式类型转换(字符串和数字对比)
  • or 前后字段未全部建索引
  • 违反最左匹配原则

3、优化万能工具

explain select 语句 查看是否命中索引、是否全表扫描

四、事务与四大隔离级别

1、事务 ACID

原子性、一致性、隔离性、持久性

2、四大隔离级别(InnoDB 默认 RR)

  1. 读未提交:脏读、不可重复读、幻读全部存在
  2. 读已提交 RC:解决脏读,存在不可重复读、幻读
  3. 可重复读 RR(MySQL 默认):解决脏读、不可重复读,存在幻读
  4. 串行化:最高级别,全部解决,性能极差

五、锁机制(生产阻塞根源)

1、锁类型

  • 表锁:锁住整张表,并发低(MyISAM)
  • 行锁:只锁数据行,并发高(InnoDB)
  • 间隙锁、临键锁:解决幻读问题

2、生产常见锁问题

  • Lock wait timeout:行锁等待超时,长事务未提交导致
  • Deadlock:两条事务互相抢占锁,更新顺序不一致导致
解决:拆分大事务、统一 SQL 更新顺序、减少行锁竞争

六、MySQL 主从复制(企业必备)

1、原理流程

  1. 主库开启 binlog,记录所有增删改操作
  2. 从库 IO 线程拉取主库 binlog
  3. 从库 SQL 线程回放日志,同步数据

2、两大经典故障

  • Slave_IO_Running: No:网络不通、账号密码错误、server-id 重复
  • Slave_SQL_Running: No:主键冲突、数据不一致、表不存在

3、主从延迟原因

主库写入量大、从库单线程回放、大事务、硬件性能不足

七、生产高频故障汇总(实战)

1、Too many connections 连接数爆满

原因:空闲连接不释放、连接池配置不合理
解决:调高 max_connections,缩短 wait_timeout

2、CPU 100% 爆满

99% 是慢 SQL:无索引、全表扫描、大事务
解决:开启慢查询日志、explain 优化 SQL、增加索引

3、无法远程连接

bind-address 限制、防火墙 3306 未放行、root 未授权 % 访问

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。