
◆ 博主名称: 小此方-CSDN博客 大家好,欢迎来到小此方的博客。
⭐️Linux系列个人专栏: 【主题曲】Mysql
⭐️此方的GitHub: github_此方
⭐️ Re系列专栏:我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)
文章目录
- 概要&序論
- [一、 MySQL 网络服务与架构本质](#一、 MySQL 网络服务与架构本质)
-
- [1.1 初识 MySQL:它不只是一个孤立的软件](#1.1 初识 MySQL:它不只是一个孤立的软件)
- [1.2 经典的 MySQL 登录选项拆解](#1.2 经典的 MySQL 登录选项拆解)
- [二、 "数据库"概念](#二、 “数据库”概念)
-
- [2.1 什么是数据库?从狭义到广义的演变](#2.1 什么是数据库?从狭义到广义的演变)
- [2.2 为什么有了"文件系统"还需要"数据库"?](#2.2 为什么有了“文件系统”还需要“数据库”?)
-
- [2.2.1 功能差异的根本对比](#2.2.1 功能差异的根本对比)
- 2.2.2传统使用文件保存数据通常存在的缺点
- [2.2.3 数据库在 Linux 底层的具象化表现](#2.2.3 数据库在 Linux 底层的具象化表现)
- 2.3服务器数据库与表的关系
- 2.4主流数据库
- [三、 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 运行的简化流程)
- 四、周边问题解答
-
- [4.1 SQL分类](#4.1 SQL分类)
- 4.2存储引擎
- [4.3 Windows上的服务器管理](#4.3 Windows上的服务器管理)
概要&序論
Hello大家好,我是此方。本文聚焦 MySQL 基础与底层架构演进,打通从网络连接到磁盘存储的核心链路。
- 网络服务与登录:拆解 MySQL 客户端与服务器交互本质及核心登录选项;
- 数据库本质:对比文件系统,解构 Linux 底层数据具象化表现及"服务器-数据库-表"三层关系;
- 逻辑架构分层:详解连接池、服务层、可插拔存储引擎层与文件系统层的协同机制;
- 引擎与运行流程:剖析插件式存储引擎技术,还原一条 SQL 运行的简化生命周期;
- 周边基础:梳理 DDL、DML、DQL、DCL 语言分类与 Windows 服务管理。
好的,我们直接开始。
一、 MySQL 网络服务与架构本质
1.1 初识 MySQL:它不只是一个孤立的软件
对于习惯了编写本地 C++ 程序的开发者来说,文件读写通常是通过 ifstream 和 ofstream 直接在磁盘上进行的。然而 MySQL 的本质完全不同:MySQL 本质上是一套给我们提供数据存取服务的网络程序 。
在 Linux 操作系统中,我们可以通过经典的 C/S网络模型来透视 MySQL。当你安装并运行 MySQL 时,系统底层实际上运行着两个不同的可执行程序:
mysql:数据库服务的客户端 。它通常位于/bin/mysql,负责接收用户的命令并将其打包发送给服务端。mysqld:数据库服务的服务端 (其中的 'd' 代表 daemon,即守护进程)。它通常位于/usr/sbin/mysqld,常驻后台监听网络端口,是真正负责操作底层数据的核心网络服务。

通过 Linux 的 ps 命令可以清晰地看到 mysqld 守护进程在后台的运行状态,而使用 ss 或 netstat 工具则能发现它正基于 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
- DML中又单独分了一个DQL ,数据查询语言,代表指令:
- 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!