启动
初始化模块读取系统参数和命令行参数,初始化整个系统,例如分配buffer、初始化全局变量,同时,启动各存储引擎
启动完成后,交给连接管理模块接手,连接管理模块启动端口监听程序,准备好接收客户端请求
接收请求
连接管理模块接收到客户端请求后,按照交互协议进行沟通,然后把连接请求交给线程管理模块,去请求一个线程
线程管理模块接到请求后,先进行授权检查,授权通过后,先检查连接线程池中是否有被缓存的空闲连接线程,如果有,取出一个和客户端请求连接上,如果没有,建立一个新的连接线程
处理请求
客户端请求和连接线程对接后,开始处理请求
如果客户端请求是query类型,交给query解析器,解析器首先分析是否为select类型,如果是,调用缓存查询模块,如果已经被缓存,直接将cache中的数据返回给连接线程模块,然后传输给客户端,否则,解析器会通过分发器交由不同模块处理
如果是没被缓存的select,交给优化器模块,如果是表内容或结构更改,交给表变更管理模块,如果是一些更新统计信息、检测、修复、整理之类的,交给表维护模块,如果是复制相关的,交给复制模块,请求状态的就交给状态收集报告模块
各模块收到请求后,先检查用户是否有目标表的权限,如果有,查看此表是否在table cache中,没在cache中就先打开表,取到表后获取对应的锁
表变更管理模块打开表后,会根据表的meta信息,判断表的存储引擎类型和其他相关信息,调用相应存储引擎接口处理
完成请求
连接线程模块将处理结果返回给客户端,然后进行相应的清理工作,开始等待后面的请求