MySQL基本架构

149 阅读2分钟

MySQL 架构

MySQL的体系架构图,如下:

image.png

从上面的 MySQL 架构图来看,我们可以了解到 MySQL 的架构自上向下大致可以分为网络连接层、数据库服务层、存储引擎层和系统文件层四大部分

网络连接层

网络连接层负责处理客户端连接请求、身份认证和安全验证。提供了与 MySQL 服务器建立连接的能力,支持很多主流的语言,例如:Java、Python ... ,各语言都是通过各自的 API 接口与 MySQL 建立连接并操作

数据库服务层

数据库服务层负责 SQL 语句的解析、优化、执行和结果返回

  • SQL接口组件

    • 接收 SQL 请求
    • 返回查询结果
  • 解析器(Parser)

    • 词法分析:将 SQL 语句分解为标记
    • 语法分析:检查 SQL 语法正确性
    • 生成解析树
  • 优化器(Optimizer)

    • 基于成本的优化器(CBO)
    • 查询重写
    • 执行计划生成(EXPLAIN可查看)
    • 索引选择
    • 连接顺序优化
  • 查询执行引擎

    • 执行优化器生成的计划
    • 与存储引擎交互获取数据
  • 缓存管理(MySQL 8.0前)

    • 查询缓存
    • 结果集缓存
  • 内置函数与存储过程

    • 数学函数
    • 字符串函数
    • 日期函数
    • 存储过程/函数执行引擎

存储引擎层

存储引擎层负责数据的存储和提取,是MySQL的"插件式"架构核心

  • InnoDB(默认引擎)

    • 支持ACID事务
    • 行级锁定
    • 外键约束
    • MVCC(多版本并发控制)
    • 聚簇索引
    • 崩溃恢复能力
  • MyISAM

    • 表级锁定
    • 全文索引
    • 较高的读取性能
    • 不支持事务
  • Memory

    • 内存表
    • 哈希索引
    • 临时表实现
  • 其他引擎

    • Archive:高压缩比归档存储
    • CSV:CSV格式存储
    • NDB:集群引擎
    • Federated:远程表访问

系统文件层

系统文件层数据持久化存储,日志记录和系统维护

  • 数据文件

    • InnoDB:

      • .ibd文件(每表单独表空间)
      • ibdata1(系统表空间)
    • MyISAM:

      • .MYD(数据文件)
      • .MYI(索引文件)
      • .frm(表结构定义,8.0后移除)
  • 日志文件

    • 重做日志(redo log):

      • ib_logfile0, ib_logfile1
      • 保证事务持久性
      • 循环写入
    • 二进制日志(binlog):

      • mysql-bin.000001等

      • 用于复制和时间点恢复

      • 三种格式:STATEMENT/ROW/MIXED

      • undo日志:

      • 存储在系统表空间或独立undo表空间

      • 实现事务回滚和MVCC

      • 错误日志:记录启动、运行、停止时的错误信息

      • 慢查询日志:记录执行时间超过阈值的查询

      • 通用查询日志:记录所有收到的查询

  • 配置文件

    • my.cnf(Linux)或 my.ini(Windows)
    • 包含服务器参数配置
  • 其他文件

    • 进程ID文件(.pid)
    • socket文件(Linux环境)
    • 临时文件(排序、分组等操作使用)