MySQL 架构
MySQL架构
- MySQL Connectors:为使⽤MySQL服务的编程语⾔平台,提供了访问接⼝,可以根据⾃⼰实际使⽤的编程语⾔到官⽹下载地址下载。
- MySQL Shell:是⼀个⾼级客⼾端和代码编辑器,以组件的形式提供,需要单独安装。除了提供的类似于 mysql 客⼾端的功能,还可以使⽤ JavaScript 和 Python 调⽤MySQL 的API,⼀般为开发 ⼈员使⽤。
- 连接层:对客⼾端连接进⾏权限校验并保存客⼾端的连接信息,通过池化技术实现线程重⽤,以及根据具体的配置限制连接数量。
- 服务管理和公共组件:提供了数据备份与恢复,安全组件,主从复制和集群管理,表分区等实⽤功能。
- 服务层:提供了NoSQL API, SQL API, SQL语句解析,SQL语句优化,SQL语句缓存等组件,并将优化后的SQL语句发送⾄存储引擎执⾏相应的操作并返回结果。
- 存储引擎层:⼀系列可插拔的存储引擎,主要负责数据的写⼊和读取,与底层的数据和⽇志⽂件进⾏交互,可以根据具体的业务需求选择不同的存储引擎,后⾯我们具体介绍他们之间的区别。
- ⽂件系统层:包含了MySQL发⾏版的⽂件和程序,以及具体数据库⽂件和⽇志。
连接层
网络端口和连接管理线程
[mysqld] # mysqld节点
port=3306 # 端⼝1
port=3307 # 端⼝2
比如,我们设置了 mysqld 服务的端口号为3306和3307,那么我们在启动 mysql 客户端程序的时候就需要向操作系统申请这两个端口号中的一个,进而可以来访问 mysqld 服务。
- 在所有平台上,⽤⼀个管理器线程处理所有的 TCP/IP 连接请求。
- 在 Unix 上,管理器线程还可以处理其他Unix socket 连接请求。
- 在 Windows 上,使⽤⼀个管理器线程处理通过Shared-memory⽅式连接请求,使⽤另⼀个管理器线程处理Named-pipe⽅式连接请求。
- 在所有平台上,可以额外启⽤⼀个端⼝⽤于接受针对管理的 TCP/IP 连接请求,管理端⼝的连接可以使⽤处理"普通" TCP/IP 请求的管理器线程,也可以通过选项⽂件配置单独的线程。
客户端连接线程管理
- 系统变量 thread_cache_size 决定了线程池缓存的⼤⼩。默认情况下,服务器在启动时会⾃动调整这个值,但也可以通过选项⽂件明确指定⼤⼩,值为 0 时禁⽤缓存,此时为每个新连接创建执⾏⼀个线程,并在连接断开时释放
- 有些复杂的SQL语句在执⾏过程中可能会有深层递归从⽽消耗更多的内存,通过设置thread_stack=N 调整线程堆栈⼤⼩
- 要查看缓存中的线程数以及超过缓存数后新创建的线程数,通过状态变量 Threads_cached 和 Threads_created 查看
[mysqld] # mysqld节点
thread_cache_size=16 #线程池⼤⼩
thread_stack=1048576 #堆栈内存⼤⼩
连接量管理
- 系统变量 max_connections 可以控制服务器允许同时连接的最⼤客⼾端数,当服务器达到max_connections 指定的连接数时会拒绝所有新的连接请求,同时会增加状态变量Connection_errors_max_connections 的值
- mysqld实际上允许 max_connections+1 个客⼾端连接。额外的连接为拥有 connection_admin 权限的帐⼾(管理员)使⽤,即使普通连接达到了 max_connections 的数量,管理员也可以连接到服务器进⾏管理操作;
- 在部署为主从复制的环境中,从节点的连接数也会计⼊ max_connections 中,如果连接达到上限主从复制将会失败
- max_connections 具体数据和服务器的硬件有关,⽐如可⽤的内存、每个连接消耗的内存,每个连接的⼯作负载、响应时间、可⽤⽂件描述符的数量等等
服务层
数据库服务层是整个数据库服务器的核⼼,主要包括了服务管理和公共组件、NoSQL和SQL接⼝、解析器、查询优化器和缓存等部分,下⾯我们分别介绍每个部分的作⽤:
服务管理和公共组件
- Backup & Recovery:备份与恢复。MySQL的备份与恢复服务允许用户创建数据库的副本(备份),以便在数据丢失、损坏或意外删除等情况下,可以从备份中还原数据库到之前的某个状态。
- Security:安全。MySQL通过各种机制来确保安全性。这包括用户认证、授权(确定用户对数据库对象,如表格、视图等有哪些操作权限,例如查询、插入、更新、删除等权限)、加密(对敏感数据进行加密存储,使得即使数据被窃取,没有解密密钥也无法获取真实内容)等方面的功能。
- Replication:主从复制。主从复制是一种用于提高数据库可用性、扩展性和数据安全性的技术。在MySQL中,有一个主数据库(Master)和一个或多个从数据库(Slave)。主数据库负责处理所有的写操作(如插入、更新、删除数据等),而从数据库则复制主数据库的数据变化并保持与主数据库的数据一致性。从数据库主要用于读操作,这样可以分担主数据库的读负载,提高整个系统的性能。同时,从数据库也可以作为主数据库的备份,在主数据库出现故障时,可以切换到从数据库继续提供服务。
- Cluster:MySQL集群。MySQL集群是一种将多个MySQL服务器组合在一起,共同提供数据库服务的技术。通过集群,可以实现高可用性(避免单点故障,当某个节点出现问题时,其他节点可以继续提供服务)、可扩展性(可以方便地添加新的节点来处理更多的负载)和高性能(多个节点并行处理数据库操作)等目标。
- Partitioning:表分区。表分区是将一个大的表按照特定的规则分成多个较小的、更易于管理的子表(分区)的技术。例如,可以按照时间(如每月的数据作为一个分区)、范围(如按照数据值的范围划分分区)等方式进行分区。这样做的好处包括提高查询性能(因为可以只查询特定的分区而不是整个大表)、方便数据的管理(如对过期数据的清理可以针对特定分区进行)等。
- Instance Manager:实例管理。MySQL实例是一个独立的数据库管理环境,包括数据库服务器进程、内存结构和存储的数据等。实例管理服务负责管理MySQL实例的启动、停止、配置等操作。
- Administrator:MySQL管理员。MySQL管理员负责整个MySQL数据库系统的管理工作。这包括用户管理(创建、删除用户,设置用户权限等)、数据库维护(如监控数据库的性能、优化数据库结构、处理数据库故障等)、安全管理(确保数据库的安全性,如设置防火墙规则、防止SQL注入攻击等)等多方面的工作。
- Migration Toolkit:迁移⼯具包。在实际应用中,可能需要将数据从一个数据库系统迁移到MySQL,或者在不同版本的MySQL之间进行数据迁移。MySQL的迁移工具包提供了一系列工具和功能来帮助用户顺利完成这些迁移工作。
NoSQL接口与SQL接口
Parser(语法分析器)
- 词法分析,主要是对关键字进⾏提取,⽐如 select/update/delete/create...
- 语法分析,主要判断 SQL 语句是否满⾜语法规则,如果语法错误则异出异常,也就是我们常⻅的ERROR 1064 (42000): You have an error in your SQL syntax。
select sn, name from student where id = 1;
Optimizer(查询优化器)
Caches & Buffers(缓存)
存储引擎
原文地址:https://blog.csdn.net/2301_79881188/article/details/145006654
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!