这是《MySQL 8.0 源码与内核实战》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 MySQL 内核学习的目标不是背函数名,而是建立从现象、模块、数据结构到验证方法的完整推理链。
31.1 成长阶段
| 阶段 | 能力 |
|---|---|
| 入门 | 编译、调试、看懂调用链 |
| 初级 | 理解 SQL 层和 handler 边界 |
| 中级 | 掌握 B+Tree、Buffer、事务 |
| 高级 | 分析锁、MVCC、日志和恢复 |
| 专家 | 修改内核、贡献补丁、设计方案 |
31.2 学习路线
编译调试
-> SQL 执行路径
-> 优化器与执行器
-> 页面与 B+Tree
-> Buffer Pool
-> undo / MVCC
-> redo / recovery
-> lock / purge
-> replication / DDL
31.3 实践方法
- 每周一个最小复现;
- 每个结论保存调用栈;
- 用 MTR 固化行为;
- 对比两个版本;
- 读对应测试;
- 做性能基准;
- 写技术笔记;
- 尝试提交小补丁。
31.4 进阶方向
| 方向 | 内容 |
|---|---|
| 查询优化 | 代价模型、join search |
| 执行引擎 | 迭代器、并行、表达式 |
| 存储结构 | 页格式、压缩、索引 |
| 事务恢复 | WAL、checkpoint、crash safe |
| 高可用 | binlog、MGR、failover |
| 云原生 | 多租户、弹性、存储计算分离 |
31.5 工程判断
内核专家会先问:
- 问题属于哪一层;
- 当前版本是什么;
- 代价和风险是什么;
- 如何复现;
- 如何验证;
- 如何回滚;
- 是否值得修改内核;
- 是否可用架构方案替代。
本章小结
大师之路靠可复现实验和长期积累。沿着 SQL 层到 InnoDB 的路径不断验证,最终能解释行为、定位问题,并在必要时安全修改内核。
思考题
- 你最想深入哪个模块?
- 如何建立一个长期源码笔记库?
- 什么情况下才值得修改内核?
- 如何设计一个内核改动的回滚方案?
- 下一个最小实验是什么?