目录
[MySQL的客户端 ------ mysql](#MySQL的客户端 —— mysql)
[MySQL的服务端 ------ mysqld](#MySQL的服务端 —— mysqld)
1.什么是MySQL数据库
众所周知,数据库的作用是用来存储数据的,但是在数据库被发明出来之前,人们是依靠文件来存储数据,相信你也有这样的疑问,存储数据用文件不是挺好的吗,为什么还要有数据库呢?
因为,我们把数据存储起来,并不单单是为了存储数据,更重要的是,我们还需要使用数据,对数据做必要的增、删、改、查;一般的文件确实提供了数据的存储功能,但是并没有提供非常好的数据管理能力,使用文件存储数据有以下几个缺点
- 数据的安全性难以保证
- 不利于数据的查询和管理
- 使用程序操作文件不便
这就要求有一种新的 能够存储数据的 并且还具有对数据的管理能力的事物来解决文件的这个短板,于是,计算机的大佬们设计出了更加利于管理数据的东西 ------ 数据库。
那数据库是什么呢?数据库就是一种提供数据存储能力的文件,有自己的格式,能够让 mysqld 这样的服务直接进行增删查改,同时,数据库也提供了一套数据存储方案。
而MySQL数据库就是数据库的一种具体实现,是一种具体的存储解决方案。
2.MySQL数据库的设计
MySQL的进一步认识
前面说了MySQL数据库是一套具体的存储解决方案,那这套存储解决方案是如何设计的呢?
我们可以使用 netstat -ltp 命令查看一下系统中运行的网络服务,列出所有处于监听状态的TCP端口以及每个端口上运行的程序名称和进程PID
我们可以看到 mysql 居然位列其中,说明MySQL是一种网络程序 ,也就是说,MySQL被设计成了一套网络服务程序。
网络程序往往都具有客户端程序 和 服务器端程序,MySQL也不例外,MySQL的客户端程序是 mysql ,MySQL的服务器端程序是 mysqld; 我们可以使用 which 命令查看MySQL 客户端程序 和 服务器端程序 所在的路径
所以我们可以进一步认识MySQL,MySQL的本质是一套基于CS模式的,提供数据存取服务的网络程序。
MySQL的客户端 ------ mysql
MySQL的客户端是连接MySQL服务器并进行数据库操作的工具 。这些客户端可以是命令行界面 (CLI)的,也可以是图形用户界面(GUI)的;用户可以通过 mysql 向MySQL服务端 发送SQL语句(一种操作数据库的语言),进而来操作数据库,对数据库进行管理。 用户上层只需要输入SQL语句,MySQL的服务端会执行相应的语句,实现用户想要的结果。
MySQL的服务端 ------ mysqld
MySQL的服务端负责处理客户端的连接请求、执行SQL语句、管理数据库文件和数据等任务。
服务端必须要能够为客户端提供良好稳定的运行服务,这就要求服务端的设计足够优秀、足够合理;因此,MySQL的服务端被设计成了四个层次,分别是连接层、服务层、存储引擎层、文件系统层,这四层统称为MySQL数据库的架构。
3.MySQL数据库的架构
MySQL架构图
连接层
功能 :连接层是MySQL架构中的最外层,负责处理客户端与MySQL服务器之间的连接和通信。它主要负责监听客户端的连接请求,进行权限验证,并维持和管理连接。(解决安全和链接管理)
组件:
- Connectors:MySQL为各种编程语言提供了访问接口(如JDBC),通过这些接口,客户端程序可以连接到MySQL服务器。
- 连接池(Connection Pool):为了提高性能和响应速度,MySQL实现了连接池机制。连接池可以复用已经创建的数据库连接,减少创建和销毁连接的开销。同时,连接池还可以限制同时存在的连接数,避免服务器资源耗尽。
服务层
功能 :服务层是MySQL架构中的核心部分,负责处理来自客户端的SQL请求,包括SQL解析、优化、缓存以及执行等。(词法语法分析。做词法语法分析,以及sql语句的优化)
组件:
- SQL Interface:是整个数据系统与用户进行交互的关键部分,负责接收并处理用户的SQL命令。
- Parser(语法分析器):将用户输入的SQL命令转换成MySQL内部可以理解的指令,并进行词法分析和语法分析,最终生成一棵解析树。
- Optimizer(查询优化器):根据解析树生成最优的执行计划,包括选择合适的索引、确定连接顺序等,以提高查询性能。
- Cache & Buffers(缓存):在较早的MySQL版本中,存在查询缓存机制,用于缓存查询结果以提高查询性能。但从MySQL 8.0开始,查询缓存被删除,因为维护缓存的开销可能大于其带来的性能提升。此外,MySQL还包含其他类型的缓存,如表缓存、索引缓存等。
- 执行器:根据优化器生成的执行计划,调用存储引擎提供的API来执行SQL语句,并返回查询结果给客户端。
MySQL架构中的这一层的工作有些类似于编译器的工作,只是解析和优化语句,并不直径执行用户输入的语句。
存储引擎层
功能 :存储引擎层负责数据的存储和提取,是MySQL架构中最底层也是最重要的部分之一。MySQL支持多种存储引擎,每种存储引擎都有其特点和适用场景。帮我们完成具体的数据存储方案。(这一层才是真正干活的)
组件:
- InnoDB :MySQL的默认存储引擎,支持事务处理、行级锁定和外键等高级数据库功能。
- MyISAM:早期MySQL的默认存储引擎,但不支持事务处理,主要面向读密集型应
- Memory:将数据存储在内存中,访问速度极快,但重启数据库后数据会丢失。
- 其他存储引擎如Archive、Federated、CSV等,分别适用于不同的应用场景
文件系统层
功能:虽然文件系统层不直接体现在MySQL的官方架构图中,但它是存储引擎层与底层硬件之间的桥梁。文件系统层包含了MySQL的数据文件和日志文件等,是数据存储和访问的物理基础。
4.MySQL的存储引擎
认识存储引擎
MySQL的四层模型中,除了存储引擎层,其他三层都好理解。要想理解存储引擎,先要理解什么是引擎。
引擎二字的理解可以类比于汽车的发动机,发动机是用来驱动汽车进行运转的,MySQL的存储引擎也扮演着类似的角色。MySQL的存储引擎用来驱动这个数据库系统进行运转,它是数据库系统中负责数据存储、处理、保护和查询的核心组件,决定了数据库提供的功能、性能和特性。通过选择合适的存储引擎,可以优化数据库的性能和满足特定的应用需求。
具体来说,存储引擎是数据库中负责数据存储、处理、保护和查询的底层软件组织。它决定了数据库如何存储数据、如何为这些数据建立索引、以及如何进行数据的更新和查询等操作。不同的存储引擎采用不同的技术和方法来实现这些功能,因此它们提供的性能、功能和支持的特性也会有所不同。
在MySQL等数据库管理系统中,存储引擎是基于表的,而不是基于数据库的。这意味着在同一个数据库中,可以为不同的表选择不同的存储引擎,以满足不同的应用需求。例如,InnoDB存储引擎支持事务处理、行级锁定和外键约束等高级数据库功能,适合需要高可靠性和高性能的在线事务处理(OLTP)应用;而MyISAM存储引擎则提供了快速的读写速度和全文索引功能,适合以查询和插入操作为主的应用场景。
总结:存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL中的存储引擎
我们可以通过 show engines 在MySQL中查看存储引擎的种类。
可以看出MySQL支持多种存储引擎,这也是MySQL数据库的核心;其中默认的存储引擎是 InnoDB。