MySQL架构

MySQL架构

一、MySQL架构

  • 连接器——管理连接、权限认证
  • 分析器——词法分析、语法分析(AST)抽象语法树
  • 优化器——执行计划、索引选择
  • 执行器——操作引擎、返回结果
  • 存储引擎——存储数据,提供读写接口

8.0版本之后,舍弃了查询缓存功能

二、连接器

连接器负责跟客户端建立连接,以获得权限、维持和管理连接

  • 用户名密码验证
  • 查询权限信息、分配对应权限
  • 可以使用show processlist查看现在连接
  • 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时

连接分类:

  • 长连接:建议
  • 短连接

三、查询缓存

查询语句的时候,先去查询缓存查看结果,8.0后没有这个组件

不推荐理由:

  • 查询缓存失效比较频繁,只要表更新,缓存就会清空
  • 缓存对应更新数据命中率比较低

四、分析器

  • 词法分析:MySQL需要把输入字符串进行识别
  • 语法分析:根据语法规则判断SQL是否满足mysql的语法,如果不符合就会报错“You have an error in your SQL synta”

五、优化器

  • 在具体执行SQL语句之前要经过优化器进行处理
    • 当表中有多个索引,决定使用哪个索引
    • 当需要多表关联,决定表的连接顺序...等
  • 不同的执行方式对SQL语句执行效率影响很大
    • CBO(Cost-Based Optimization):基于成本的优化
    • RBO(Rule-Based Optimization):基于规则的优化
日志系统
5.1.Redo log——innodb存储引擎的日志文件

发生数据修改的时候,innodb会先卸载redo log中,并更新内存,此时更新完成,redo日志是固定大小的,是循环写的过程

事务中就是通过redo log进行书写的

5.2.Undo log——操作数据,先将数据备份

进行修改数据,先进行备份,之后可以再次进行

5.3.binlog——记录是逻辑日志

可备份逻辑日志

binlog是server层的日志,主要做mysql功能层面的事
与redo日志区别:
- 1.redo是innodb独有的, binlog是所有引擎都可以用的
- 2.redo是物理日志,记录在某页做了什么修改,binlog是逻辑日志,记录是这个语句的原始逻辑
- 3.redo是循环写的,空间是用完,binlog是可以追加的,不会覆盖之前的日志信息
原文地址:https://www.cnblogs.com/littlepage/p/11878149.html