MySQL整体结构概述

本文介绍了MySQL的整体结构,重点讲解了Server层的连接器,包括连接池的概念、权限管理、连接超时以及长连接与短连接的影响。还提到了解析器、优化器和执行器的作用,以及MySQL中的权限验证和存储引擎的预览。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、MySQL整体结构概述 之Server层

文章非原创,属于对以往学习到的知识的归纳总结,文中可能存在大段截取其他文章的片段,博客属于自我学习的笔记总结会持续更新。。。
在这里插入图片描述

1.MYSQL连接池(连接器)
在我们的JAVA项目中会使用连接池管理MYSQL驱动创建多个数据库连接,供多线程并发使用。 常见是数据库连接池有DBCP 、C3P0、Druid等,同样MYSQL数据库其实也会使用一个连接池(连接器)管理与JAVA项目的连接。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的:

mysql -h$ip -P$port -u$user -p

连接命令中的mysql是客户端工具,用来跟服务端建立连接。在完成经典的TCP握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。这就意味着,一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在show processlist命令中看到它。文本中这个图是show processlist的结果,其中的Command列显示为“Sleep”的行,就表示现在系统里面有空闲连接。
在这里插入图片描述
客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数wait_timeout控制的,默认值是8小时。
数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
建立连接的过程通常是比较复杂的,所以建议在使用中要尽量减少建立连接的动作,尽量使用长接。
但是全部使用长连接后,有些时候MySQL占用内存涨得特别快,这是因为MySQL在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是MySQL异常重启了。
解决这个问题可以考虑以下两种方案。

  • 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
  • 如果你用的是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行
    mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

2.缓存
其实在service层中还有一个缓存,但是很鸡肋且在mysql8.0已经把这部分整体删除了。缓存顾名思义就是将你之前查询的结果记录采用kv 键值对的方式缓存起来供你下次查询时使用,看似可以提高效率,但是在实际开发中热数据的缓存是没用的,数据一直在变,缓存的数据还没有用就已经失效了。频繁的创建/清除缓存,会带来很多的资源消耗。缓存只适用权限 配置之类不会频繁变动的数据。(我个人觉得没有意义就不展开说了,但是在mysql 的配置文件中可以根据自己的喜好开启关闭缓存。)

3.解析器
在MySQL中获取到的sql都会先交给解析进行词法分析,它需要先识别一条sql中的各个字符串是什么代表什么,知道该条sql是打算干什么(增,删,改,查?)后,再根据语法规则进行语法分析,判断该条sql是否满足mysql的语法规则,如果语法不对就会收到"You have an error in your SQL syntax”的错误提醒。一般情况下都会提醒第一个错误出现的位置,所以看报错信息的时候要注意"use near"之后的内容 比如:
在这里插入图片描述
4.优化器
通过解析器,知道要做什么之后,再由优化器从多个索引中选择合适的索引,或者sql语句存在多表关联时确定各表的连接顺序。同一条sql 其实存在多种执行方案,优化器就是需要从中选出效率最高的方案。
5.执行器
优化器确定最优方案之后,生成一个执行计划,然后由执行器根据计划调用存储引擎的接口按照一定的顺序和步骤,就把SQL语句的逻辑给执行了。其实在执行之前还会走一步权限验证,有权限就打开表进行操作,没有就返回。

下一篇介绍:二、MySQL整体概述 之存储引擎
(笔记我放在为知笔记爸爸请打钱 【狗头】)上的,上传后,我再回来加个连接。机(ma)智(de)如(zhi)我(zhang)!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值