MySQL 是客户机-服务器软件: 你敲命令的那个程序(客户端)和真正存数据的程序(服务端 mysqld)不是一个, 中间靠 TCP 3306 说话。 Demo 打出这个沙箱的真话:没有 MySQL 服务端,只有 SQLite 3.53.1。 所以本课把「一条 SQL 要过四站」这件事拆开讲清楚,再逐条对照两种数据库的连接方式。
上一章认了词,这一章认产品。 教材成书于 MySQL 5.x 时代(约 2009 年),所以它讲的工具、版本号、 界面都和现在有距离——这一章会把这层时间差讲明白,免得你照着书去找一个早就下线的软件。 本章不讲 SQL,纯背景。 但它解释了一件后面天天遇到的事:为什么报错信息里会出现「连接」「端口」「服务」这些词。
一、什么是MySQL:两半,不是一半
MySQL 是一个数据库管理系统(DBMS),它的活是替你存数据、查数据。
它和别的软件最大的不同是:它由两个程序组成。
服务端(mysqld):常驻后台,真正管着磁盘上的数据文件。
它监听一个端口(MySQL 默认 3306),等别人来问。
客户端:你手上的那个程序——命令行 mysql、图形工具、或者一段 Python 代码里的连接库。
它负责把 SQL 发过去、把结果接回来。
所以「装 MySQL」严格说是装两样东西,而且它们可以在两台机器上:服务端在机房,
客户端在你笔记本上,中间走网络。这就是为什么 MySQL 天生能多人共用,而 SQLite 不行。
对照一下 SQLite:它没有服务端。库就是一个文件,你的程序直接打开这个文件读写。
好处是零配置、拷一个文件就搬走了;坏处是并发写会排队,也没法多台机器同时用。
一句话记住差别:MySQL 是「打电话点菜」,SQLite 是「自己开冰箱」。
二、版本:教材写的和今天的差了二十年
教材第 2 章讲的版本是 MySQL 4.1、5.0、5.1,还顺带提了 6.0(那个版本最终没有发布)。 这个时间点很重要——书上的安装步骤、默认配置、甚至某些 SQL 语法,都是那个年代的。 今天是 2026 年 10 月,MySQL 的版本线是这样: 8.4 LTS(长期支持,当前 8.4.13)、9.7 LTS(当前 9.7.4)、以及创新版 26.10.0。 从 26.7.0 起,创新版改用日历版本号 YY.M.P: 26 是 2026 年,7 是 7 月,0 是补丁号。LTS 仍用原来的编号(8.4、9.7)。 两条线的分工:LTS 只收安全与 bug 修复、支持周期长,适合生产; 创新版每季度一发、带新功能,适合能跟着升级的场景。选哪个不看新旧,看你能多久升一次。 教材里还有一句「MySQL 有社区版和商业版」——这句今天仍然成立:社区版(GPL)免费,企业版收费、 多监控与支持。书上的判断没过时,只是版本号换了。
三、工具:书里那两个已经没了
教材 2.2 节介绍了三个工具:mysql 命令行实用程序、MySQL Administrator、 MySQL Query Browser。 命令行那个还在,而且一直是主力。它的好处是:不依赖图形界面、能写成脚本、报错原文最完整。 服务器上没有图形界面,出问题时你只有它。 后两个已经停止维护了。它们的功能被 MySQL Workbench 接手——一个软件里同时有建模、SQL 编辑、 服务器管理三块。照着书去官网找 Administrator,是找不到的。这就是读老书必须留神的地方。 今天常用的还有一批第三方客户端(DBeaver、Navicat、DataGrip 之类),以及各语言自己的驱动。 它们都只是「客户端」这一侧的花样,底下发给服务端的还是同一句 SQL。 这给了一个很实用的结论:先把命令行用熟,图形工具随时换。SQL 是慢变量,界面是快变量。
四、小结
教材小结强调的是「MySQL 便宜、快、够用」——这三条今天依然成立,它仍然是 Web 后端最常见的选择之一。 本课再补三条:一是它是两半的软件(客户端 + 服务端),这句话能解释后面九成的环境问题; 二是版本号要按今天的情况理解(8.4 LTS/9.7 LTS/26.x 创新版),书上的 5.x 已经是历史; 三是图形工具会换、SQL 不会换。
五、动手 Demo:把「四站」和「两层的差别」摆出来
这段代码先打出这个沙箱真实的引擎版本(没有 MySQL,只有 SQLite), 再把一条 SQL 从敲下去到出结果经过的四站列成表, 最后逐条对照「同一件事在 MySQL 和 SQLite 里分别怎么写」。 两处都不是我编的:引擎版本是 sys 和 sqlite3 模块给的,端口 3306 是 MySQL 的默认值。
import sqlite3, sys
print("Python", sys.version.split()[0])
print("SQLite", sqlite3.sqlite_version)
# 客户机-服务器:MySQL 是两层,SQLite 是一层
# mysql -h 主机 -u 用户 -p <- 客户端连服务端
# con = sqlite3.connect("x.db") <- 直接开文件
实跑输出:
--------------------------------------------------------------------
第二课:MySQL 到底是什么
--------------------------------------------------------------------
这个沙箱里能连上的数据库引擎是哪一个
项目 值
----------------------------------------------------------
Python 版本 3.13.14
SQLite 引擎版本 3.53.1
MySQL 服务端 没装,也装不了
**所以本课所有 SQL 都跑在 SQLite 上,MySQL 独有的语法会单独标出来。**
客户机-服务器:一条 SQL 从敲下去到出结果,经过几站
站 谁在干 打个比方
----------------------------------------------------------------------------------
1 客户端 mysql 命令行/图形工具 点菜的服务员
2 连接 TCP 3306(MySQL 默认端口) 服务员走向后厨的那道门
3 服务端 mysqld 解析 SQL、查数据 后厨照着单子做菜
4 回传 结果集按行返回 菜端回桌上
**MySQL 是「客户机-服务器」软件:你敲命令的那个程序和真正存数据的程序不是一个。**
SQLite 把这两层压成了一层——库就是一个文件,没有服务端进程。
所以「连上去」在两种数据库里长什么样
动作 MySQL SQLite(本沙箱)
------------------------------------------------------------------------------
连接 mysql -h 主机 -u 用户 -p sqlite3.connect(文件)
断开 exit 或 quit con.close()
看有哪些库 SHOW DATABASES; 换一个文件
选库 USE 库名; 打开文件即选中
多用户 支持,靠账号与权限 没有用户概念
版本号里藏着的两件事
MySQL 的版本号形如 8.0.36:**大版本.小版本.补丁**。
大版本变了(5.7 到 8.0)通常有不兼容改动,小版本是加功能,补丁级只修 bug。
本沙箱的 SQLite 3.53.1:**x.y.z 里 x 变了才有不兼容**。
第一张表先说清一件事:这个沙箱里能连上的数据库引擎只有 SQLite 3.53.1。 MySQL 服务端没装、 也装不了。所以本课所有 SQL 都在 SQLite 上真跑——这是事实,不是替代方案。 第二张表是这一章的核心。 四站:客户端、连接(TCP 3306)、服务端 mysqld、回传结果。 把这条链记住,以后看到「Can't connect to MySQL server」就知道断在第 2 站, 看到「Access denied」就知道断在第 3 站的权限检查,看到查询很慢就知道问题在第 3 站里。 第三张表是两种数据库的对照。 最要紧的一行是「多用户」:MySQL 靠账号和权限管人, SQLite 压根没有用户这个概念——因为库就是你硬盘上的一个文件,谁能读这个文件谁就是管理员。 最后一段讲版本号怎么读。 MySQL 是「大版本.小版本.补丁」, 大版本变才有不兼容(5.7 到 8.0 就踩过不少坑);SQLite 是 x.y.z,x 变才不兼容。 两种读法不一样,别套用。
30 秒实验
- 找一台能上网的机器,装 MySQL 8.4 LTS,然后敲
mysql --version,看你装的到底是哪一条线。 - 把 MySQL 默认端口改成 3307(配置文件里 port 一行),再连一次——不指定端口会怎样报错?
- SQLite 里
SELECT sqlite_version();打出什么?和 Python 里看到的版本号一致吗?
常见误区
- 以为「装了 MySQL」就等于「能连上」。装完还要服务在跑、端口在听、账号能登录。 三步里有一步没做,都是「连不上」。
- 照老教程装 5.x。书上的安装步骤是 2009 年的,今天下 8.4 或 9.7, 安装向导和默认认证方式都变了。版本要对上,步骤才对得上。
- 把客户端工具当数据库。Navicat 卸载了数据还在, mysqld 停了数据也还在——数据在磁盘的数据目录里,不在工具里。
自测三问(点开对答案)
1. MySQL 为什么叫「客户机-服务器」软件? —— 因为它由两个程序组成:服务端的 mysqld 管数据、监听 3306;客户端负责发 SQL 收结果。 两者可以在同一台机器,也可以在两台。 2. SQLite 和 MySQL 最本质的差别在哪一条? —— SQLite 没有服务端进程,库就是一个文件,程序直接读写; MySQL 有服务端,多人多程序通过网络共用同一份数据。 3. 教材提到的 MySQL Administrator 和 Query Browser 现在还能用吗? —— 不能,两个都已停止维护,功能并入了 MySQL Workbench。 命令行工具 mysql 还在,而且是排查问题的首选。知道了它是两半的软件,下一步就是连上去:下一章讲连接、选库、 看表——这三件事是每次开工的前三十秒。
- ☐ (本章完,下一章 第3章 使用MySQL)