MySQL服务器架构模块指在逻辑上以某种方式结合在一起的一段代码,并且能在服务器中完成某种特定的功能。到MySQL5.1,其源码可以抽象为以下模块,彼此交互和传递控制权。
负责在服务器启动时完成初始化工作,包括解析配置文件和命令行参数、分配全局存储缓冲区、初始化全局变量和结构、加载访问控制表以及其他大量初始化任务。其入口为C/C++程序主函数main()。
侦听来自客户端的连接,然后将请求派发给线程管理器。
处理来自客户端的连接,分配、跟踪线程。
由线程管理器创建,或者从线程缓存中提取并调用。连接线程是处理客户端请求的工作核心。
验证连接用户的证书,初始化用户权限。
检验客户端是否有权限执行所请求的操作。
解析查询,生成解析树。
负责将请求分配给相关能够处理这些请求的较低层次的模块。
缓存查询结果,查询缓存命中时提交缓存结果然后结束查询请求的执行。
MySQL源码中最复杂的模块。生成执行查询的最佳策略,执行查询计划,向客户端返回结果。
创建、读取和修改表定义文件(.frm文件),维护被称为表缓存的表描述符,管理表级锁。
MySQL源码中非常重要的代码。负责包括创建、删除、重命名表以及表记录的插入、删除、更新等操作。即DDL和DML接口。
负责表维护操作,包括检查、修理、备份、恢复、优化(碎片整理)以及分析(更新索引基数)。
处理以SHOW命令开始的查询,返回关于服务器配置设置、性能监控变量、表结构信息、复制进程、表缓存状态等查询的结果。
执行低层次存储与检索操作的标准化接口。
抽象存储引擎接口的扩展,每个存储引擎(InnoDB、MyISAM、MEMORY等)根据自身的设计定义低层次调用接口。
维护高层次(逻辑)日志,即服务器的二进制日志、查询日志和慢查询日志。不包括存储引擎级别自定义的日志。
负责master上的复制功能,主要是向slave发送复制日志事件。
负责slave上的复制功能,主要是接收master上的更新然后应用到slave上。
MySQL服务器创建、读取、解释和发送协议包API。
抽象低层次网络I/O和SSL。
MySQL核心组件。包括文件I/O、内存管理、字符串操作、文件系统索引、格式化打印、丰富的数据结构和算法集等。
内容整理自:
《Understanding MySQL Internals》(https://book.douban.com/subject/1924288/)
《深入理解MySQL核心技术》(https://book.douban.com/subject/4022870/)