MySQL 千行核心筆記:從基礎語法到架構設計、優化實戰與避坑指南
這份筆記沉澱自早期 MySQL 學習與生產實戰,雖未持續更新,但覆蓋從安裝部署到高可用架構的核心知識體系,適合系統速查與面試複習。
一、核心知識體系導圖
- 服務管理:啟動/停止、跳過權限登入、進程查看
- 庫/表操作 (DDL):建庫選項、字符集校對、存儲引擎選擇、分區表、表結構變更
- 數據操作 (DML):增刪改查、多表連接、子查詢、UNION、導入導出
- 字符集與校對:多層級設定、客戶端連接三件套、
SET NAMES
- 數據類型選型:整數/浮點/定點、字符/二進制、日期時間、枚舉/集合、IP 存儲最佳實踐
- 約束與範式:PK/UK/FK/NN/Default/AI/Comment、1NF~3NF 範式實踐
- 查詢優化:
EXPLAIN 解讀、索引類型、覆蓋索引、LIMIT 深分頁優化、查詢快取 (舊版)
- 事務與鎖:ACID、隔離級別 (RC/RR)、MVCC、行鎖/表鎖/間隙鎖、死鎖排查
- 視圖/觸發器/存儲程序:安全邊界、業務封裝、
DELIMITER、SIGNAL
- 備份恢復:
mysqldump 邏輯備份、xtrabackup 物理熱備、PITR、GTID 主從
- 高可用架構:MHA、MGR、Orchestrator、ProxySQL、VIP/Keepalived
- 效能調優:InnoDB 參數、慢查詢分析、Schema 設計、硬體規劃
二、高頻實戰金句 (隨時可用)
- 字符集:全鏈路
utf8mb4,連接層 SET NAMES utf8mb4,庫表 CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci。
- 類型選型:
INT UNSIGNED 存 IP,DECIMAL(19,4) 存金額,DATETIME 存業務時間,TIMESTAMP 存修改時間 (自動更新)。
- 索引原則:最左前綴、覆蓋索引、避免函數列、
COUNT(*) 不數列、LIMIT 1 優化存在性檢查。
- 事務隔離:高併發首選 READ COMMITTED + Row Binlog,減少間隙鎖、提升並發。
- 雙一模式:核心庫
innodb_flush_log_at_trx_commit=1, sync_binlog=1,零丟失、零不一致。
- 備份策略:每日全備 + Binlog 增備,定期演練恢復,RTO/RPO 量化指標。
- 大表變更:
pt-online-schema-change / gh-ost 線上無鎖 DDL。
三、避坑清單 (血淚教訓)
| 坑點 | 後果 | 規避 |
utf8` 偽 utf8 | Emoji/生僻字截斷 | 全鏈路 utf8mb4 |
VARCHAR(255)` 盲目用 | 索引長度超限、內存浪費 | 按實際業務長度定義 |
DELETE` 大事務不分批 | Undo Log 爆漲、主從延遲、鎖升級 | 分批 500~1000 行,間隔睡眠 |
SELECT *` 生產用 | 網路/IO 擴大、覆蓋索引失效 | 顯式列出所需列 |
| 隱式類型轉換 | 索引失效、全表掃描 | WHERE 列與參數類型一致 |
從庫 read_only=0 | 誤寫入導致主從不一致 | 強制 read_only=1,僅管理帳號 SUPER 權限可寫 |
無 relay_log_purge=0` 配合 MHA | Relay Log 被清理、差異無法修復 | MHA 環境必開 |
四、進階學習路徑建議
- 官方文檔精讀:InnoDB 架構、鎖機制、優化器、複制協議。
- 源碼級理解:
buf_pool、trx_sys、log_sys 核心模組。
- 工具鏈精通:
pt-toolkit、sys schema、PM2/MySQL Exporter 監控體系。
- 架構演進:單機 → 主從 → MHA → MGR (Group Replication) → 分庫分表/HTAP (TiDB/OceanBase)。
筆記已同步至 GitHub (私有倉庫),持續沉澱中。MySQL 學無止境,願與君共勉。
- 上一篇文章: PL/SQL 條件判斷語句完全指南:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF
- 下一篇文章: MySQL EXPLAIN 執行計劃深度解析:從類型到 Extra 的效能診斷全指南
Copyright ©
程式碼之家 All Rights Reserved