MySql的内部组件
- mysql内部分为客户端,server层和引擎层,具体关系及作用如图
-
Server层
主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
Store层
存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,目前是默认存储引擎。
各组件作用
连接器
各种客户端工具都可以连接MySql服务器进行数据操作,但是都需要进行连接建立后才可以进行操作
- 连接器就负责多个客户端的连接工作以及客户端的权限管理
- 一个用户在连接使用的过程中权限被修改是不能立即生效的,只有再断开重新连接是校验权限后才会生效
- 用户权限表在user表中
- wait_timeout默认8小时
Mysql在执行过程中临时使用的内存是管理在连接对象里面的,需要连接对象断开才能释放资源,长连接对象长期累积就会导致内存占用太大,被系统强行kill掉,表面看就是MySql重启
select语句执行时会先在查询缓存中看看之前有没有执行过相同语句,有的话会从缓存取结果
- 缓存中存的是sql语句和结果的key-value对
-
分析器
词法分析,将sql关键字和表名和条件等信息分析出来
- 语法分析,分析sql语句是否符合要求,sql不对的话会返回语法问题
- 语义分析
- 构造执行树
- 生成执行计划
-
优化器
优化器根据sql语句查询条件确定使用哪个索引
多表连接时确定表的连接顺序,使用小表驱动大表,表数据少的过滤出来再去表数据量大的表查询数据过滤
执行器
sql语句执行前先查询对表有没有权限,有权限才可以继续执行
-
bin-log
bin-log是用来记录sql执行逻辑,会记录表的创建,更新,删除操作
- bin-log在MySql的server层实现(引擎层也会用到)
- bin-log是逻辑日志,记录一条sql语句原始逻辑
- bin-log不会限制大小,日志追加写入,不会覆盖之前逻辑
- 在my.cnf文件可以配置bin-log文件
- 在误删数据之后可以通过bin-log恢复数据
- binlog里的内容不具备可读性,所以需要我们自己去判断恢复的逻辑点位,怎么观察呢?看重点信息,比如begin,commit这种关键词信息,只要在binlog当中看到了,你就可以理解为begin-commit之间的信息是一个完整的事务逻辑,然后再根据位置position判断恢复
