MySQL内核设计与实现 收藏

  • 书籍语言:简体中文
  • 下载次数:6606
  • 书籍类型:Epub+Txt+pdf+mobi
  • 创建日期:2025-09-13 12:10:09
  • 发布日期:2025-09-13
  • 连载状态:全集
  • 书籍作者:赵景波
  • 运行环境:pc/安卓/iPhone/iPad/Kindle/平板

内容简介

本书是资深数据库专家结合其十余年一线实战经验与源码研究倾力打造的MySQL内核权威指南,全景式解构MySQL 5.7及MySQL 8.0内核设计精髓。作者采用基于SQL执行流的独特分析范式,通过一条查询语句的生命周期,串联起协议解析、数据字典、InnoDB存储引擎、并发控制等核心模块,揭秘缓冲池、双写缓冲区、自适应哈希索引的协同机制,以及B+树索引的物理操作细节。无论是希望突破技术瓶颈的DBA、追求卓越性能的互联网架构师,还是数据库内核开发者,本书都将为你提供从启动流程到高可用架构(含MGR集群)的完整知识图谱,通过源码调试与物理操作剖析,打通从原理认知到性能调优的实践链路。 本书具体内容如下:第1章详细阐述MySQL内核的发展历程,并指导读者如何下载MySQL源码包以及搭建调试环境;第2章系统介绍MySQL的总体架构;第3章探讨客户端与服务端之间的协议;第4章分析数据字典的结构;第5章详细介绍InnoDB存储引擎的架构,包括在执行SQL语句时,InnoDB存储引擎中的缓冲池、双写缓冲区、自适应哈希索引以及后台线程是如何协同工作的;第6章讨论InnoDB的文件组织方式,解释SQL查询的数据是如何在文件中组织的;第7章揭示InnoDB索引的实现机制,阐述SQL语句是如何在索引上进行数据扫描和插入操作的;第8章阐述MySQL的并发控制机制;第9章介绍MySQL的高可用实现,包括MySQL不同阶段的高可用发展及其原理,以及针对MySQL MGR非常详细的介绍。

作者简介

赵景波
资深数据库专家,现任国内头部公有云厂商存储管控核心组件负责人。深耕分布式存储与数据库管控领域十余年。主导设计多款支撑千亿级数据规模的高并发数据库系统,技术成果落地金融、政务、游戏等核心场景。职业历程中,曾于2015 — 2018年担任新浪NoSQL团队负责人,主导完成核心数据库架构升级,实现日均千亿级请求下的毫秒级响应能力;2018—2022年在金山云组建并带领20人研发团队,从零构建DTS数据迁移平台、云原生数据库管控平台,服务企业客户超3000家,推动平台成为公司核心产品线之一。作为行业技术布道者,多次受邀担任中国数据库大会(DTCC)、Redis中国用户组等会议核心讲师,分享高可用架构、性能优化等实战经验。

编辑推荐

适读人群 :数据库管理员(DBA)、开发者、系统架构师,以及任何对数据库技术充满热情的读者
本书是行业专家结合自己十余年的实践经验为读者打造的深入探索MySQL内核权威指南。与其他MySQL类书籍不同,本书深入探索MySQL内核,全景式呈现MySQL 5.7及MySQL 8.0内核设计精髓,从源码层面解读核心模块,涵盖发展历程、架构设计理念和实践等关键内容,解析内核设计与实现细节,帮助读者理解运行机制,无论你是新手还是资深开发者,都能从本书获益。

下载地址

序言

