首页 > 数据库 >mysql 基础之连接器

mysql 基础之连接器

时间:2022-11-07 17:24:41浏览次数:37  
标签:mysql 基础 内存 连接器 MySQL 连接 空闲 客户端

连接器

如果你在 Linux 操作系统里要使用 MySQL,那你第一步肯定是要先连接 MySQL 服务,然后才能执行 SQL 语句
连接的过程需要先经过 TCP 三次握手,因为 MySQL 是基于 TCP 协议进行传输的

查看MySQL服务被多少客户端连接

如果你想知道当前 MySQL 服务被多少个客户端连接了,你可以执行 show processlist 命令进行查看。

show processlist

image
比如上图的显示结果,共有两个用户名为 root 的用户连接了 MySQL 服务,其中 id 为 9 的用户的 Command 列的状态为 Sleep ,这意味着该用户连接完 MySQL 服务就没有再执行过任何命令,也就是说这是一个空闲的连接,并且空闲的时长是 8839 秒( Time 列)。

空闲连接会一直占用?

不是,MySQL 定义了空闲连接的最大空闲时长,由 wait_timeout 参数控制的,默认值是 8 小时(28880秒),如果空闲连接超过了这个时间,连接器就会自动将它断开。

show variables like 'wait_timeout';

image
我们自己也可以手动断开空闲的连接,使用的是 kill connection + id 的命令。

kill connection + 9

image
执行后没有这个连接了
image

MySQL 连接数限制

MySQL 服务支持的最大连接数由 max_connections 参数控制,比如我的 MySQL 服务默认是 151 个,超过这个值,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。

show variables like 'max_connections';

image
MySQL 的连接也跟 HTTP 一样,有短连接和长连接的概念
使用长连接的好处就是可以减少建立连接和断开连接的过程,所以一般是推荐使用长连接。
但是,使用长连接后可能会占用内存增多,因为 MySQL 在执行查询过程中临时使用内存管理连接对象,这些连接对象资源只有在连接断开时才会释放。如果长连接累计很多,将导致 MySQL 服务占用内存太大,有可能会被系统强制杀掉,这样会发生 MySQL 服务异常重启的现象。

解决长连接占用内存问题

有两种解决方式。
第一种,定期断开长连接。既然断开连接后就会释放连接占用的内存资源,那么我们可以定期断开长连接。

第二种,客户端主动重置连接。MySQL 5.7 版本实现了 mysql_reset_connection() 函数的接口,注意这是接口函数不是命令,那么当客户端执行了一个很大的操作后,在代码里调用 mysql_reset_connection 函数来重置连接,达到释放内存的效果。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

至此,连接器的工作做完了,简单总结一下:
与客户端进行 TCP 三次握手建立连接;
校验客户端的用户名和密码,如果用户名或密码不对,则会报错;
如果用户名和密码都对了,会读取该用户的权限,然后后面的权限逻辑判断都基于此时读取到的权限;

标签:mysql,基础,内存,连接器,MySQL,连接,空闲,客户端
From: https://www.cnblogs.com/aiverhua/p/16866669.html

相关文章

  • MySQL_存储过程_和函数
    存储过程和函数:类似于Java中的方法 好处:1提高代码的重用性2简化操作3减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 存储过程含义一组预先......
  • MySQL_视图
    含义:(MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果)......
  • canvas-基础(一)
    盲区1:事件绑定: js中的事件绑定可以一次绑定多个事件。比如鼠标移动事件。  事件的移除:需要注意的点就是removeEventListener时,第二个参数需要带上绑定的函数,并......
  • MySQL_事务_回滚
    Savepoint保存点;设置保存点SETautocommit=0;STARTTRANSACTION;DELETEFROMaccountWHEREid=25;SAVEPOINTa;#设置保存点DELETEFROMaccountWHEREid=28......
  • MySQL_变量_系统变量
    说明:变量有系统提供,不是用户定义,属于服务器层面使用的语法:1查看所有的系统变量SHOWGLOBAL|【SESSION】VARIABLES;2查看满足条件的部分系统变量      SH......
  • 爬虫基础
    一.爬虫基础网络爬虫(Crawler)又被称为网页蜘蛛(Spider),网络机器人,它是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本名词解释URL:UniformResourceLocator,即统......
  • MySQL_事务_ACID经典面试题
    事务控制语言事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行(事务是由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语......
  • MySQL_事务_作用
    事务的创建隐式事务      事务没有明显的开启和结束的标记      如:insert、update、delete语句显示事务      事务具有明显的开启和结束标记 ......
  • 基础算法篇——双指针算法
    基础算法篇——双指针算法本次我们介绍基础算法中的双指针算法,我们会从下面几个角度来介绍:双指针简介双指针基本使用最长连续不重复字符列数组元素的目标和判断子序......
  • 【MySQL高级】MySql中常用工具及Mysql 日志
    1.MySql中常用工具1.1mysql该mysql不是指mysql服务,而是指mysql的客户端工具。语法:mysql[options][database]1.1.1连接选项参数:-u,--user=name指......