01_MySQL 体系架构全解 —— 连接层、SQL 层、存储引擎层与 InnoDB 深入

01_MySQL 体系架构全解 ------ 连接层、SQL 层、存储引擎层与 InnoDB 深入

系列定位 :《MySQL 数据库全栈运维实战系列》第 01 篇,与《Oracle 数据库全栈运维实战系列(VMware 版)》同构对标。适用版本 :MySQL 8.0(5.7 差异随文标注)。官方文档:MySQL 8.0 Reference Manual、InnoDB Storage Engine 章节。


一、MySQL 总体架构(一张图看懂)

图 1

层 职责 类比 Oracle
连接层 认证、连接池、线程管理、SSL Listener + 服务进程
SQL 层 解析、优化、执行、缓存 共享池 + 优化器
存储引擎层 数据的存储、索引、事务实现 存储结构 + 表空间
文件层 ibd / redo / undo / binlog 数据文件 /redo/undo / 归档

核心差异 :Oracle 的 "存储结构" 在 MySQL 中是可插拔的存储引擎------ 同一实例可混用 InnoDB / MyISAM / MEMORY,这是 MySQL 架构的标志性特点(官方:Pluggable Storage Engine Architecture)。


二、连接层:连接管理与会话

图 2

复制代码
-- 查看当前连接(解释:processlist 是运维第一视图)
SHOW PROCESSLIST;

-- 查看连接数配置(解释:max_connections 默认 151)
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'wait_timeout';
要点 说明
认证插件 8.0 默认 caching\_sha2\_password(5.7 为 mysql\_native\_password)
连接池 应用侧建议用连接池(HikariCP/ProxySQL),减少建连开销
线程模型 每连接一线程(默认);可开 thread\_pool(企业版)

三、SQL 层:解析 → 优化 → 执行

图 3

复制代码
-- 查看执行计划(解释:EXPLAIN 是优化器决策的关键视图)
EXPLAIN SELECT * FROM t_user WHERE id = 100;

-- 查看优化器开关与代价模型
SHOW VARIABLES LIKE 'optimizer_switch';
组件 职责 调优入口
解析器 语法树构建 SQL 语法正确性
优化器 代价估算、索引选择、连接顺序 EXPLAIN / optimizer\_switch
执行器 按计划调用引擎 索引命中率

四、存储引擎层:引擎对比(官方:Alternative Storage Engines)

特性 InnoDB MyISAM MEMORY NDB Cluster
事务(ACID) ✅ ❌ ❌ ✅
行级锁 ✅ ❌(表锁) 表锁 分布式锁
外键 ✅ ❌ ❌ ❌
崩溃恢复 ✅(redo 重放) ❌ 重启即失 ✅(节点冗余)
全文索引 8.0 支持 ✅ ❌ ❌
数据存放 磁盘 磁盘 内存(重启丢失) 全内存(约 1:1.1 内存/数据比)
适用 生产默认 只读 / 历史报表 临时缓存 分布式高可用(NDB Cluster)
复制代码
-- 查看当前表引擎(解释:8.0 默认 InnoDB)
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA='test';

-- 查看全局默认引擎
SHOW VARIABLES LIKE 'default_storage_engine';   -- InnoDB

结论:生产环境一律 InnoDB;MyISAM 仅限明确只读场景(8.0 已不建议新用)。


五、InnoDB 深入:内存与磁盘结构(官方:InnoDB In-Memory / On-Disk Structures)

图 4

| Buffer Pool | 数据页缓存,读写加速 | innodb_buffer_pool_size(建议物理内存 60~70%) |

| Log Buffer | redo 写缓冲 | innodb_log_buffer_size |

| redo log | 崩溃恢复(前滚) | innodb_log_file_size |

| undo log | 回滚 + MVCC 版本链 | innodb_undo_tablespaces |

| doublewrite | 防页半写(8.0 独立表空间) | innodb_doublewrite |

| Change Buffer | 二级索引写入缓存 | innodb_change_buffering |

复制代码
-- 查看 InnoDB 关键状态(解释:性能体检第一站)
SHOW ENGINE INNODB STATUS\G
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

六、逻辑与物理存储结构

层级 说明 类比 Oracle
实例 / 库 MySQL Server 实例
数据库 Schema 逻辑库 用户 / 容器
表 行集合 表
表空间 表 / 索引物理载体(.ibd) 表空间
段 / 区 / 页 InnoDB 内部管理单元(16KB 页) 段 / 区 / 块
复制代码
-- 查看表空间文件(解释:每表独立 .ibd)
SELECT FILE_NAME, TABLESPACE_NAME, ENGINE
FROM information_schema.FILES
WHERE FILE_TYPE='DATAFILE' LIMIT 10;

-- 查看 redo 与 binlog 配置
SHOW VARIABLES LIKE 'innodb_redo_log_capacity';   -- 8.0.30+
SHOW VARIABLES LIKE 'log_bin';

8.0 变化:数据字典(DD)统一元数据管理(不再用 .frm);redo log 支持容量自动调整;binlog 默认开启。


七、一条 SQL 的生命周期(全链路)

图 5

