MySQL架构
1 目录结构
这里是linux平台下的。
目录 | 功能 | |
---|---|---|
1 | /var/lib/mysql | 数据库文件的存放路径 |
2 | /usr/bin | mysql命令所在的目录 |
3 | /etc/my.cnf | 配置文件,相当于Windows系统中的my.ini |
4 | /usr/share/mysql-8.0 | MySQL其它配置文件所在的目录 |
2 配置文件
说明:[client]是客户端配置1,[server]是mysql服务器配置,[mysqld]是启动配置
参数名称 | 说明 |
---|---|
port | 表示 MySQL 服务器的端口号 |
basedir | 表示 MySQL 的安装路径 |
datadir | 表示 MySQL 数据文件的存储位置,也是数据表的存放位置 |
default-character-set | 表示服务器端默认的字符集 |
default-storage-engine | 创建数据表时,默认使用的存储引擎 |
sql-mode | 表示 SQL 模式的参数,通过这个参数可以设置检验 SQL 语句的严格程度 |
max_connections | 表示允许同时访问 MySQL 服务器的最大连接数。其中一个连接是保留的,留给管理员专用的 |
query_cache_size | 表示查询时的缓存大小,缓存中可以存储以前通过 |
table_open_cache | 表示所有进程打开表的总数 |
tmp_table_size | 表示内存中每个临时表允许的最大大小 |
thread_cache_size | 表示缓存的最大线程数 |
myisam_max_sort_file_size | 表示 MySQL 重建索引时所允许的最大临时文件的大小 |
myisam_sort_buffer_size | 表示重建索引时的缓存大小 |
key_buffer_size | 表示关键词的缓存大小 |
read_buffer_size | 表示 MyISAM 表全表扫描的缓存大小 |
read_rnd_buffer_size | 表示将排序好的数据存入该缓存中 |
sort_buffer_size | 表示用于排序的缓存大小 |
3 逻辑架构
3.1 服务器处理客户端请求
特点:MySQL是的C/S模式。
流程2:客户端建立连接后,发送请求后。MySQL服务器对请求进行解析优化,调用存储引擎对物理存储进行查找(先加载到缓存中,在缓存中查找)。
MySQL8.0基础框架
组件 | 说明 |
---|---|
基础服务组件 | 完成基础服务 |
连接池 | 包括TCP连接池和线程池。前者是服务器与客户端的连接,后者是完成SQL操作的线程。 |
SQL接口 | 接收SQL指令返回结果。类似于后端接口,本身没处理SQL逻辑,只是接口 |
解析器 | 对SQL进行解析,生成语法树 |
优化器 | 对SQL进行优化,采用选取,投影。连接的方式优化。 |
引擎 | 与底层文件交互 |
数据库三个层次:连接层(连接池),服务层(SQL接口,解析器,优化器),引擎层(存储引擎)。
3.2 SQL执行流程
set @@profiling=1;#记录执行流程
show profiels;#显示执行的语句
show profile for Query num;#查看第num条语句执行流程
5.3.3 缓冲池
说明:将外存数据部分加载到内存中,加快查询速度。在内存中称为缓冲池。
原则:使用频率高,就把相应数据加载到缓冲池中。使用的策略和操作系统中的页机制类似。
特点:
- 提前读(局部性原理)
- 延后写
4 存储引擎
定义:存储引擎指的是表的类型。接收上层的指令,对表中的数据进行操作。系统默认为innodb引擎。可以修改。
4.1 InnoDB
特点:
- 支持外键、事务
- 更新和删除效率高
- 适合大量数据,高并发(行级锁)
- 写的效率低,内存要求高(一起存储索引和数据)
4.2 MyISAM
特点:
- 表级锁,不支持事务、外键
- 查询增加速度快
- 索引和数据分开存,内存要求低
- 适合少量数据