目录

 mysql概述

 mysql架构逻辑

 版本信息对比


mysql概述

     和其他的数据库相比,mysql有点与众不同,它的架构可以再多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难,mysql并不完美,却足够灵活,能够适用高要求的环境,例如web类应用。同时,mysql既可以嵌入到应用的程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事物处理系统等各种应用类型。
其中mysql最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离,这种处理和存储分离的设计可以再使用时根据性能、特性,以及其他需求来选择数据存储的方式。

mysql架构逻辑

架构不匹配如何解决 架构对比_mysql

上面是mysql服务器逻辑架构图,mysql架构抽象划分为3层。

最上层的服务并不是mysql所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构,比如连接处理、授权认证、安全等等。

第二层架构师mysql比较有意思的部分,大多数mysql的核心服务功能都在这一层。包括查询解析、分析、优化、缓存几所有的内置函数(例如,日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

第三层包含了存储引擎。存储引擎负责mysql中的数据存储和提取。不同存储引擎都有其优势和劣势,服务器通过API与存储引擎进行通信。

  • 连接管理与安全性

每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的现场中执行,该线程只能轮流在某个cpu核心或者cpu中运行。服务器胡负责缓存线程,因此不需要为每一个新建的连接创建或者销毁线程。

当客户端连接到mysql服务器时,服务器需要对其进行认证。认证基于用户名,原始主机信息和密码。

  • 优化与执行

mysql会解析查询,并创建内部数据结构,然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。

优化器并不关心表使用的是什么存储引擎,但存储引擎对于查询优化是有影响的。优化器会请求存储引擎提供容量或某个具体操作的开销信息,以及表数据的统计信息等。

对于SELECT语句,在解析查询之前,服务器会优先检查缓存,如果能够在其中找到对应的查询,服务器就不必再执行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的结果集。

版本信息对比

在选择mysql版本的时候,了解版本的变迁历史是有帮助的。

  • 版本3.23(2001)

一版本认为这个版本的发布是MYSQL真正诞生的时刻,其开始获得广泛的应用。在这个版本中一个重要的改进是引入了MyISAM引擎代替了老旧且有足多限制的ISAM引擎。

  • 版本4.0(2003)

支持新的语法,比如UNION和多表DELETE语法。重写了复制,在备库适用了两个线程来实现复制,避免了之前一个线程做所有复制工作的模式下任务切换导致的问题。InnoDB成为标准配备,包括了全部的特性:行级锁、外键等。版本4.0中还引入了查询缓存,同时还支持通过SSL进行连接。

  • 版本4.1(2005)

引入更多新语法,比如子查询,开始支持UTF-8字符集。支持新的二进制协议和prepared语句。

  • 版本5.0(2006)

这个版本出现了一些“企业级”特性:视图、触发器、存储过程和储存函数。老的ISAM引擎的代码被彻底移除,同时引入了新的Federated等引擎。

  • 版本5.1(2008)

这是Sun收购MYSQL以后发布的首个版本,研发时间长达5年。引入了分区、基于行的复制,以及一些引擎选择的优化。

  • 版本5.5(2010)

这是Oracle收购Sun以后发布的首个版本。主要改善集中在性能、扩展性、复制、分区、对微软Windowins系统的支持。InnoDB成为默认的存储引擎,InnoDB在架构方面也做了较大的改进,比如多个字缓存池。

  • 版本5.6(2013)

此版本主要涉及到安全性改进、InnoDB增强功能、表分区增强、 性能架构功能新增、优化器功能增强。

  • 版本5.7(2015)

此版本主要涉及到性能优化、InnoDB 相关改进、新的优化器、多源复制、GIS 相关改进、原生 JSON 支持 。

  • 版本8.0(2021)

此版本合并了一个事务性数据字典,用于存储有关数据库对象的信息;原子DDL语句将数据字典更新,存储引擎操作以及与DDL操作关联的二进制日志写入操作组合到单个原子事务中;对升级程序做了优化;安全性和帐户管理做了增强,以提高安全性并在帐户管理中提供更大的DBA灵活性;InnoDB增强功能; 默认字符集已从更改 latin1utf8mb4; 对MySQL的JSON功能进行了增强;