当前位置: 首页 > article >正文

图文解说: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的主从复制功能,实现数据的备份和读写分离。


http://www.kler.cn/a/403632.html

相关文章:

  • 知识图谱介绍
  • 【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
  • 在Excel中处理不规范的日期格式数据并判断格式是否正确
  • 移动语义和拷贝语义区别、智能指针
  • 锂电池学习笔记(一) 初识锂电池
  • react中Fragment的使用场景
  • 持续集成与持续部署:CI/CD简介
  • 机器学习—正则化和偏差或方差
  • 网络安全知识点
  • 网络安全服务(Network Security Services, NSS)
  • 重构代码之内联类
  • uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)
  • Selenium + 数据驱动测试:从入门到实战!
  • Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics
  • R语言4.3.0安装教程【附安装包】
  • MySql 日期周处理方式
  • Vue3,将普通的组合式API转换为<script setup>形式
  • 树莓派开发扩展十二 -C#编写客户端控制小车 Xamarin.Forms
  • -bash: ./kafka-topics.sh: No such file or directory--解决方案
  • unittest和pytest
  • 摄像机ISP和DSP的区别?
  • PostgreSQL 单机与集群部署详细教程
  • 基于YOLOv8深度学习的医学影像肝脏肿瘤病症检测与诊断系统(PyQt5界面+数据集+训练代码)
  • HarmonyOS4+NEXT星河版入门与项目实战------Button组件
  • centos7 如何卸载和安装达梦数据库实例
  • Java项目实战II基于Spring Boot的社区医疗综合服务平台的设计与实现(开发文档+数据库+源码)