MySQL体系架构

刚启动的时候,初始化模块掌控控制权,初始化模块主要是读配置文件,还有命令行指定的一些选项,为我们初始化cache buffer,还有我们用户定义的变量;初始化完成之后,将控制权交给连接管理模块:
连接管理模块->线程管理模块->用户模块->命令分发器

Initialization Module 初始化模块:当一个服务器从命令行启动的时候,初始化模块接管控制,它会解析控制文件和命令行参数选项,分配相应的全局缓存,初始化全局变量和一些结构信息,载入控制表和其他的一些初始化任务。一旦初始化工作完成,初始化模块将控制权交给链接管理器,连接管理器是一直在循环来接受客户端的连接!

Connection Manager连接管理模块
Thread Manager 线程管理模块
User Authentication Module 用户模块
当一个客户端向服务器发起连接的时候,连接管理模块执行一些底层的网络协议任务,然后把这个控制权交给线程管理模块,然后线程管理模块就会给我们的请求提供一个线程,这个线程可能是新建的,也可能是从线程池里抓取了一个。一旦连接线程建立好之后,就会把这个权限交给用户模块,有用户模块来验证用户名密码,客户端IP,验证通过之后,就可以接受客户端发过来的命令了。将控制权交给命令模块。

Command Dispatcher命令分发器
Logging Module日志记录模块
Query Cache Module查询缓存模块  这个模块要手动打开
命令分发器会语法检查将命令转发到查询缓存模块,查询缓存模块检查查询类型是否为可缓存的,并且查看这次的查询在缓存中是否已经存在。这点上,如果命中,这个执行过程就缩短了,就直接把缓存的结果返回给用户,连接线程获得控制权,此时准备处理另一个命令。如果查询缓存中没有命中,查询缓存就把这个命令交给命令分析器,命令分析器就通过分析不同的描述信息,将语句分发给不同的执行模块去执行。

Optimizer 命令解析器
Table Modification Module 表变更模块
Table Maintenance Module 表维护模块
Replication Module 复制模块
Reporting Module 状态模块
命令解析器从查询缓存或者命令分发器那里接过控制权和执行命令,它会先进行分析,这个执行语句是属于什么类型的,比如查询的,就会交给查询优化器然后有查询优化器决定是用什么方式查询,索引还是全表扫描等等,如果是 表插入之类的操作,就交给表变更模块,维护的交给表维护模块,复制的交给复制模块,显示状态信息的交给状态模块。
等这些模块做好相应操作之后,他就会把操作对象的一个列表往下发送,给访问控制模块

Access Control Module  访问控制模块
Table Manager 表管理模块
Abstracted Storage Engine  存储引擎接口
访问控制模块接到操作对象的列表之后,会检查一下,是不是有对应的操作权限,通过验证之后,会将控制权交给表管理模块,再由表管理模块来调用具体的存储引擎来进行各种操作。