mysql 的连接器是msyql server层的第一个模块。当我们用mysql 客户端来连接mysql服务器的时候,处理这个连接请求的就是连接器模块。

mysql客户端和服务器端的连接使用的是TCP协议,在完成TCP握手之后,连接器开始进行身份认证。

如果用户名或密码不对,那么连接器会抛出一个 “Access denied for user”的错误,客户端结束执行。

如果用户名密码认证通过,那么连接器会到权限表中查出账号拥有的权限。以后所有的权限判断都是基于此时查出的权限。这意味着,一个用户成功建立连接后,即使root用户修改了这个用户的权限,对之前的连接也不能生效。只有修改之后生成的连接才能获取到新的权限。

连接建立成功后,如果长时间没有操作,连接器会自动断开连接。断开连接的时间是由wait_timeout控制的,默认值是8小时。

如果连接被断开后,客户端再次发生请求,会收到“Lost connection to MySQL server during query”的错误提示。这时候想要执行查询,就需要重连了。

使用show processlist 可以查看系统所有连接的信息。其中Command 列表示 连接的状态,“Sleep” 表示 连接是一个空间的连接,没有进行操作。

mysq的长连接是指连接成功后,客户端有持续的请求,使用的一直是同一个连接。短连接是指每次执行完少量的操作后就断开连接,下次使用在重新建立连接。

因为连接过程比较复杂,所以推荐使用长连接。

但是使用长连接,会存在占用内存大的问题。这是因为在长连接中申请的临时内存会一直存在,只有当连接断开的时候才释放。

解决长连接占用内存大的问题有两个方法 1)定期断开长连接,清楚长连接占用的内存。 2) mysql 5.7 或者更高的版本,可以执行 mysql_reset_connection 来重新初始化连接。这个过程不需要重新建立连接,但是会释放占用的临时内存,将连接恢复到刚刚创立连接的状态。

文章来源于互联网:mysql | 连接器

发表评论