前  言?Preface
自2014年起,我开始涉足数据库领域的工作,其间遭遇了众多的数据库问题。至2018年,我深刻认识到,唯有深入阅读并调试MySQL的源码,方能使我从容地应对这些挑战。起初,我感到不解的地方有很多,但经过一个月的不懈努力,我开始逐渐掌握了一些技巧。要深入理解MySQL的任何一个模块,都需要以月为单位进行长时间的学习和研究。我曾广泛搜集市面上的相关资料,发现尽管有些资料讲解得相当出色,但其覆盖范围往往有限。因此,我萌生了一个想法:深入阅读和调试MySQL的大部分模块,并将相关经验总结成书,供他人参考。那些阅读过MySQL源码的同行可能清楚,这是一项艰巨的任务,它需要投入巨大的
精力。
2020年3月,我与出版社取得联系,并随即开启了写作本书的征程。经过近3年的努力,包括工作日晚上和节假日的不懈创作,书稿终于初具规模。然而,工作的繁重一度让我萌生了放弃出版的念头。在此,我要特别感谢我的妻子,是她坚定的鼓励与督促才使得本书顺利完成。
本书主要聚焦于MySQL的InnoDB存储引擎。InnoDB存储引擎是一个结构复杂的系统,包含数十个模块,本书对每个模块都提供了代码级别的详细解释和易于理解的原理图。此外,本书还涵盖了MySQL的并发控制、高可用主从架构以及强一致性等高级主题。
本书共9章,主要内容如下。第1章详细阐述了MySQL内核的发展历程,并指导读者如何下载MySQL源码包以及搭建调试环境。第2章系统介绍了MySQL内核的整体架构,从Server到InnoDB存储引擎层,几乎涉及了所有内部组件,旨在为读者提供对MySQL架构的初步理解。此外,第2章在结尾部分描述了MySQL的启动流程,将架构中的各个模块相互连接,使读者能够清晰地理解MySQL的工作机制。
接下来,本书通过一条SQL语句在MySQL中的执行流程,详细阐述了各个模块的工作原理。第3章探讨了客户端和服务端之间的交互协议,第4章分析了数据字典的结构,介绍了在MySQL中表的元数据是如何存储的,以及在执行SQL语句时数据字典信息是如何被访问的。紧接着,本书进入几个至关重要的章。第5章详细介绍了InnoDB存储引擎的架构,包括在执行SQL语句时,InnoDB存储引擎中的缓冲池、双写缓冲区、自适应哈希索引以及后台线程是如何协同工作的。第6章讨论了InnoDB的文件组织方式,解释了SQL查询的数据是如何在文件中组织的。第7章揭示了InnoDB索引的实现机制,阐述了SQL语句是如何在索引上进行数据扫描和插入操作的。
在读者对SQL执行过程有所了解之后,第8章详尽阐述MySQL的并发控制机制,深入探讨了包括事务处理、多版本并发控制(Multi-Version Concurrency Control,MVCC)、锁定机制在内的复杂主题。因此,第8章内容极为丰富,体现了MySQL内核设计的精华。
第9章介绍了MySQL的高可用性,包括MySQL不同阶段的高可用性发展及其原理,并对MySQL MGR进行了非常详细的介绍。
本书内容主要基于MySQL 5.7版本,也包含部分MySQL 8.0的相关内容。
读者对象
可以肯定的是,多数开发人员与MySQL或多或少有些交集。然而,本书并非为初学者所著,它不能即刻助你解决工作中的具体问题。尽管如此,书中所阐述的理念仍能助你提升架构设计能力,并让你领略到一个设计严谨的系统的精髓。深入理解内部机制有助于你更高效地运用MySQL,并能助你解决一些复杂的技术难题。对于那些致力于成为DBA或从事数据库研发的同人,本书可作为你工作中的参考手册,遇到相关问题时可随时查阅。
勘误和支持
必须强调,MySQL是一个极其复杂的系统。鉴于我的认知水平有限,本书难免存在疏漏或不完善之处。我诚挚地希望读者能够共同参与,进一步完善本书内容。若你在阅读过程中遇到任何问题,欢迎与我联系(zbcxy10@gmail.com)。我将在工作之余与各位探讨交流,深表感谢。
致谢
衷心感谢我的技术导师余绍在先生,长期以来,他为我提供了宝贵的机会,使我得以在数据库领域不断深入探索,从最初的运维开发逐步过渡到内核研发。同时,我也感激新浪、金山云、字节跳动等平台,让我经历了在大规模数据库场景下的一次次磨炼。对在此期间给予我帮助和支持的同事表示诚挚的谢意。
在本书的撰写过程中,众多友人给予了宝贵的协助,对此我深表感激。特别感谢张雨女士,她协助我完成了第3章的内容;潘友飞先生对全书进行了详尽的审阅工作;桑栎先生对InnoDB相关章节提出了宝贵的建议和修改意见。此外,我必须感谢我的妻子王慧玲女士,她一直给予我鼓励、支持和监督,对此我深怀感激之情。
特别感谢为本书撰写推荐的专家:盖国强先生、周彦伟先生、陈栋先生、余邵在先生、金官丁先生、祝海强先生、王伟先生、张友东先生、张晋涛先生、付磊先生。诸位前辈和朋友的认可给了我巨大的信心和勇气,让我感觉这几年的坚持非常有价值。
最后衷心感谢机械工业出版社的编辑团队对全书审校工作的倾力投入!基于工作原因,常需要在深夜及周末沟通,编辑团队总是不辞辛劳、高效严谨地回应,为成书提供了不可或缺的支持。

目录

