• 数据库实例的定义:一个 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 层实际有一个缓冲区,并不是得到一条就发送给客户端
    • 查看当前服务端支持的存储引擎
      • image.png
        • Support 是否支持
        • DEFAULT 当前默认的存储引擎
        • Comment 存储引擎描述
        • Transactions 是否支持事务
        • XA 是否支持分布式事务
        • Savepoints 是否支持事务的部分回滚