Mysql三层架构
连接层(Connector Layer)
这一层负责处理客户端与MySQL服务器的网络连接、身份认证和权限安全。
功能:
1、连接管理:负责监听端口(默认3306),管理客户端(如Java应用程序、命令行工具)发起的连接。它使用线程池技术来处理高并发连接请求。
2、身份认证:当客户端尝试连接时,验证用户名、密码以及来源主机IP的合法性。
3、权限获取:一旦认证成功,连接层会获取该用户所拥有的权限。之后,这个连接中的所有操作权限判断都将依赖于此时读到的权限。
服务层(MySQL Server Layer)【核心】
这是MySQL的“大脑”,负责大部分核心服务功能的指挥和调度。绝大多数跨存储引擎的功能都在这一层实现。
功能:
1、SQL接口(SQL Interface):接收客户端发送的SQL命令(如SELECT, INSERT, UPDATE, DELETE等),并将执行结果返回给客户端。
2、分析器(Parser):对SQL语句进行词法分析(识别每个单词是什么)和语法分析(检查SQL语句是否符合MySQL的语法规则)。如果语句有语法错误,就是在这里报错。
3、优化器(Optimizer):这是非常核心的组件。它对SQL语句进行“优化”,包括:决定使用哪个索引。在多表关联(JOIN)时,决定各个表的连接顺序。将SQL语句重写为更高效的执行方式。最终,它会生成一个被认为是成本最低的执行计划。
4、执行器(Executor):根据优化器生成的执行计划,调用存储引擎层提供的接口来执行查询。
5、查询缓存(Query Cache):注意:在MySQL 8.0中,此功能已被完全移除。 在旧版本中,它缓存SELECT语句及其结果集。如果后续有完全相同的查询,会直接返回缓存的结果。
存储引擎层(Pluggable Storage Engines)
这一层负责数据的存储和提取。它是插件式的,意味着你可以根据不同的需求为不同的表选择不同的存储引擎。
特点:
1、可插拔:MySQL支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。
2、API接口:服务层通过定义好的一套API与存储引擎交互,屏蔽了不同存储引擎的实现差异。
常见引擎
InnoDB:MySQL 5.5.5之后的默认存储引擎,支持事务、行级锁、外键,是大多数场景下的首选。
MyISAM:MySQL 5.5.5之前的默认引擎,不支持事务和行级锁(只有表锁),但访问速度快。适用于只读或读多写少的场景。
Memory:将所有数据存储在内存中,速度极快,但服务器重启后数据会丢失。适用于临时表或缓存。
这个三层架构,特别是服务层与存储引擎层分离的设计,是MySQL具有高度灵活性和可扩展性的关键原因。我们之前讨论的binlog属于服务层,而 redo log则属于InnoDB存储引擎层,正是这个架构的完美体现。
