先上图为敬
从图上可以看出,我们是客户端,mysql主要由两个部分组成
1.Server层,其中包含
连接器 负责 管理连接,权限验证
查询缓存 先去缓存中去查找,是否有要查询的结果,如果有的话,直接返回查询结果
分析器 分析传输过来的sql语句,具体是要干什么
优化器 在已有的情况下,选择最优的执行路径
执行器 连接存储引擎,执行语句,返回结果
2.存储引擎 负责数据的存储,以及提供读写接口
存储引擎包含InnoDB、MyISAM、Memory,从MySQL 5.5.5版本开始创建表默认是InnoDB。不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。
首先客户端开始连接数据库,连接器负责和客户建立连接,并且验证客户的权限,维持和管理连接
密码错误的话 会报"Access denied for user"
如果账号密码都验证通过则会,去权限表里边去查,这个用户的权限。之后的一些操作都会根据当前获取到的权限去判断,即使你改了权限,也要重新登陆才会生效。
连接分为长连接和短连接:长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
一般都是长连接,因为建立连接的过程通常是比较复杂的,时间默认8个小时失效
但是全部使用长连接时间设置的比较长的话,内存的占用就会特别快,直到被系统强行杀掉,OOM,现象就是mysqll异常重启了
解决方案有:
1.定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
2.如果是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。
查询过程:
1.客户端通过连接器连接数据库;
2.查看查询缓存中是否存在,已该语句为key的查询缓存,如果有则直接返回结果,如果没有缓存,则进行下一步;
3.