博客 / 詳情

返回

MySQL體系架構 - 簡潔版

MySQL分為四層架構,從上到下依次是:


1. 連接層(Connection Layer)

作用:處理客户端連接和權限驗證

客户端連接 → 連接池 → 權限驗證 → 分配線程

關鍵點

  • 管理連接池
  • 用户認證、權限校驗
  • 線程複用

2. 服務層(Service Layer)- Server層

作用:SQL的核心處理層

包含模塊

  • 查詢緩存:緩存SELECT結果(MySQL 8.0已移除)
  • 解析器:詞法分析、語法分析,檢查SQL是否合法
  • 優化器:選擇最優執行計劃(用哪個索引、表連接順序)
  • 執行器:調用存儲引擎接口執行SQL
SQL → 解析器 → 優化器 → 執行器 → 調用引擎

3. 存儲引擎層(Storage Engine Layer)

作用:真正負責數據的存儲和讀取

常見引擎

  • InnoDB:支持事務、行鎖、外鍵(默認引擎)
  • MyISAM:不支持事務,只有表鎖
  • Memory:數據存內存,速度快但不持久化
-- 查看引擎
SHOW ENGINES;

-- 創建表時指定
CREATE TABLE users (...) ENGINE=InnoDB;

4. 文件系統層(File System Layer)

作用:持久化存儲

包含文件

  • 數據文件.ibd(表數據和索引)
  • 日誌文件:redo log、undo log、binlog
  • 配置文件my.cnf
  • 錯誤日誌、慢查詢日誌等

一條SQL的執行流程

SELECT * FROM users WHERE id = 1 為例:

1. 連接層:驗證權限
   ↓
2. 服務層:
   - 解析器:檢查SQL語法
   - 優化器:決定使用主鍵索引
   - 執行器:調用InnoDB接口
   ↓
3. 存儲引擎層:
   - InnoDB讀取數據頁
   - 返回結果給執行器
   ↓
4. 返回客户端

面試回答模板

簡潔版(30秒):

MySQL分為四層:連接層負責連接管理和權限驗證;服務層是核心,包括解析器、優化器、執行器,處理SQL邏輯;存儲引擎層負責數據存儲,InnoDB支持事務;文件系統層負責持久化。一條SQL從連接驗證→解析優化→執行→引擎讀取數據→返回結果。

詳細版(1分鐘):

MySQL採用分層架構:

  1. 連接層:管理客户端連接池,做權限認證
  2. 服務層:Server層,是SQL處理的核心

    • 解析器做詞法語法分析
    • 優化器選擇最優執行計劃
    • 執行器調用存儲引擎接口
  3. 存儲引擎層:可插拔設計,InnoDB是默認引擎,支持事務、行鎖、MVCC
  4. 文件系統層:數據最終持久化,包括數據文件、redo log、binlog等

這種分層設計實現了存儲引擎可插拔,同一個Server層可以對接不同的引擎。


補充知識點(可能追問)

Q1: 為什麼要分層?

A:職責分離,存儲引擎可插拔,不同業務場景選擇不同引擎

Q2: Server層和引擎層的區別?

A

  • Server層:處理SQL邏輯,所有引擎共享
  • 引擎層:負責數據存儲,不同引擎實現不同

Q3: binlog在哪一層?

A:Server層(所以所有引擎都有binlog)

Q4: redo log在哪一層?

A:存儲引擎層(只有InnoDB有redo log)


架構圖(文字版)

┌─────────────────────────────────────┐
│         客户端(Client)              │
└─────────────────────────────────────┘
                 ↓
┌─────────────────────────────────────┐
│   連接層:連接池、權限驗證            │
└─────────────────────────────────────┘
                 ↓
┌─────────────────────────────────────┐
│   服務層(Server層)                 │
│   ┌──────────────────────────────┐  │
│   │ 解析器 → 優化器 → 執行器      │  │
│   └──────────────────────────────┘  │
│   binlog、慢查詢日誌                │
└─────────────────────────────────────┘
                 ↓
┌─────────────────────────────────────┐
│   存儲引擎層(可插拔)                │
│   InnoDB | MyISAM | Memory          │
│   redo log、undo log                │
└─────────────────────────────────────┘
                 ↓
┌─────────────────────────────────────┐
│   文件系統:數據文件、日誌文件        │
└─────────────────────────────────────┘
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.