MySQL数据库体系架构详情

目录
  • 一、mysql体系架构
  • 二、网络连接层
  • 三、数据库服务层
  • 四、连接池
  • 五、系统管理和控制工具
  • 六、sql接口
  • 七、解析树
  • 八、查询优化器
  • 九、缓存
  • 十、存储引擎层
  • 十一、系统文件层
  • 十二、日志文件
    • 1、错误日志
    • 2、通用查询日志
    • 3、二进制日志
    • 4、慢查询日志
  • 十三、数据文件
    • 1、db.opt文件
    • 2、frm文件
    • 3、myd文件
    • 4、myi文件
    • 5、ibd文件
    • 6、ibdata文件
    • 7、ibdata1文件
    • 8、ib_logfile0和ib_logfile1文件
  • 十四、配置文件
    • 1、pid文件
    • 2、socket文件

前言:

很多小伙伴工作很长时间了,对于mysql的掌握程度却仅仅停留在表面的crud,对于mysql深层次的原理和技术知识了解的少之又少,随着工作年限的不断增长,职场竞争力却是不断降低的。很多时候,出去面试时,被面试官吊打的现象成了家常便饭。比如,对于mysql的高频面试题有:

  • 说说mysql中mvcc机制的原理?
  • mysql的事务原理和实现?
  • mysql数据主从复制的原理?
  • mysql底层数据的存储结构?
  • 如何使mysql支持海量数据存储?
  • mysql中的锁机制原理和实现?
  • mysql索引机制?索引中涉及的数据结构和算法?
  • mysql为何使用b+树作为索引结构?
  • b+树可以存放多少数据?
  • 说说mysql中间隙锁的实现原理?
  • innodb引擎为何会崩溃?说说其实现原理?
  • 等等其他一系列高频面试

如果一一列举的话,大概能够列举上百个关于mysql的高频面试题,这些你都会吗?

不仅仅是面试,如果你想从一名底层程序员上升为高级工程师,架构师等,mysql的底层原理和技术是你必须要掌握的。

注:冰河后续会不定时连载mysql底层原理和技术的文章,与小伙伴们一起死磕mysql,将冰河掌握的mysql底层技术分享给大家,在面试时吊打面试官,在工作中吊打其他小伙伴。

一、mysql体系架构

我们先来看看mysql的体系架构图,如下所示。

从mysql的架构图,我们可以看出mysql的架构自顶向下大致可以分为网络连接层、数据库服务层、存储引擎层和系统文件层四大部分。接下来,我们就来简单说说每个部分的组成信息。

二、网络连接层

网络连接层位于整个mysql体系架构的最上层,主要担任客户端连接器的角色。提供与mysql服务器建立连接的能力,几乎支持所有主流的服务端语言,例如:javacc++、python等,各语言都是通过各自的api接口与mysql建立连接。

三、数据库服务层

数据库服务层是整个数据库服务器的核心,主要包括了系统管理和控制工具、连接池、sql接口、解析器、查询优化器和缓存等部分。

四、连接池

主要负责存储和管理客户端与数据库的连接信息,连接池里的一个线程负责管理一个客户端到数据库的连接信息。

五、系统管理和控制工具

提供数据库系统的管理和控制功能,例如对数据库中的数据进行备份和恢复,保证整个数据库的安全性,提供安全管理,对整个数据库的集群进行协调和管理等。

六、sql接口

主要负责接收客户端发送过来的各种sql命令,并将sql命令发送到其他部分,并接收其他部分返回的结果数据,将结果数据返回给客户端。

七、解析树

主要负责对请求的sql解析成一棵“解析树”,然后根据mysql中的一些规则对“解析树”做进一步的语法验证,确认其是否合法。

八、查询优化器

在mysql中,如果“解析树”通过了解析器的语法检查,此时就会由优化器将其转化为执行计划,然后与存储引擎进行交互,通过存储引擎与底层的数据文件进行交互。

九、缓存

mysql的缓存是由一系列的小缓存组成的。例如:mysql的表缓存,记录缓存,mysql中的权限缓存,引擎缓存等。mysql中的缓存能够提高数据的查询性能,如果查询的结果能够命中缓存,则mysql会直接返回缓存中的结果信息。

十、存储引擎层

