接收客户端的连接处理,认证授权能查看哪些数据库哪些表能进行哪些操作,安全方案,是否超过最大连接数等等。服务器也会为安全接入的每个客户端验证它具有的操作权限。
绝大部分核心功能都是在服务层完成的,sql接口、解析器、查询优化器、缓存都是在服务层完成的
真正的负责MySQL数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎功能不同,这样可以根据不同的需求选择合适的存储引擎。存储引擎是可插拔式的,可以扩展。索引是在存储引擎实现的,不同的存储引擎索引结果是不同的。InnoDB是MySQL 5.5之后默认的存储引擎
用来存储数据库的相关数据的,并完成与存储引擎的交互。数据库的数据最后是存储在磁盘当中的,包含一列的日志、数据、索引、二进制、错误日志、慢查询日志等
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
不同的存储引擎数据存储、索引建立、更新、查询方式不同。一个库的不同表可以使用不同存储引擎。
MySQL 5.5之后默认的是InnoDB。
SHOW ENGINES;
Engine:有哪些存储引擎
Support:是否支持
Comment:注释
Transactions:是否支持事务
XA:是否支持XA协议
Savepoints:是否支持保存点
是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后是默认的存储引擎
1)DML(sql的增删改)操作遵循ACID(事务的4大特性)模型,支持事务;
2)行级锁,提高并发访问性能
3)支持外键约束,保证数据的完整性和正确性
格式xxx.ibd,xxx代表的表名,InnoDB引擎的每张表都会有这样的表空间文件,存储该表的表结构(frm、sdi数据字典)、数据和索引。
在8.0 之前InnoDB存储表的结构和数据时,分别存储在frm文件和ibd文件。而在8的时候全都存到了ibd文件里,8.0之后表结构存储在sdi数据字典当中,sdi文件又融入到了ibd文件。
参数:innodb_file_per_table 决定是否每个表一个表空间还是共用表空间。mysql 8.0后打开的代表每个表对应一个表空间。
查询sql:
SHOW VARIABLES LIKE 'innodb_file_per_table'
1)组成:
(1)TableSpace:表空间(idb文件)
(2)Segment:段
(3)Extent:区
(4)Page:页
(5)row:行
2)关系:
一个表空间包含多个段,一个段有多个区,一个区有多个页(如数据页、索引页),一个页有多个行(行就是表结构中一行一行的数据),一行包含最后一次操作的事务的id、指针、字段。
InnoDB的逻辑当中Page页是磁盘操作的最小单元,一个区的大小是固定的1M,一个页的大小也是固定的16K,所以一个区可以包含64个页。
是MySQL早期默认的存储引擎
1)不支持事务、不支持外键
2)支持表锁,不支持行锁
3)访问速度快
1 )xxx.MYD:存放的表中的数据
2 ) xxx.MYI:存放的索引
3 ) xxx.sdi:存放的表结构信息(可以直接查看存储的JSON格式)
表数据存放在内存当中的,由于受到硬件、断点问题的影响,只能将这些表作为临时表或缓存使用。
1)存在在内存中的
2)hash索引(默认)
xxx.sdi :存储表结构信息
存储引擎没有好坏之分,在合适的情况下选择合适的存储引擎
是MySQL默认的存储引擎,支持事务、行锁、外键。例如对事务的完整性较高、并发情况下一致性较高适合
如果以读取和插入为主,只有少量的更新、删除操作,对完整性、并发性要求不高适合(如日志、电商的足迹、评论,实际工作中 用NoSQL mongodb )
所有数据存放在内存中,访问速度快,适用于临时表和缓存。太大的表无法存入内存中而且安全没有保障。(内存和磁盘不一样,磁盘可以存储T级别甚至更多的,但是内存不同,代价很大。实际工作中使用NoSQL Redis)