Contents?目  录
本书赞誉
推荐序一
推荐序二
推荐序三
推荐序四
推荐序五
前言
第1章 MySQL内核简介 1
1.1 MySQL 内核历史 1
1.2 MySQL 内核衍生 2
1.3 MySQL 内核版本 3
1.4 MySQL内核社区 4
1.5 开始编译MySQL 4
1.5.1 下载MySQL源码包 4
1.5.2 编译MySQL 9
1.5.3 使用IDE进行调试 12
1.5.4 调试技巧 19
1.6 总结 26
第2章 MySQL内核整体架构 27
2.1 Server层 28
2.1.1 连接层 28
2.1.2 查询优化 30
2.1.3 参数、状态、
performance_schema 31
2.1.4 缓存 31
2.1.5 日志 32
2.1.6 锁 33
2.1.7 存储过程相关 33
2.1.8 用户自定义函数 34
2.1.9 复制层 34
2.1.10 API层 34
2.2 存储引擎层 35
2.2.1 缓冲池 36
2.2.2 重做日志缓冲区 37
2.2.3 双写机制 37
2.2.4 后台线程 37
2.3 文件层 39
2.4 MySQL启动流程 40
2.4.1 第一阶段 41
2.4.2 第二阶段 43
2.4.3 第三阶段 50
2.5 总结 52
第3章 客户端和服务端交互协议 53
3.1 MySQL的连接方式 53
3.1.1 TCP/IP套接字 53
3.1.2 UNIX域套接字 54
3.1.3 命名管道和共享内存 55
3.2 交互过程 55
3.2.1 MySQL通信协议 56
3.2.2 连接阶段 58
3.2.3 命令执行阶段 61
3.3 处理连接与创建线程 65
3.3.1 MySQL监听客户端请求 66
3.3.2 创建连接线程 67
3.3.3 THD类 69
3.4 总结 71
第4章 数据字典 72
4.1 数据字典简介 72
4.1.1 文件层 74
4.1.2 InnoDB存储引擎层 79
4.1.3 MySQL Server层 83
4.2 .frm文件 89
4.3 数据字典的使用 93
4.3.1 创建表 93
4.3.2 查询表 95
4.3.3 rowid 96
4.4 MySQL 8.0 数据字典 97
4.4.1 文件存储层 99
4.4.2 数据字典缓存 103
4.4.3 数据字典的使用 110
4.4.4 SDI 115
4.4.5 原子DDL 121
4.5 总结 124
第5章 InnoDB存储引擎 125
5.1 整体架构 125
5.2 缓冲池 126
5.2.1 总体架构 126
5.2.2 缓冲池初始化 128
5.2.3 缓存及淘汰 130
5.2.4 相关参数 131
5.3 插入缓冲区 132
5.3.1 插入缓冲的流程 132
5.3.2 相关参数 136
5.4 自适应哈希 136
5.4.1 使用自适应哈希查询 140
5.4.2 自适应哈希索引的维护 140
5.5 重做日志缓冲区 140
5.5.1 整体架构 141
5.5.2 管理结构 142
5.5.3 更新语句的流程 143
5.5.4 重做日志刷盘 145
5.6 双写机制 146
5.6.1 双写缓冲区管理 147
5.6.2 数据的可靠性保证 149
5.7 后台线程 149
5.7.1 master线程 150
5.7.2 I/O线程 151
5.7.3 刷脏线程 153
5.7.4 清理线程 154
5.8 总结 156
第6章 InnoDB文件组织 157
6.1 数据文件 157
6.1.1 逻辑组织结构概览 157
6.1.2 逻辑组织结构管理 160
6.1.3 物理组织结构 167
6.1.4 数据文件的更新操作 177
6.2 重做日志文件 181
6.2.1 总体架构 181
6.2.2 更新操作的重做日志 186
6.3 回滚日志文件 189
6.3.1 总体架构 189
6.3.2 回滚日志的管理 192
6.3.3 更新操作的回滚日志 195
6.4 总结 196
第7章 InnoDB索引的实现 197
7.1 索引简介 197
7.1.1 B树和B+树 198
7.1.2 全文索引 199
7.2 索引的结构 200
7.2.1 聚簇索引的结构 200
7.2.2 二级索引的结构 202
7.2.3 复合索引的结构 203
7.3 索引的管理 204
7.3.1 索引在内存中的管理 204
7.3.2 索引的加载 205
7.3.3 索引的创建 206
7.4 数据检索 209
7.4.1 聚簇索引数据检索 209
7.4.2 二级索引数据检索 209
7.4.3 插入数据 209
7.4.4 删除数据 210
7.4.5 更新数据 210
7.5 索引分裂和合并 211
7.5.1 索引页分裂 211
7.5.2 索引页合并 213
7.5.3 索引页重组 215
7.6 总结 215
第8章 MySQL并发控制 216
8.1 MySQL事务的实现 216
8.1.1 事务的管理 216
8.1.2 事务的执行流程 218
8.1.3 事务的ACID实现 220
8.1.4 MVCC 229
8.1.5 崩溃恢复流程 231
8.1.6 组提交 237
8.1.7 分布式事务 238
8.2 MySQL锁实现 242
8.2.1 简介 242
8.2.2 元数据锁 247
8.2.3 表锁 254
8.2.4 InnoDB行锁 261
8.2.5 InnoDB表锁 269
8.2.6 互斥锁 272
8.2.7 读写锁 275
8.2.8 锁升级和锁降级 279
8.2.9 死锁 281
8.3 总结 283
第9章 MySQL高可用实现 284
9.1 MySQL主从复制 284
9.1.1 数据同步流程 285
9.1.2 binlog日志详解 290
9.1.3 半同步复制 294
9.1.4 并行复制 296
9.2 组复制 303
9.2.1 总体架构 303
9.2.2 数据流 307
9.2.3 MGR Paxos协议优化 325
9.2.4 MGR冲突检测 328
9.2.5 MGR流控 330
9.3 总结 331

短评