MySQL总体分为客户端、服务端、存储引擎三层,整体架构图如下所示:
连接器
连接器的主要职责是建立连接、获取权限、维持和管理连接。
MySQL客户端连接到服务端时,会用客户端传来的账号、密码进行鉴权,如果账号密码有问题,这是会提示连接失败,如果账号密码没问题,连接器会用这个账号去权限表查询权限,这个连接后续处理都以这是查询到的权限为准,如果后续这个账号权限改了,这个连接使用的权限也不会改。
MySQL默认使用长连接,一个连接如果长时间没有使用,连接器会把这个连接断开,默认时间是8小时。
MySQL在执行过程中临时使用的内存都是管理在连接里面的,如果一个连接长期不释放,就会导致使用的内存越来越多,可能会导致MySQL异常重启,为了解决这个问题可以定期重连连接或者重制连接。
缓存
MySQL服务端有一个缓存模块,如果MySQL启动了缓存模块,执行查询语句的时候,就会到缓存模块查询是否有值,缓存模块的值是以key、value形式存储的,key是查询语句,value是对应的值。
只要有一个对表的更新操作缓存模块的数据就会被清除,所以更新频繁的表不适合使用这个功能,不能提高查询效率反而会提高开销。
分析器
分析器会对执行的SQL语句进行词法分析和语法分析。
词法分析会把SQL语句里字符串识别成对应表名和字段名。
语ad8法分析会根据词法分析的结果判断SQL语句语法是否符合预期。
优化器
优化器的作用主要有两个:
- 如果一条语句命中多条索引,决定使用哪个索引
- 一个语句有多表关联的时候,决定各个表的连接顺序
执行器
执行器会对SQL语句做出真正的执行,执行器会调用存储引擎提供的API进行数据操作。
在执行器执行SQL语句前,执行器会进行鉴权,判断当前用户是否有权限操作SQL语句要操作的表。
存储引擎
存储引擎层提供多种引擎让用户使用,常见的如InnoDB、MyISAM、Archive、Memory等存储引擎。
现在接触和使用最多的是InnoDB,InnoDB现在是MySQL默认存储引擎,具有一些很强大的功能可以满足我们日常的使用,比如索引、事务、行锁等功能,存储引擎这部分内容比较多,后续分多个文章总结这几个功能的实现原理。