【MySQL】运行原理(一):整体架构

MySQL 的发展历史和版本分支:

时间 里程碑
1996 年 MySQL1.0 发布。它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具。
1996 年 10 月 3.11.1 发布。MySQL 没有 2.x 版本。
2000 年 ISAM 升级成 MyISAM 引擎。MySQL 开源。
2003 年 MySQL4.0 发布,集成 InnoDB 存储引擎
2005 年 MySQL5.0 版本发布,提供了视图、存储过程等功能。
2008 年 MySQLAB 公司被 Sun 公司收购,进入 SunMySQL 时代。
2009 年 Oracle 收购 Sun 公司,进入 OracleMySQL 时代。
2010 年 MySQL5.5 发布,InnoDB 成为默认的存储引擎。
2016 年 MySQL 发布 8.0.0 版本。为什么没有 6、7?5.6 可以当成 6.x,5.7 可以当 成 7.x。

因为 MySQL 是开源的(也有收费版本),所以在 MySQL 稳定版本的基础上也发展出来了很多的分支,就像 Linux 一样,有Ubuntu、RedHat、CentOS、 Fedora 、Debian等等。大家最熟悉的应该是MariaDB,因为CentOS7里面自带了一个MariaDB。它是怎么来的呢?Oracle收购MySQL之后,MySQL创始人之一Monty担心MySQL数据库发展的未来(开发缓慢,封闭,可能会被闭源),就创建了一个分支MariaDB,默认使用全新的Maria存储引擎,它是原MyISAM存储引擎的升级版本。

其他流行分支:

  • Percona Server 是MySQL重要的分支之一,它基于InnoDB存储引擎的基础上,提升了性能和易管理性,最后形成了增强版的XtraDB引擎,可以用来更好地发挥服务器硬件上的性能。
  • 国内也有一些MySQL的分支或者自研的存储引擎,比如网易的InnoSQL,极数云舟的ArkDB。

我们操作数据库有各种各样的方式,比如Linux 系统中的命令行,比如数据库工具Navicat,比如程序,例如Java语言的JDBC API或者ORM框架。但大家有没有思考过,当我们的工具或者程序连接到数据库之后,实际上发生了什么事情?它的内部是怎么工作的?

MySQL架构

基于上面分析的流程,我们一起来梳理一下MySQL的内部模块。

1.模块详解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X8355hj5-1603815339191)(MySQL执行一条SQL的流程.assets/image-20201027175312083.png)]

  1. Connector:用来支持各种语言和SQL的交互,比如PHP,Python,Java的 JDBC
  2. Management Serveices & Utilities:系统管理和控制工具,包括备份恢复、MySQL复制、集群等等
  3. Connection Pool:连接池,管理需要缓冲的资源,包括用户密码权限线程等等
  4. SQL Interface:用来接收用户的SQL命令,返回用户需要的查询结果
  5. Parser:用来解析SQL语句
  6. Optimizer:查询优化器
  7. CacheandBuffer:查询缓存,除了行记录的缓存之外,还有表缓存,Key缓存,权限缓存等等
  8. Pluggable Storage Engines:插件式存储引擎,它提供API给服务层使用,跟具体的文件打交道

2.架构分层

总体上,我们可以把MySQL分成三层,跟客户端对接的连接层,真正执行操作的服务层,和跟硬件打交道的存储引擎层(参考MyBatis:接口、核心、基础)。

  1. 连接层

    我们的客户端要连接到MySQL服务器3306端口,必须要跟服务端建立连接,那么管理所有的连接,验证客户端的身份和权限,这些功能就在连接层完成。

  2. 服务层

    连接层会把SQL语句交给服务层,这里面又包含一系列的流程:比如查询缓存的判断、根据SQL调用相应的接口,对我们的SQL语句进行词法和语法的解析(比如关键字怎么识别,别名怎么识别,语法有没有错误等等)。

    然后就是优化器,MySQL底层会根据一定的规则对我们的 SQL语句进行优化,最后再交给执行器去执行。

  3. 存储引擎

    存储引擎就是我们的数据真正存放的地方,在MySQL里面支持不同的存储引擎。再往下就是内存或者磁盘。

总结脑图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43935927/article/details/113979175