我所理解的MySQL之一:基础架构

今天 MySQL教程 栏目为大家介绍我所理解的基础架构。 作为一个正经的 CRUD 工程师,与数据库的交互是日常工作中比重较大的内容,比如日常迭代的增删改查、处理历史数据、优化 SQL

今天MySQL教程栏目为大家介绍我所理解的基础架构。

作为一个正经的 CRUD 工程师,与数据库的交互是日常工作中比重较大的内容,比如日常迭代的增删改查、处理历史数据、优化 SQL 性能等等。随着项目数据量的增长,从前为了赶项目进度而埋下的深坑正慢慢显露它们的威力,这也让我不得不全面且深入的学习 MySQL,而不仅仅是停留在基础的 CRUD 上。

MySQL 系列的第一篇,主要介绍 MySQL 的基础架构以及各个组成部分的功能,包括 Server 层的 bin log 和 InnoDB 特有的 redo log 这两种日志模块。

1. MySQL 架构简介

根据 DB-Engines 发布的最受欢迎的数据库管理系统排行榜,MySQL 稳坐第二把交椅。

2020年9月最受欢迎的DBMS排行榜

作为最受欢迎的关系型数据库管理系统之一,MySQL 采用的是C/S架构,即 Client & Server 架构。比如开发者使用 Navicat 连接到 MySQL,那么前者就是客户端,后者就是服务端。

同时,MySQL 也是单进程多线程的数据库。这很好理解,正在运行的 MySQL 实例就是那个“单进程”,而在这个进程中会有很多个线程,比如主线程 Master Thread,IO Thread 等,这些线程被用于处理不同的任务。

2. MySQL 组成部分

前面说到 MySQL 采用的是C/S架构,用户通过客户端连接到 MySQL 服务器,然后提交 SQL 语句到服务器,然后服务器就会把执行结果返回给客服端。

在这一小节的内容中,我们主要关注 MySQL 服务端的逻辑组成,先来看一张图。

MySQL 逻辑架构图

从上图可以看到,与客户端的交互中,MySQL 的服务端分别经过了连接器、查询缓存、分析器、优化器、执行器和存储引擎这几部分。

下面就以一条简单的查询语句来描述 MySQL 服务端的各组成部分及它们所起的作用。

2.1 连接器

在客户端提交查询语句之前,需要与服务端建立连接。所以最先来到的是连接器,连接器的作用就是负责与客户端建立、管理连接,同时查询用户的权限。

需要注意的是: