- 数据库实例的定义:一个 MySQL 服务端程序进程,这意味着一个电脑上面,可以有多个实例。
- 服务端程序
- 查看服务端程序所在路径:where mysqld
- mysqld 启动一个 MySQL 服务端进程,但这个命令不常用
- mysqld_safe
- 一个启动脚本
- 间接调用 mysqld 并持续监控服务端运行状态
- 服务器进程出现错误时,它还可以帮助重启服务端程序
- 将服务端程序的出错信息和其他诊断信息输出到错误日志
- mysql.server
- 间接调用 mysqld_safe
- 执行 mysql.server start 就可以启动服务端程序了
- 启动客户端
- mysql -h主机名 -u用户名 -p密码
- 可以启动多个客户端,且客户端程序互不影响
- 客户端连接服务端
- 连接管理
- 每当有一个客户端连接到服务器时,服务端会创建一个进程负责与之通信
- 客户端断开连接时,服务端不会理解释放线程,而是缓存起来
- 可以限制连接的客户端数量
- 可以采用传输层安全性协议(Transport Layer, Security, TLS)保证传输安全性
- 服务端接收客户端发送的文本消息
- 优化和解析
- 查询缓存,5.7.20 开始不推荐使用,8.0 直接删除了
- 语法解析
- 服务端分析接收到的文本信息,提取需要的信息,保存到内部使用的一些数据结构上
- 查询优化
- 存储引擎
- 表由一行一行的记录构成,但这只是逻辑上的概念。实际上是存储引擎负责将数据存到物理存储器上,不同的存储引擎管理的表有不同的存储结构,存取算法也可能不同。不过他们都为上层提供了统一的调用接口。
- 连接管理、优化和解析、存储引擎归为 server 层,另外就是存储引擎层
- server 层完成查询优化后,只需要按照生成的执行计划调用底层存储引擎提供的接口,获取到数据后返回给客户端就好了
- server 层和存储引擎交互时,一般是以记录为单位的
- 以 SELECT 语句为例,server 层根据执行计划先向存储引擎取一条记录,然后判断是否符合 WHERE 条件,如果符合就发送给客户端,否则跳过该记录,继续取下一条
- server 层实际有一个缓冲区,并不是得到一条就发送给客户端
- 连接管理
- 查看当前服务端支持的存储引擎

- Support 是否支持
- DEFAULT 当前默认的存储引擎
- Comment 存储引擎描述
- Transactions 是否支持事务
- XA 是否支持分布式事务
- Savepoints 是否支持事务的部分回滚
