一图搞定MySQL体系架构

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 要了解mysql的运行机制,那么首先要对mysql的体系结构有一定的了解。

mysql体系结构


11.png


由图,可以看出MySQL由一下几部分组成:


连接池组件

管理服务和工具组件

SQL接口组件

查询分析器组件

优化器组件

缓冲(Cache)组件

插件式存储引擎

物理文件

说明:

MySql数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。

需要注意:

存储引擎是基于表的,而不是基于数据库。


基于这样的特性,针对在项目中的业务数据库,大部分由于需要支持事务属性,所以采用的使用InnoDB存储引擎。但是针对那些只读特性的表,我们可以考虑使用MyISAM存储引擎,这样并不会破坏数据库的事务特性。


详细说明


最上层是连接组件。下面服务器是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。


连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。

管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql复制、集群等

SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

查询解析器: SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构)

主要功能:

a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的

b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

查询优化器:查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是**“选取-投影-联接”**策略进行查询。

用一个例子就可以理解: select uid,name from user where gender = 1;

这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤

这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤

将这两个查询条件联接起来生成最终查询结果。


此外查询优化器还能控制一个sql语句查询具体走哪一个索引,自动调整sql语句中where条件的顺序,来满足复合索引最左匹配原则的规则。


缓存器: 查询缓存(MySQL 8.0 版本后移除),如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

通过LRU算法将数据的冷端溢出,未来得及时刷新到磁盘的数据页,叫脏页。

这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等


MySQL 查询不建议使用缓存,因为查询缓存失效在实际业务场景中可能会非常频繁,假如你对一个表更新的话,这个表上的所有的查询缓存都会被清空。

所以,一般在大多数情况下我们都是不推荐去使用查询缓存的。

MySQL 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。


插入式存储引擎 :存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)


物理文件:

物理文件包括:日志文件,数据文件,配置文件,pid文件,socket文件等


一个查询语句的执行流程


说了以上这么多,那么究竟一条 sql 语句是如何执行的呢?其实我们的 sql 可以分为两种,一种是查询,一种是更新(增加,更新,删除)。我们先分析下查询语句,语句如下:


select * from tb_student  A where A.age='18' and A.name=' 张三 ';

结合上面的说明,我们分析下这个语句的执行流程:

1、建立连接

2、调用sql接口

3、鉴权:先检查该语句是否有权限,如果没有权限,直接返回错误信息

4、缓存判断:如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。

5、解析sql语句:

通过分析器进行词法分析,提取 sql 语句的关键元素,比如提取上面这个语句是查询 select,提取需要查询的表名为 tb_student,需要查询所有的列,查询条件是这个表的 id=‘1’。然后判断这个 sql 语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。

6、查询优化对sql语句进行sql

接下来就是优化器进行确定执行方案,上面的 sql 语句,可以有两种执行方案:

a. 先查询学生表中姓名为“张三”的学生,然后判断是否年龄是 18。

b. 先找出学生中年龄 18 岁的学生,然后再查询姓名为“张三”的学生。

那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。确认了执行计划后就准备开始执行了。


7、执行查询,返回结果


物理文件说明


1、日志文件

10.png

error log 错误日志 排错 /var/log/mysqld.log【默认开启】

bin log 二进制日志 备份 增量备份 DDL DML DCL

Relay log 中继日志 复制 接收 replication master

slow log 慢查询日志 调优 查询时间超过指定值


日志文件的默认位置:

Error Log
log-error=/var/log/mysqld.log
Binary Log
log-bin=/var/log/mysql-bin/bin.log

server-id=2 5.7.x版本后

Slow Query Log
slow_query_log=1|0
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3

2、配置文件

/etc/my.cnf—>/etc/mysql/my.cnf—>/usr/etc/my.cnf—> ~/.my.cnf

如果冲突,以最后一个读取的为准

[mysqld]组中包括了mysqld服务启动时的初始化参数

[client]组中包含着客户端工具程序可以读取的参数,此外还有其他针对各个客户端软件的特定参数组等


3、数据文件

1、.frm文件

不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件,与表相关的元数据(meta)信息都存放在此文件中,包括表结构的定义信息等。

2、.MYD文件

myisam存储引擎专用,存放myisam表的数据(data)。每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下

3、.MYI文件

也是myisam存储引擎专用,存放myisam表的索引相关信息。对于myisam存储引擎来说,可以被缓存(cache)的内容主要就是来源于.MYI文件中。

每一个myisam表对应一个.MYI文件,其存放的位置和.frm及.MYD一样

4、.ibd文件和ibdata文件

存放innoDB的数据文件(包括索引)。innoDB存储引擎有两种表空间方式:独享表空间和共享表空间。

独享表空间:使用.ibd文件来存放数据,且每个表一个.ibd文件,文件存放在和myisam数据相同的位置。

共享表空间:使用.ibdata文件,所有表共同使用一个(或多个,自行配置)ibdata文件。


ibdata1:系统表空间(数据文件)undo 段

ib_logfile0 redlog文件 一组

ib_logfile1


db.opt文件 此文件在每一个自建的库里都会有,记录这个库的默认使用的字符集和校验规。


4、pid文件

pid文件是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他Unix/Linux服务端程序一样,它存放着自己的进程id


5、socket文件

socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接mysql.


区分数据库、数据库实例、数据库服务器


数据库(database):

操作系统或存储上的数据文件的集合。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件,不同存储引擎文件类型不同。

更偏向文件的存储方面。

数据库实例(instance)

由后台进程或者线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。

需要注意:数据库实例才是真正操作数据库的。

更偏向应用操作方面。


数据库和数据库实例的关系:

通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库;

但是,在集群环境中存在多个数据库实例共同使用一个数据库。

比如一个数据库里面的表,经过分表策略,可以分散在多个数据库实例中。


数据库实例指的是数据库应用,数据库指的是在数据库实例上面创建的database。

比如在服务器上部署了一个3306端口的mysql应用,那么就是一个数据库实例;

如果继续部署一个3309的mysql应用,那么就是在一个服务上部署了2个msql的实例。

在3306端口的mysql实例上,创建一个名为order的database,就是创建了一个数据库。


数据库服务器(database server)

部署安装数据库实例的服务器。


总结


1、mysql体系结构,主要包括连接池组件、管理服务和工具组件

SQL接口组件、查询分析器组件、优化器组件、缓冲(Cache)组件、插件式存储引擎

物理文件。

2、分析一个查询语句的执行过程:建立连接—》权限校验—》查询缓存—》分析器—》优化器—》权限校验—》执行器—》引擎

3、区分数据库、数据库实例、数据库服务器

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
148 3
Mysql高可用架构方案
|
2月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
139 1
|
3月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
1月前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
【赵渝强老师】MySQL的体系架构
|
20天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
4月前
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
652 3
|
17天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
27天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
42 3
|
1月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####