[MySQL] MySQL逻辑架构
6.1 SQL执行过程 https://xiaolincoding.com/mysql/base/how_select.html#mysql-%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84 MySQL架构分为两层:server层和存储引擎层 Server层负责建立连接、分析和执行SQL MySQL大多数核心功能模块都在这里:连接器、查询缓存、解析器、预处理器、优化器、执行器等 还有所有的内置函数 所有跨存储引擎的功能 存储引擎层负责数据的存储和提取 支持InnoDB、MyISAM、Memory等多个存储引擎 6.1.1 连接器 MySQL是基于TCP协议进行传输的,所以在连接MySQL的时候需要先进行TCP三次握手,在命令行使用命令进行连接 mysql -h $ip -u$user -p 用户通过用户密码成功连接后,连接器会获取用户的权限,然后保存起来,在后续的此连接的任何操作,都会基于连接开始的时候读取到的权限逻辑进行判断 建立连接后,即使修改了该用户的权限,也不影响已连接的权限。只有新建的连接才会有新的权限设置 6.1.1.1 查看MySQL服务的客户端连接 可以执行show processlist 命令进行查看 6.1.1.2 空闲连接会一直占着 不会,MySQL定义了空闲连接的最大空闲时长,由wait_timeout 参数控制,默认值是8小时,超过这个时间,连接器就会把这个连接断开 使用命令可以查看该值 show variables like 'wait_timeout'; 可以手动断开空闲的连接,使用的是 kill connection + id 当空闲的连接被服务端主动断开后,这个客户端并不会马上知道,等到客户端在发起下一个请求时,才会收到报错 “ERROR 2013 (HY000): Lost connection to MySQL server during query” 6.1.1.3 MySQL的连接限制 MySQL服务支持的最大连接数由max_connections 参数控制 show variables like 'max_connections'; MySQL的连接跟HTTP一样,有短连接和长连接的概念 // 短连接 连接 mysql 服务(TCP 三次握手) 执行sql 断开 mysql 服务(TCP 四次挥手) // 长连接 连接 mysql 服务(TCP 三次握手) 执行sql 执行sql 执行sql .... 断开 mysql 服务(TCP 四次挥手) 一般推荐长连接,但是使用长连接可能会占用内存增多,因为_MySQL在执行查询过程中临时使用内存管理连接对象__,_只有在连接断开的时候才会释放 ...