nber1994



mysql-架构

January 8, 2019

各模块之间的配合工作

初始化

Mysql启动之后,初始化模块会将读取配置文件和命令行参数去初始化整个系统,比如申请buffer或者初始化数据结构 同时会初始化各个存储引擎

监听请求

初始化之后,会将控制权交给连接管理模块,接收客户端请求
当客户端连接上之后,双方会根据协议相互确认后,连接管理器会请求线程管理器去请求分配连接线程,分配线程进行处理
线程管理模块拿到请求后,调用用户模块对用户进程授权检查,线程处理模块会检测是否有cache的线程,如果没有则新建一个线程返回
之后会进行query的判断,如果是command命令,则不需要进行解析,直接执行,如果是sql相关的,则转发给query解析器,query判断出是select指令,会调用query cache进行读取,有则直接返回结果。如果失败,则会回传给query解析器

switch
sejlect语句:
 	调用查询缓存,失败后调用查询优化器,对query进程查询优化
ddl&dml语句:
	交给表管理模块
更新统计信息&检测&整理:
	调用表维护模块
复制相关的:
	调用复制模块
请求状态:
	调用状态收集模块

所有模块拿到请求之后,会先请求访问控制模块检查链接用户是否有操作权限,如果有则调用表管理模块请求相应表获取对应的锁
拿到打开表之后,会根据表相关的meta数据,判断标的存储引擎类型,根据相关的类型转发给相关的存储引擎。
当一个query或者command完成后,控制权会传给连接管理模块。并将返回结果或者错误信息返回给连接
在这之间,如果数据发生了变化,则日志处理模块也会生成binlog
各个模块的操作都十分以来内部API

相关连接

MySQL 系统架构 说明 https://blog.csdn.net/tianlesoftware/article/details/7029112