⼀⽂搞懂MySQL体系架构!!
写在前⾯
很多⼩伙伴⼯作很长时间了,对于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服务器建⽴连接的能⼒,⼏乎⽀持所有主流的服务端语⾔,例如:Java、C、C++、Python等,各语⾔都是通过各⾃的API接⼝与MySQL建⽴连接。
数据库服务层
数据库服务层是整个数据库服务器的核⼼,主要包括了系统管理和控制⼯具、连接池、SQL接⼝、解析器、查询优化器和缓存等部分。
连接池
vue中reactive
主要负责存储和管理客户端与数据库的连接信息,连接池⾥的⼀个线程负责管理⼀个客户端到数据库的连接信息。
系统管理和控制⼯具
提供数据库系统的管理和控制功能,例如对数据库中的数据进⾏备份和恢复,保证整个数据库的安全性,提供安全管理,对整个数据库的集进⾏协调和管理等。
SQL接⼝
主要负责接收客户端发送过来的各种SQL命令,并将SQL命令发送到其他部分,并接收其他部分返回的结果数据,将结果数据返回给客户端。
解析树
主要负责对请求的SQL解析成⼀棵“解析树”,然后根据MySQL中的⼀些规则对“解析树”做进⼀步的语法验证,确认其是否合法。
查询优化器
在MySQL中,如果“解析树”通过了解析器的语法检查,此时就会由优化器将其转化为执⾏计划,然后与存储引擎进⾏交互,通过存储引擎与底层的数据⽂件进⾏交互。
缓存
MySQL的缓存是由⼀系列的⼩缓存组成的。例如:MySQL的表缓存,记录缓存,MySQL中的权限缓存,引擎缓存等。MySQL中的缓存能够提⾼数据的查询性能,如果查询的结果能够命中缓存,则MySQL会直接返回缓存中的结果信息。
怎么使用phpstorm写代码
存储引擎层
MySQL中的存储引擎层主要负责数据的写⼊和读取,与底层的⽂件进⾏交互。值得⼀提的是,MySQL中的存储引擎是插件式的,服务器中的查询执⾏引擎通过相关的接⼝与存储引擎进⾏通信,同时,接⼝屏蔽了不同存储引擎之间的差异。MySQL中,最常⽤的存储引擎就是InnoDB和MyISAM。
InnoDB和MyISAM存储引擎需要⼩伙伴们重点掌握,⾼频⾯试考点,也是成为架构师必知必会的内容。
系统⽂件层
系统⽂件层主要包括MySQL中存储数据的底层⽂件,与上层的存储引擎进⾏交互,是⽂件的物理存储层。其存储的⽂件主要有:⽇志⽂件、数据⽂件、配置⽂件、MySQL的进⾏pid⽂件和socket⽂件等。
⽇志⽂件
MySQL中的⽇志主要包括:错误⽇志、通⽤查询⽇志、⼆进制⽇志、慢查询⽇志等。
错误⽇志
主要存储的是MySQL运⾏过程中产⽣的错误信息。可以使⽤下⾯的SQL语句来查看MySQL中的错误⽇志。
show variables like '%log_error%';
通⽤查询⽇志
主要记录MySQL运⾏过程中的⼀般查询信息,可以使⽤下⾯的SQL语句来查看MySQL中的通⽤查询⽇志⽂件。
show variables like '%general%';
⼆进制⽇志
主要记录对MySQL数据库执⾏的插⼊、修改和删除操作,并且也会记录SQL语句执⾏的时间、执⾏的时长,但是⼆进制⽇志不记录select、show等不修改数据库的SQL。主要⽤于恢复数据库的数据和实现MySQL主从复制。
查看⼆进制⽇志是否开启。
show variables like '%log_bin%';
查看⼆进制⽇志的参数
show variables like '%binlog%'
查看⽇志⽂件
show binary logs;
慢查询⽇志
慢查询主要记录的是执⾏时间超过指定时间的SQL语句,这个时间默认是10秒。
查看是否开启慢查询⽇志
show variables like '%slow_query%';
查看慢查询设置的时长
show variables like '%long_query_time%'
python音乐播放器代码
数据⽂件
数据⽂件中主要包括了:db.opt⽂件、frm⽂件、MYD⽂件、MYI⽂件、ibd⽂件、ibdata⽂件、ibdata1⽂件、ib_logfile0和ib_logfile1⽂件等。
db.opt⽂件mysql面试题sql
怎样学习python
主要记录当前数据库使⽤的字符集和检验规则等信息。
frm⽂件
存储数据表的结构信息,主要是数据表相关的元数据信息,包括数据表的表结构定义信息,每张表都会有⼀个frm⽂件。
值得注意的是:MySQL8版本中的innodb存储引擎的表没有frm⽂件。(后⾯专门写⼀些MySQL8新特性的⽂章,从使⽤到底层原理与MySQL5到底有何不同)。
MYD⽂件
MyISAM存储引擎专⽤的⽂件格式,主要存放MyISAM存储引擎数据表中的数据,每张MyISAM存储引擎表对应⼀个.MYD⽂件。
MYI⽂件
MyISAM存储引擎专⽤的⽂件格式,主要存放与MyISAM存储引擎数据表相关的索引信息,每张MyISAM存储引擎表对应⼀个.MYI⽂件。
ibd⽂件
存放Innodb存储引擎的数据⽂件和索引⽂件,主要存放的是独享表空间的数据和索引,每张表对应⼀个.ibd⽂件。
ibdata⽂件
存放Innodb存储引擎的数据⽂件和索引⽂件,主要存放的是共享表空间的数据和索引,所有表共⽤⼀个(或者多个).ibdata⽂件,可以根据配置来指定共⽤的.ibdata⽂件个数。
ibdata1⽂件
MySQL的系统表空间数据⽂件,主要存储MySQL的数据表元数据、Undo⽇志等信息。
ib_logfile0和ib_logfile1⽂件
MySQL数据库中的Redo log⽂件,主要⽤于MySQL实现事务的持久性。如果在某个时间点MySQL发⽣了故障,此时如果有脏页没有写⼊到数据库的ibd⽂件中,在重启MySQL的时候,MySQL会根据Redo Log信息进⾏重做,将写⼊Redo Log并且尚未写⼊数据表的数据进⾏持久化操作。
配置⽂件
⽤于存在MySQL所有的配置信息,在Unix/Linux环境中是my,cnf⽂件,在Windows环境中是my.ini⽂件。
小程序购物商城pid⽂件
pid⽂件是存放MySQL进程运⾏时的进程号的⽂件,主要存在于Unix/Linux环境中,具体的存储⽬录可以在myf或者my.ini⽂件中进⾏配置。
socket⽂件
socket⽂件和pid⽂件⼀样,都是MySQL在Unix/Linux环境中运⾏才会有的⽂件。在Unix/Linux环境中,客户端可以直接通过socket来连接MySQL。
肝不动了,原创不易,⼩伙伴们点个赞,给个在看和转发吧
好了,今天就到这⼉吧,我是冰河,⼤家有啥问题可以在下⽅留⾔,也可以加我:sun_shine_lyz,我拉你进,⼀起交流技术,⼀起进阶,⼀起⽜逼~~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。