Re:Mysql数据库基础篇(二):MySQL 基础指南,架构分层、SQL 分类与引擎解析


◆ 博主名称: 小此方-CSDN博客 大家好,欢迎来到小此方的博客。
⭐️Linux系列个人专栏: 【主题曲】Mysql
⭐️此方的GitHub: github_此方
⭐️ Re系列专栏:我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)


文章目录

  • 概要&序論
  • [一、 MySQL 网络服务与架构本质](#一、 MySQL 网络服务与架构本质)
    • [1.1 初识 MySQL:它不只是一个孤立的软件](#1.1 初识 MySQL:它不只是一个孤立的软件)
    • [1.2 经典的 MySQL 登录选项拆解](#1.2 经典的 MySQL 登录选项拆解)
  • [二、 "数据库"概念](#二、 “数据库”概念)
  • [三、 MySQL 的逻辑架构演进](#三、 MySQL 的逻辑架构演进)
    • [3.1 架构各分层职责详解](#3.1 架构各分层职责详解)
      • [3.1.1 连接池层 (Connection Pool)](#3.1.1 连接池层 (Connection Pool))
      • [3.1.2 服务层 (SQL Interface & Parser & Optimizer & Caches)](#3.1.2 服务层 (SQL Interface & Parser & Optimizer & Caches))
      • [3.1.3 可插拔存储引擎层 (Pluggable Storage Engines)](#3.1.3 可插拔存储引擎层 (Pluggable Storage Engines))
      • [3.1.4 文件系统层 (File System / Logs and Files)](#3.1.4 文件系统层 (File System / Logs and Files))
      • [3.1.5总结一个 SQL 运行的简化流程](#3.1.5总结一个 SQL 运行的简化流程)
  • 四、周边问题解答

概要&序論

  Hello大家好,我是此方。本文聚焦 MySQL 基础与底层架构演进,打通从网络连接到磁盘存储的核心链路。

  • 网络服务与登录:拆解 MySQL 客户端与服务器交互本质及核心登录选项;
  • 数据库本质:对比文件系统,解构 Linux 底层数据具象化表现及"服务器-数据库-表"三层关系;
  • 逻辑架构分层:详解连接池、服务层、可插拔存储引擎层与文件系统层的协同机制;
  • 引擎与运行流程:剖析插件式存储引擎技术,还原一条 SQL 运行的简化生命周期;
  • 周边基础:梳理 DDL、DML、DQL、DCL 语言分类与 Windows 服务管理。

好的,我们直接开始。

一、 MySQL 网络服务与架构本质

1.1 初识 MySQL:它不只是一个孤立的软件

  对于习惯了编写本地 C++ 程序的开发者来说,文件读写通常是通过 ifstreamofstream 直接在磁盘上进行的。然而 MySQL 的本质完全不同:MySQL 本质上是一套给我们提供数据存取服务的网络程序

  在 Linux 操作系统中,我们可以通过经典的 C/S网络模型来透视 MySQL。当你安装并运行 MySQL 时,系统底层实际上运行着两个不同的可执行程序:

  • mysql :数据库服务的客户端 。它通常位于 /bin/mysql,负责接收用户的命令并将其打包发送给服务端。
  • mysqld :数据库服务的服务端 (其中的 'd' 代表 daemon,即守护进程)。它通常位于 /usr/sbin/mysqld,常驻后台监听网络端口,是真正负责操作底层数据的核心网络服务。

  通过 Linux 的 ps 命令可以清晰地看到 mysqld 守护进程在后台的运行状态,而使用 ssnetstat 工具则能发现它正基于 TCP 协议 监听特定的网络端口:

bash 复制代码
[root@bite-alicloud ~]# ps axj | grep mysqld
    1 13349 13348 13348 ?           -1 Sl     27   0:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
[root@bite-alicloud ~]# ss -nltp | grep mysqld
tcp6       0      0 :::3306                 :::* LISTEN      13349/mysqld

数据库不是所有程序员必备的东西,但是,对于后端程序员会接触到。至少,你得知道最基础的操作。

1.2 经典的 MySQL 登录选项拆解

  当我们在 Linux 终端中尝试连接数据库时,通常会输入一条登录命令。由于 MySQL 是标准的网络服务,这些复杂的参数本质上就是网络套接字连接的配置项

bash 复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p
选项/参数 含义 示例值 说明
mysql 客户端工具 - 启动 MySQL 命令行客户端的命令。
-h Host(主机) 127.0.0.1 指定要连接的 MySQL 服务器的 IP 地址(此处为本地环回地址)。如果不带 -h,默认连接本地服务。
-P Port(端口) 3306 指定 MySQL 服务监听的端口号。注意是大写的 P。如果不指定,则默认使用 3306
-u User(用户) root 指定登录数据库所使用的用户名。root 是底层的超级管理员账号。
-p Password(密码) (在下一行输入) 提示系统在按下回车后安全地输入密码(注意是小写的 p,输入时密码在终端是不显示的)。

大小写敏感:注意 -P(大写,代表端口 Port)和 -p(小写,代表密码 Password)的区别,不能混淆。

二、 "数据库"概念

2.1 什么是数据库?从狭义到广义的演变

  日常交流中,我们口中的"数据库"往往指代不同的层级,在技术沉淀中必须将其区分开来:

  • 狭义的数据库(Database) :纯粹指存储数据的集合(即数据库文件) 。它通常以特定的结构组织并存放在磁盘或内存中,在 Linux 底层表现为 /var/lib/mysql 路径下的目录与二进制文件。
  • 广义的数据库(DBMS / 数据库系统) :指"数据库客户端 + 数据库服务端(如 mysqld) + 数据库文件"共同组成的完整存储解决方案。它不仅负责"存"数据,更提供了一套高效、安全管理及存取数据的网络服务。

  从 C++ 程序员的视角来看,整个交互的数据流向可以归纳为以下精简的闭环:

复制代码
[ mysql 客户端 ] -- 1. 提出需求 (SQL) --> [ mysqld 服务端 ] -- 2. 按照要求操作文件 (加载/获取) --> [ 磁盘数据文件 ]
[ mysql 客户端 ] <-- 4. 返回输出结果 ---- [ mysqld 服务端 ] <-- 3. 从文件获取结果 ------------------------- [ 磁盘数据文件 ]

2.2 为什么有了"文件系统"还需要"数据库"?

  普通的 Linux 文件确实提供了数据的存储功能,但从用户和程序员的角度来看,文件系统并没有提供高效的数据管理能力。

2.2.1 功能差异的根本对比

  • 普通文件 :操作系统(OS)只帮我们支持了最基本的存储、读取和写入操作。如果没有数据库,程序员如果想在文件里筛选某个字段、修改某条特定记录、或者进行复杂的增删查改,所有高阶的逻辑、解析、查找算法必须由程序员自己在 C++ 代码中手动实现
  • 数据库系统 :对数据内容存储的一套解决方案。其核心本质在于:"你给我字段或者要求,我直接给你结果就行"。它在文件系统的上层封装了更牛、更强大的增删查改以及字段操作,把程序员从低效的底层文件指针操作中解放了出来。

2.2.2传统使用文件保存数据通常存在的缺点

  • 安全性问题:文件权限管理相对粗糙,容易被误删或非法访问。
  • 查询管理困难:面对复杂查询时,缺乏高效的检索机制。
  • 海量数据限制:难以支撑 GB、TB 级别及以上的大规模数据存储。
  • 程序控制不便:在多线程、多进程并发访问时,在代码中实现锁和同步非常繁琐。

  为了解决上述问题,专家们设计出了数据库 。它能更有效地管理数据,且数据库的水平是衡量一个程序员水平的重要指标

  数据库文件的存储介质:

  • 磁盘(持久化存储,速度相对慢)
  • 内存(临时或高速缓存,速度极快但掉电易失)

2.2.3 数据库在 Linux 底层的具象化表现

  在 Linux 中,我们可以进入 MySQL 的默认数据存放路径(通常由配置文件选定,如 /var/lib/mysql)一探究竟。

  当我们登录 MySQL 并执行 show databases; 时,系统会列出当前所有的数据库。此时如果在 Linux 终端中切换到对应的物理路径查看,你会发现:建立一个数据库,本质上就是在 Linux 底层创建了一个目录;在数据库内建一张表,本质上就是在这个目录下创建了对应的物理文件!

这里提一个小点:数据库的存储逻辑是这种行列式的方式存储的。

  这些底层的物理文件是不允许程序员跨过 mysqld 直接去修改的,必须交由数据库服务端统一调配。

2.3服务器数据库与表的关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序 ,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如下:

2.4主流数据库

数据库名称 开发者/归属 适用场景与主要特点
SQL Server 微软 (Microsoft) 微软的产品,.Net 程序员的最爱,适用于中大型项目。
Oracle 甲骨文 (Oracle) 适合大型项目、复杂的业务逻辑。并发能力一般来说不如 MySQL。
MySQL 甲骨文 (Oracle) 世界上最受欢迎的数据库。并发性好,不适合做复杂的业务;主要用于电商、SNS、论坛,对简单的 SQL 处理效果好。
PostgreSQL 加州大学伯克利分校 加州大学伯克利分校计算机系关系型数据库。不管是私用、商用,还是学术研究使用,都可以免费使用、修改和分发。
SQLite 嵌入式开源社区 一款轻量型的数据库,是遵守 ACID 的关系型数据库管理系统。它包含在一个相对小的 C 库中。设计目标是嵌入式的,目前已经在很多嵌入式产品中使用,占用资源非常低,在嵌入式设备中可能只需要几百 K 的内存就够了。
H2 Java 开源社区 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

三、 MySQL 的逻辑架构演进

  MySQL 之所以能够做到可移植性极高(几乎能在 Linux、Windows、Mac 等所有主流操作系统上运行),并且保证跨平台物理体系结构的一致性,得益于其高度模块化的四层架构设计

3.1 架构各分层职责详解

3.1.1 连接池层 (Connection Pool)

  位于最上层,主要负责构建连接、管理连接。当客户端通过 mysql -h... 发起请求时,该层负责进行连接处理、身份鉴权与安全管理

3.1.2 服务层 (SQL Interface & Parser & Optimizer & Caches)

  这一层是 MySQL 的核心大脑,包含了大部分的核心服务功能:

  • SQL 接口:接受客户端传来的 DML、DDL 以及存储过程、触发器、视图等指令。
  • 解析器 :对输入的 SQL 语句进行词法分析和语法分析,将其分解成一棵"解析树",确保 SQL 语法没有错误。
  • 优化器:对解析后的 SQL 进行重写、优化,决定使用哪个索引、用什么顺序扫描表,从而生成最优的执行计划。
  • 缓存与缓冲:在查询执行前先去查询缓存中匹配结果(注:在较新版本的 MySQL 中查询缓存已被逐步移除,由更高效的缓冲池 Buffer Pool 替代),如果命中则直接返回。

3.1.3 可插拔存储引擎层 (Pluggable Storage Engines)

  这是 MySQL 最具特色的设计。存储引擎是真正执行不同类型文件存储操作的底层负责者。它是可插拔的,意味着你可以根据具体业务场景随时更换。常见的引擎包括:

  • InnoDB:支持事务、行级锁、外键,是当前最主流的事务型存储引擎。
  • MyISAM:具有极高的插入与查询速度,但不支持事务,支持表级锁。
  • Memory:基于内存的存储引擎,读写速度极快,但断电数据易丢失。

3.1.4 文件系统层 (File System / Logs and Files)

  位于最底层,基于操作系统内核的文件系统(如 Linux 的 ext4、XFS 等)来统一完成文件数据的持久化存储。它包含了真实的数据文件、各种日志文件(红队日志 Redo Log、撤销日志 Undo Log、二进制日志 Binlog、错误日志、慢查询日志等)以及索引文件。

3.1.5总结一个 SQL 运行的简化流程

  客户端连接 (Connection Pool) -> 提交 SELECT 语句 (SQL Interface) -> 检查语法 (Parser) -> 制定最优查询方案 (Optimizer) -> 找存储引擎要数据 (Storage Engine) -> 引擎从磁盘或缓存中读取并返回 (File System / Caches)。

四、周边问题解答

4.1 SQL分类

  • DDL【data definition language】数据定义语言,用来维护存储数据的结构
    代表指令:create, drop, alter
  • DML【data manipulation language】数据操纵语言,用来对数据 进行操作
    代表指令:insert, delete, update
    • DML中又单独分了一个DQL ,数据查询语言,代表指令:select
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
    代表指令:grant, revoke, commit

4.2存储引擎

  存储引擎 是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

  MySQL的核心就是插件式存储引擎,支持多种存储引擎。

4.2.1查看存储引擎

复制代码
show engines;
show engines \G;

4.2.2存储引擎对比

4.3 Windows上的服务器管理

  • 执行 win+r 输入 services.msc 打开服务管理器
  • 通过下图左侧停止,暂停,重启动按钮进行服务管理

好的本期内容就到这里,如果对你有帮助,还不要忘记点赞三联支持。我是此方,我们下期再见。bye!

相关推荐
一个儒雅随和的男子1 小时前
深入剖析时序数据库 InfluxDB 核心原理
数据库·时序数据库
Nayxxu1 小时前
GPT API 迁移教程:Chat Completions 到 Responses API 的最小改造路径
数据库·gpt
minji...1 小时前
MySQL数据库 (三) 表的操作(增删查改),库和表的关系
数据库·mysql·数据表
xsc6996751 小时前
Milvus实战:快速上手向量数据库
数据库·milvus
艾莉丝努力练剑1 小时前
【Qt】事件
服务器·开发语言·网络·数据库·qt·tcp/ip·计算机网络
Bert.Cai1 小时前
Oracle简介
数据库·oracle
洛水水1 小时前
图床项目实现:注册登录 + 文件上传等功能的完善
网络·c++·mysql·图床
名不经传的养虾人1 小时前
从0到1:企业级AI项目迭代日记 Vol.41|多租户不是一个功能,是一次手术
服务器·数据库·系统架构·ai编程·ai工作流·企业ai
艾莉丝努力练剑1 小时前
【QT】窗口
运维·网络·数据库·qt·计算机网络·microsoft