引言
作者✍️:竹子爱熊猫
无论你是前端还是后端,只要是一个合格的开发者,对于MySQL
这个名词相信都不陌生,MySQL
逐渐成为了最受欢迎的关系型数据库,无论你是大前端,亦或是Java、Go、Python、C/C++、PHP....
等这些语言的程序员,对于MySQL
是必然要掌握的核心技术之一,程序员不能没有MySQL
,就像西方不能失去耶路撒冷一般。
当然,MySQL
也不仅仅是唯一的数据库,与它类似的关系型数据库竞品还有很多,例如Oracle、SQLServer、PostgreSQL、DB2....
,这其中使用最为广泛的是Oracle
,但Oracle
实际上并不怎么受程序员欢迎,或者说Oracle
并不怎么受中小企业的Boss
欢迎,原因嘛大家都清楚,无非因为它收费罢了。
也正是由于
Oracle
收费的原因,才导致MySQL
像如今这么流行,正所谓时势造英雄,MySQL
作为免费的开源数据库,也正是抓住了这个风口,所以才越发流行。对于MySQL
,用一句话形容很贴切:“天不生我MySQL
,编程万古如长夜”。
一、MySQL概述与系列预告
MySQL
数据库是由瑞典的MySQL AB
公司开发的,后面这家企业被Sun
公司收购,最后Sun
公司又被Oracle
以74
亿美元收购,所以本质上MySQL
现在隶属于Oracle
旗下,因此大家也会发现,MySQL
后面的高版本会有收费版出现。
实际上如果
MySQL
没有并入Oracle
的话,是有很大几率问鼎数据库榜首的,造化弄人。
当然,虽然MySQL
出了收费版,但Oracle
也没有赶尽杀绝,而是向MySQL
的用户给出了《十项承诺》[1],所以我们如今依旧可以使用开源版的MySQL
。
不过对于这些理论概念就不过多介绍了,毕竟《全解MySQL专栏》[2]的文章并不打算阐述入门这块的内容,因为对于数据库的基础操作知识相信大家都已具备,而接下来的内容,也包括后续的文章,都会去围绕一些偏进阶方面的技术进行全方位剖析,大体的规划如下:
-
《自顶向下深入剖析MySQL整体架构!》
-
《一条SQL语句从诞生至结束的多姿多彩历程!》
-
《库表设计篇:五大范式、BC范式与反范式详解!》
-
《MySQL索引分类与B+树索引的深入思考与原理剖析》
-
《MySQL-MVVC并发控制与行锁、表锁、间隙锁机制探讨》
-
《MySQL事务篇:ACID原则与事务机制深入剖析》
-
《InnoDB与MyISAM存储引擎的技术内幕》
-
《MySQL日志篇之undo-log、bin-log、redo-log等傻傻分不清!》
-
《MySQL内置函数与常用命令大全!》
-
《SQL优化篇之如何成为一个写SQL的高手!》
-
《单机MySQL索引、表结构优化及激进调优方案详解》
-
《MySQL高可用篇之主备读写分离与数据一致性思考》
-
《MySQL高可用篇之双主双写多活架构剖析!》
-
《MySQL在海量数据下分库分表的正确姿势》
-
《MySQL分库分表之MyCat中间件实战》
-
《MySQL分库分表之Sharding-JDBC实战》
-
《MySQL分库分表后产生的分布式事务问题!》
-
《MySQL慢查询、死锁、数据错乱等线上问题排查指南!》
-
《MySQL8.x新版本的特性及与MySQL5.x版本之间的差异!》
-
......
整个MySQL系列会按上述目录进行全面阐述,但上述目录只是预期规划内容,实际撰写过程中可能会适当调整,但给出的技术点都会事无巨细的讲到,内容只多不少,因此大家感兴趣的话,可以点个关注,由我伴随诸君一同彻底掌握MySQL
数据库。
二、MySQL整体结构浅析
本章作为MySQL
系列的开篇之作,当然也有一定的原因,毕竟只有先对MySQL
的整体架构有了一个宏观的认知,才能更好的理解每个细节点的知识。
MySQL
与我们开发项目时相同,为了能够合理的规划整体架构设计,也会将整个MySQL
服务抽象成几个大的模块,然后在内部进行实现,因此先来看看MySQL
的整体架构,开局先上一张图:
从上往下看,依次会分为网络连接层、系统服务层、存储引擎层、以及文件系统层,往往编写SQL
后,都会遵守着MySQL
的这个架构往下走。
-
连接层:主要是指数据库连接池,会负责处理所有客户端接入的工作。
-
服务层:主要包含
SQL
接口、解析器、优化器以及缓存缓冲区四块区域。 -
存储引擎层:这里是指
MySQL
支持的各大存储引擎,如InnoDB、MyISAM
等。 -
文件系统层:涵盖了所有的日志,以及数据、索引文件,位于系统硬盘上。
OK~,除了上述的四层外,还有客户端,这个客户端可以是各类编程语言,如Java、Go、Python、C/C++、PHP、Node、.Net....
,也可以是一些数据库的可视化软件,例如Navicat、SQLyog
等,也可以是mysql-cli
命令行工具。总之,只要能与MySQL
建立网络连接,都可以被称为是MySQL
的客户端。
MySQL-Server
就是上述图中的那玩意儿,一般来说,客户端负责编写SQL
,而服务端则负责SQL
的执行与数据的存储。
对MySQL
的整体架构有了简单了解后,接下来详细的拆解一下MySQL-Server
的每个层面。
三、网络连接层
在之前的《网络之旅》[3]的文章中&#x