MySQL 由連接池、管理服務工具、SQL 接口、查詢分析器、優化器、緩衝區、插件式存儲引擎、物理文件組成。獨特的插件式架構使存儲引擎可熱插拔。
默認 7 個後台線程(5.6+ 可配置):
mysql> SHOW VARIABLES LIKE 'innodb_%io%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_read_io_threads | 4 |
| innodb_write_io_threads| 4 |
| innodb_io_capacity | 200 |
| innodb_use_native_aio | ON |
+------------------------+-------+
| 循環 | 觸發條件 | 核心任務 |
|---|---|---|
| Loop (主循環) | 用戶活動頻繁 | 每秒:刷日志、合併 Insert Buffer、刷 100 頁髒頁、無活動切換 Background Loop |
| Background Loop | 無用戶活動 | 刷 100 頁髒頁直到條件滿足、合併 20 個 Insert Buffer、刪除無用 Undo、跳回主循環 |
| Flush Loop | 需大量刷髒頁 | 專注刷新髒頁到磁盤 |
| Suspend Loop | 完全空閒 | 掛起 Master Thread,等待事件喚醒 |
innodb_io_capacity:磁盤 IOPS 吞吐量基準值(默認 200),控制刷髒頁、合併 Insert Buffer 的頁數比例innodb_max_dirty_pages_pct:髒頁比例上限(默認 75%),超過觸發強制刷盤innodb_adaptive_flushing:自適應刷盤,根據 Redo 產生速度動態調整刷頁數頁狀態轉換:Free → Clean (讀入) → Dirty (修改) → Clean (刷盤) → Free (淘汰)
IBUF_POOL_SIZE_PER_MAX_SIZE 調整為 1/3)防止頁寫入失效(Partial Write)導致數據損壞:
公式:恢復數據 = 頁副本 + Redo Log
| 維度 | Redo Log (InnoDB) | Binlog (Server層) |
|---|---|---|
| 記錄範圍 | 僅 InnoDB 事務 | 所有引擎 (MyISAM/InnoDB/...) |
| 記錄內容 | 頁物理修改 | 邏輯 SQL (Statement/Row/Mixed) |
| 寫入時機 | 事務進行中持續寫入 | 事務提交前一次性寫入 |
| 文件特性 | 循環寫入,固定大小 | 追加寫入,無限增長 |
| 用途 | 崩潰恢復 | 主從復制、時間點恢復 |
innodb_fast_shutdown:0(全清理)、1(默認,刷髒頁)、2(僅存日志,啟動時恢復)innodb_force_recovery:0~6 級強制恢復模式,數據損壞時嘗試導出數據