mysql中的存储引擎层主要负责数据的写入和读取,与底层的文件进行交互。值得一提的是,mysql中的存储引擎是插件式的,服务器中的查询执行引擎通过相关的接口与存储引擎进行通信,同时,接口屏蔽了不同存储引擎之间的差异。mysql中,最常用的存储引擎就是innodb和myisam。

innodb和myisam存储引擎需要小伙伴们重点掌握,高频面试考点,也是成为架构师必知必会的内容

十一、系统文件层

系统文件层主要包括mysql中存储数据的底层文件,与上层的存储引擎进行交互,是文件的物理存储层。其存储的文件主要有:日志文件、数据文件、配置文件、mysql的进行pid文件和socket文件等。

十二、日志文件

mysql中的日志主要包括:错误日志、通用查询日志、二进制日志、慢查询日志等。

1、错误日志

主要存储的是mysql运行过程中产生的错误信息。可以使用下面的sql语句来查看mysql中的错误日志。

show variables like '%log_error%';

2、通用查询日志

主要记录mysql运行过程中的一般查询信息,可以使用下面的sql语句来查看mysql中的通用查询日志文件。

show variables like '%general%';

3、二进制日志

主要记录对mysql数据库执行的插入、修改和删除操作,并且也会记录sql语句执行的时间、执行的时长,但是二进制日志不记录select、show等不修改数据库的sql。主要用于恢复数据库的数据和实现mysql主从复制。

查看二进制日志是否开启。

show variables like '%log_bin%';

查看二进制日志的参数

show variables like '%binlog%'

查看日志文件

show binary logs;

4、慢查询日志

慢查询主要记录的是执行时间超过指定时间的sql语句,这个时间默认是10秒。

查看是否开启慢查询日志

show variables like '%slow_query%';

查看慢查询设置的时长

show variables like '%long_query_time%'

十三、数据文件

数据文件中主要包括了:db.opt文件、frm文件、myd文件、myi文件、ibd文件、ibdata文件、ibdata1文件、ib_logfile0和ib_logfile1文件等。

1、db.opt文件

主要记录当前数据库使用的字符集和检验规则等信息。

2、frm文件

存储数据表的结构信息,主要是数据表相关的元数据信息,包括数据表的表结构定义信息,每张表都会有一个frm文件。

值得注意的是:mysql8版本中的innodb存储引擎的表没有frm文件。(后面专门写一些mysql8新特性的文章,从使用到底层原理与mysql5到底有何不同)。

3、myd文件

myisam存储引擎专用的文件格式,主要存放myisam存储引擎数据表中的数据,每张myisam存储引擎表对应一个.myd文件。

4、myi文件

myisam存储引擎专用的文件格式,主要存放与myisam存储引擎数据表相关的索引信息,每张myisam存储引擎表对应一个.myi文件。

5、ibd文件

存放innodb存储引擎的数据文件和索引文件,主要存放的是独享表空间的数据和索引,每张表对应一个.ibd文件。

6、ibdata文件

存放innodb存储引擎的数据文件和索引文件,主要存放的是共享表空间的数据和索引,所有表共用一个(或者多个).ibdata文件,可以根据配置来指定共用的.ibdata文件个数。

7、ibdata1文件

mysql的系统表空间数据文件,主要存储mysql的数据表元数据、undo日志等信息。

8、ib_logfile0和ib_logfile1文件

mysql数据库中的redo log文件,主要用于mysql实现事务的持久性。如果在某个时间点mysql发生了故障,此时如果有脏页没有写入到数据库的ibd文件中,在重启mysql的时候,mysql会根据redo log信息进行重做,将写入redo log并且尚未写入数据表的数据进行持久化操作。

十四、配置文件

用于存在mysql所有的配置信息,在unix/linux环境中是my,cnf文件,在windows环境中是my.ini文件。

1、pid文件

pid文件是存放mysql进程运行时的进程号的文件,主要存在于unix/linux环境中,具体的存储目录可以在my.cnf或者my.ini文件中进行配置。

2、socket文件

socket文件和pid文件一样,都是mysql在unix/linux环境中运行才会有的文件。在unix/linux环境中,客户端可以直接通过socket来连接mysql。

到此这篇关于mysql体系架构详情的文章就介绍到这了,更多相关mysql体系架构内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