mysql逻辑结构和物理结构分析

1.首先,通过一张图来看mysql的整体逻辑架构图:

mysql逻辑架构图
下面对图中几个部分进行说明:
连接/线程处理:处理用户的连接请求、管理连接池,用户名密码验证,权限校验等。(要操作数据库,首先肯定需要建立与数据库的连接)
查询缓存:mysql会将sql和对应返回值缓存起来,一个新的查询请求到来,首先会去缓存里面获取,有就直接返回了。(当有增删改时会删除缓存)
解析器:对sql语句进行词法解析(将mysql关键字和列、条件等区分开)和语法解析(验证sql语法是否符合SQL92标准)
优化器:优化sql语句,生成执行计划(是否用索引,用什么索引,where条件的执行顺序等)
其实下面还有个执行器:通过上步的生成执行计划,调用存储引擎。
存储引擎:具体的和磁盘打交道,进行数据的增删改查。

2.下面我们来看物理结构:

mysql的物理结构主要分为:日志文件,和数据文件。
linux系统,mysql的默认配置文件目录是:/etc/my.cnf
打开配置文件,里面有个配置:datadir=/var/lib/mysql ,表示mysql数据存放目录。
来看我的mysql目录(/var/lib/mysql)有哪些文件:

在这里插入图片描述
在了解日志文件前我们先来了解一下顺序IO和随机IO的区别:
顺序IO:物理上是一块连续的存储空间,在进行顺序追加内容时,效率非常高。(mysql的日志文件就是顺序IO
随机IO :从逻辑上看是连续的,物理上不是连续的,在对内容进行操作时,每次都需要找到文件在磁盘的位置(寻道时间消耗),mysql的数据文件就是随机IO.

为什么日志文件用顺序IO,而数据文件用随机IO呢?
因为日志文件插入后就不会去修改删除了(除非整个文件删除),并且日志文件的效率直接决定mysql的处理效率;而数据文件本身就可能经常修改,删除,所以即使开始分配的是连续的存储地址,在经过多次操作后也会变成随机IO.

2.1日志文件类型

(可用通过命令**show variables like ‘log_%’**看你的那些日志是开启了的):
因为我数据库是默认配置,好多日志没开,所以这没有。
错误日志(err log):记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。
二进制日志(bin log):记录了数据库所有的ddl语句和dml语句,但不包括select语句内容.该日志还用于mysql主从复制和数据恢复(默认是关闭的,需要通过配置:log-bin=mysql-bin进行开启,mysql-bin的意思是bin日志文件的前缀)。
通用查询日志(general query log):记录用户的所有操作,其中还包含增删查改等信息(除了调试,建议不要开启查询日志。)
慢查询日志(slow query log):记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句(默认是关闭的。需要通过设置:slow_query_log=ON进行开启)
事务日志(redo /undo log):事务日志(InnoDB特有的日志),入上图文件名为"ib_logfile0"和“ib_logfile1”。
中继日志(relay log):是在主从复制环境中产生的日志。主要作用是为了从机可以从中继日志中获取到主机同步过来的SQL语句,然后执行到从机中。

2.2 数据文件类型

可通过命令SHOW VARIABLES LIKE ‘%datadir%’;查看数据文件,结合上图看
innoDB存储引擎:
.frm :主要存放与表相关的数据信息,主要包括表结构的定义信息
.ibd:使用独享表空间存储表数据和索引信息,一张表对应一个ibd文件。
ibdata:使用共享表空间存储表数据和索引信息,所有表共同使用一个或者多个ibdata文件。

下面对上图进行说明:
1.ibdata1是共享文件,所有表都使用这个文件
2."ib_logfile0"和“ib_logfile1”是事务日志文件
3.vhr是个数据库文件夹,
看看vhr内容:
在这里插入图片描述
里面每个表都有一个.frm文件存表定义信息
每个表都有.ibd文件,存数据和索引信息。(也就是说innodb表数据和索引存在同一个文件

3.下面看看innoDB和MyIsam区别:
               Innodb                                    Myisam
存储文件    .frm 表定义文件 .ibd 数据文件和索引文件  .frm 表定义文件 .myd 数据文件 .myi 索引文件
    锁            表锁,行锁                                   表锁
   事务            ACID                                     不支持
   CRDU          读、写                                      读多
  count             扫表                                专门有存储的地方
  索引结构        B+ Tree                                   B+ Tree
发布了42 篇原创文章 · 获赞 29 · 访问量 2552

猜你喜欢

转载自blog.csdn.net/qq_32314335/article/details/90176042