头图

  对于MySQL来说,虽然经历了多个版本迭代,并且也存在不同的分支。但是MySQL数据库的基础架构基本都是一致的。下图展示了MySQL的体系架构。
在这里插入图片描述
  视频讲解如下:
https://www.bilibili.com/video/BV1zJ4m1M7wX/?aid=1255697780&c...

一、MySQL Server层

  MySQL的Server层主要有以下7个组件:MySQL向外提供的交互接口(Connectors)、连接池组件(Connection Pool)、管理服务组件和工具组件(Management Service & Utilities)、SQL接口组件(SQL Interface)、查询分析器组件(Parser)、优化器组件(Optimizer)和缓存主件(Query Caches & Buffers)。

  下面分别介绍这7个组件的作用。

  • MySQL向外提供的交互接口(Connectors)
      Connectors组件是MySQL向外提供的交互组件,如java,.net,php等语言可以通过该组件来操作SQL语句,实现与SQL的交互。建立连接之后,我们可以通过“show processlist”语句来查看已经建立的连接,如下图所示。
    在这里插入图片描述
  • 连接池组件(Connection Pool)
      负责监听对客户端向MySQL Server端的各种请求,接收请求,转发请求到目标模块。每个成功连接MySQL Server的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL Server端的通信,接收客户端发送的命令,传递服务端的结果信息等。
  • 管理服务组件和工具组件(Management Service & Utilities)
      提供对MySQL的集成管理,如备份(Backup),恢复(Recovery),安全管理(Security)等。
  • SQL接口组件(SQL Interface)
      接收用户SQL命令,如DML,DDL和存储过程等,并将最终结果返回给用户。
  • 查询分析器组件(Parser)
      系统在真正执行输入的语句之前,必须分析出语句想要干嘛?例如:首先通过select关键字得知这是一条查询命令,还包括分析要查询的是哪张表以及查询条件是什么?同时,分析器必须分析输入语句的语法正确性。如果SQL中存在语法的错误,则查询分析器组件将返回下面的信息:

    “You have an error in your SQL syntax”.
  • 优化器组件(Optimizer)
      优化器是MySQL用来对输入的语句在真正执行之前所做的最后一步优化。优化内容包括:是否选择索引?选择哪个索引?多表查询的联合顺序等等。 每一种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。
  • 缓存主件(Query Caches & Buffers)
      这个查询缓存比较好理解。在每一次的查询时,MySQL都先去看看是否命中缓存,命中则直接返回,提高了系统的响应速度。但是这个功能有一个相当大的弊病,那就是一旦这个表中数据发生更改,那么这张表对应的所有缓存都会失效。
      对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非业务系统就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。所以在生产系统中,建议关闭该功能。
      在MySQL 8.0 版本之前,我们可以通过将参数“query_cache_type”设置成 OFF,来关闭查询缓存的功能。但是在MySQL8.0版本之后,直接删掉了这部分的功能。
# 执行下面的语句:
mysql> show variables like '%query_cache%';

# 输出的信息如下:
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | NO    |
+------------------+-------+

# 如果在MySQL 8以前的版本中,输出的信息如下:
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     |
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 1048576 |
| query_cache_type             | OFF     |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+ 

二、MySQL的存储引擎

  MySQL的存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。
  通过“show create table”可以看出创建表时使用的存储引擎。例如下图中的test1表使用的就是InnoDB的存储引擎。
在这里插入图片描述


赵渝强老师
30 声望10 粉丝

20年以上的IT行业从业经历,清华大学计算机软件工程专业毕业,京东大学大数据学院院长,Oracle中国有限公司高级技术顾问;曾在BEA、甲骨文、摩托罗拉等世界500强公司担任高级软件架构师或咨询顾问等要职,精通大...