图文解说:MySQL核心模块知识和流程

更多经常内容关注公zhong号:小白的大数据之旅

Mysql内部有哪些核心模块组成,作用是什么?

MySQL的内部核心模块主要包括以下几个部分,各自承担着不同的作用,让我们根据下图来分析一下:

Connectors(客户端)

MySQL服务器之外的客户端程序,与具体的语言相关,例如Java中的JDBC,图形用户界面SQLyog等。本质上都是在TCP连接上通过MySQL协议和MySQL服务器进行通信。

MySQL Server(服务器)

第一层:连接层

连接层主要负责处理客户端的连接请求,包括连接处理、身份验证以及安全性等。它是MySQL与客户端进行交互的入口,确保只有经过认证的客户端才能访问数据库。

  • 系统(客户端)访问 MySQL 服务器前,做的第一件事就是建立 TCP 连接
  • 经过三次握手建立连接成功后, MySQL 服务器对 TCP 传输过来的账号密码做身份认证、权限获取
    • 用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行
    • 用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限
  • TCP 连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去走后面的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。

核心服务层(Server层/SQL Layer)

连接管理器

负责处理客户端的连接请求,包括连接认证和授权。当客户端尝试连接到MySQL服务器时,连接管理器会验证客户端的身份,并根据配置决定是否允许连接。

查询缓存(在MySQL 8.0及更高版本中被废弃)

在较早的MySQL版本中,查询缓存用于存储已经执行过的查询及其结果。如果相同的查询再次被执行,MySQL可以直接从查询缓存中获取结果,从而提高查询效率。然而,由于查询缓存的维护成本较高,且在某些情况下可能导致性能下降,因此在MySQL 8.0及更高版本中被废弃。

分析器

负责对SQL语句进行词法分析和语法分析。词法分析主要是提取SQL语句中的关键字和自定义字段,而语法分析则判断SQL语句是否符合MySQL的语法规则。如果语法错误,分析器会返回错误信息。

优化器

在分析器之后发挥作用,它运用各种优化技术来提高查询效率。优化器会根据统计信息和执行成本来选择最优的执行计划,包括选择合适的索引、连接顺序等。执行计划是指导执行器如何执行SQL语句的详细步骤。

执行器

负责将优化后的SQL语句转化为实际的数据库操作。执行器会根据执行计划调用存储引擎的API来执行具体的数据库操作,如插入、更新、删除数据等。执行器还会处理事务的提交和回滚等操作。

服务管理和公共组件

提供了数据备份与恢复、安全组件、主从复制和集群管理、表分区等实用功能。这些功能确保了MySQL数据库的高可用性、数据完整性和安全性。

存储引擎层(引擎层/存储层)

存储引擎层负责数据的存储和提取,是MySQL架构中的底层部分。MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种存储引擎都有自己的优点和缺陷,可以根据不同的应用场景选择合适的存储引擎。

  • InnoDB:MySQL的默认存储引擎,支持事务、外键、行锁等高级特性,适用于需要高并发和数据一致性的应用场景。
  • MyISAM:适用于读操作频繁的场景,但在写操作和事务支持方面不如InnoDB。
  • Memory:将数据存储在内存中,读写速度非常快,但数据在服务器重启时会丢失,适用于临时数据存储的场景。

其他核心模块

除了上述三个主要层次外,MySQL还包括一些其他核心模块,如:

服务器初始化模块:负责在MySQL服务器启动时完成初始化工作,如加载配置文件、分配全局存储缓冲区等。

线程管理器:管理线程的创建、销毁和复用,以减少线程频繁创建和销毁带来的开销。

命令调度器:负责将客户端请求转发给相应的处理模块,如解析器、优化器等。

日志记录模块:负责维护MySQL的日志信息,包括二进制更新日志、命令日志、缓慢查询日志等,用于数据恢复、故障排查等目的。

复制模块:支持MySQL的主从复制功能,实现数据的备份和读写分离。

相关推荐
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_965148117 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl7 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
C++、Java和Python的菜鸟7 小时前
第2章 项目前置课-代码版本控制Git
大数据·elasticsearch·搜索引擎
Sammyyyyy8 小时前
如何在不停项目不停机的情况下切换AI大模型
大数据·人工智能
xfhuangfu8 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT8 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData8 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
circuitsosk8 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
J_bean9 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交