复制代码
-- 实测验证(解释:开启执行计划 + 性能 schema 观察)
SET profiling = 1;
SELECT * FROM t_order WHERE order_id = 20261009;
SHOW PROFILES;              -- 查看各阶段耗时(8.0 已弃用但可用)
SELECT * FROM performance_schema.events_statements_summary_by_digest\G

八、事务与隔离级别(官方:InnoDB Multi-Versioning)

隔离级别 脏读 不可重复读 幻读 默认
READ UNCOMMITTED 可能 可能 可能 ❌
READ COMMITTED 否 可能 可能 ❌(RC 模式常用)
REPEATABLE READ 否 否 部分(MVCC 下基本避免) ✅ InnoDB 默认
SERIALIZABLE 否 否 否 ❌
复制代码
-- 查看/设置隔离级别(解释:RR 是 InnoDB 默认,RC 适合高并发读多)
SELECT @@transaction_isolation;                 -- REPEATABLE-READ
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- 查看事务与锁(解释:日常运维高频)
SELECT * FROM information_schema.innodb_trx\G
SELECT * FROM performance_schema.data_locks\G
机制 说明
MVCC undo 版本链 + 一致性读(读不加锁)
行锁 记录锁 / 间隙锁 / 临键锁(防幻读)
意向锁 表级意向锁与行锁协同

九、binlog 与复制基础(官方:Binary Log / Replication)

图 6

binlog 格式 说明 适用
ROW 记录行变更(默认) 生产默认,安全
STATEMENT 记录 SQL 批量 / 大事务更小
MIXED 混合 兼容场景
复制代码
-- 查看 binlog 配置与当前日志(解释:复制与 PITR 的基础)
SHOW VARIABLES LIKE 'binlog_format';      -- ROW
SHOW MASTER STATUS;                        -- 当前位点(file + position)

-- 查看复制状态(从库执行)
SHOW SLAVE STATUS\G

衔接:binlog 是 MySQL 高可用(13/14 章主从、MGR)与时间点恢复(09 章 PITR)的基石,本系列后续章节深入。


十、MySQL 8.0 新特性速览(官方:What Is New in MySQL 8.0)

特性 说明
数据字典 元数据进 InnoDB,不再有 .frm
原子 DDL DDL 支持崩溃安全(atomic DDL)
默认字符集 utf8mb4(emoji / 多语言友好)
窗口函数 / CTE 标准 SQL 增强(8.0/8.0.1)
不可见索引 / 直方图 优化器能力增强
caching_sha2_password 默认认证插件(更安全)
redo 容量自管理 innodb_redo_log_capacity
撤销表空间 undo 独立管理
查询缓存移除 5.7 时代热门调优点(query_cache_size)在 8.0 已彻底移除,勿沿用旧教程参数
复制代码
-- 验证 8.0 特性(解释:窗口函数示例)
SELECT dept, emp_name, sal,
       RANK() OVER (PARTITION BY dept ORDER BY sal DESC) AS rk
FROM t_emp;

十一、本文要点速记

  1. 三层架构:连接层 / SQL 层 / 存储引擎层(可插拔)。
  1. InnoDB 是生产唯一选择:事务、行锁、MVCC、崩溃恢复。
  1. Buffer Pool 是性能核心:默认建议 60~70% 物理内存。
  1. redo 保恢复、undo 保回滚、binlog 保复制------ 三者职责分清。
  1. 8.0 默认 utf8mb4 + caching\_sha2\_password + ROW binlog,安全合规向。

十二、参考资料(官方正式文档)

主题 官方链接
MySQL 8.0 Reference Manual https://dev.mysql.com/doc/refman/8.0/en/
MySQL 总体架构(Pluggable Engines) https://dev.mysql.com/doc/refman/8.0/en/pluggable-storage-engines.html
InnoDB Storage Engine https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html
InnoDB 多版本与隔离级别 https://dev.mysql.com/doc/refman/8.0/en/innodb-multi-versioning.html
MySQL 8.0 新特性 https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html
二进制日志 https://dev.mysql.com/doc/refman/8.0/en/binary-log.html

说明:本文为系列开篇,后续 02~22 篇将按《MySQL 系列文章规划.md》逐篇展开(部署、日常运维、备份、调优、高可用、监控、案例),与 Oracle 系列同编号对照。

相关推荐
Linux_cy1 小时前
nginx 502 排查手册:九种原因分类、定位命令与检查顺序
linux·运维·服务器·网络·数据库·nginx·ssh
在多学一点1 小时前
MySQL_DDL的基本命令
数据库·mysql·adb
椒颜皮皮虾྅1 小时前
模型部署不再卡在环境上:DeploySharp 四大推理引擎与 Windows/Linux 离线交付实战
linux·运维·开发语言·人工智能·windows·计算机视觉·cuda
ai_coder_ai2 小时前
六边形架构(端口适配器架构)的设计与实践*
架构
9624562 小时前
补打一条卡,为什么要从前一天重新算:人工补录与实时重算业务复盘
java·mysql·kafka
前端 贾公子2 小时前
第 6 章:MCP 服务器介绍与接入
运维·服务器·网络
是程序喵呀2 小时前
Redis实现持久化
数据库·redis·缓存
-梅2 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·自动化·github
syntaxsage2 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器