MySQL 5.7 於 2015 年 GA,引入大量重量級特性,被廣泛認為是「里程碑版本」。本文從五大維度系統梳理核心新特性。
~/.mysql_secret 或錯誤日誌,杜絕空密碼風險。mysql_ssl_rsa_setup 自動生成證書,默認連接加密。ALTER USER 'user'@'host' PASSWORD EXPIRE INTERVAL 90 DAY;ALTER USER 'user'@'host' ACCOUNT LOCK/UNLOCK; 臨時禁用賬戶無需刪除。CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
優勢:
- Server 層提供豐富 JSON 函數 (JSON_EXTRACT, JSON_SET, -> 操作符等)
- 存儲為 BLOB,與存儲引擎無關 (MyISAM/InnoDB 均支持)
- 完勝 MongoDB 兩點:混合存儲結構化+非結構化數據、完整 ACID 事務支持
列值由表達式自動計算:
CREATE TABLE triangle (
sidea DOUBLE,
sideb DOUBLE,
area DOUBLE AS (sidea * sideb / 2) -- VIRTUAL (默認)
);
INSERT INTO triangle(sidea, sideb) VALUES(3, 4);
SELECT * FROM triangle; -- area 自動計算為 6
兩種類型:
| 類型 | 存儲 | 計算時機 | 適用場景 |
|---|---|---|---|
| VIRTUAL | 不存儲,僅元數據 | 讀取時計算 | 頻繁讀、很少寫、表達式簡單 |
| STORED | 持久化到磁盤 | 寫入時計算 | 頻繁讀、表達式複雜、需建索引 |
| 視圖 | 用途 |
|---|---|
sys.schema_redundant_indexes | 發現冗餘索引 |
sys.schema_unused_indexes | 發現未使用索引 |
sys.statements_with_full_table_scans | 全表掃描語句 |
sys.user_summary_by_file_io | 用戶 IO 統計 |
sys.memory_by_thread_by_current_bytes | 線程內存佔用 |
比喻:Performance Schema = /proc,Sys Schema = vmstat。
innodb_buffer_pool_chunk_size (默認 128MB),按塊擴縮容。innodb_buffer_pool_size 必須是 chunk_size × instances 的倍數,否則自動向上取整。ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);基於「臨時表僅當前會話可見、生命週期隨連接結束」特性:
- 引入專用臨時表空間
- DDL 不持久化元數據
- DML 不寫 Redo、關閉 Change Buffer
→ 大幅減少 IO,提升臨時表操作性能。
將 THD/VIO 初始化從接收線程下發到工作線程,減少主線程阻塞,提升短連接吞吐。
核心思想:同一組提交的事務無衝突,可並行回放。
設置:slave_parallel_type = LOGICAL_CLOCK (默認 DATABASE 庫級並行效果有限)。
5.7 並行複製徹底解決複製延遲痛點。
innodb_buffer_pool_size 需按 chunk 對齊,否則實際分配超預期。slave_parallel_type=LOGICAL_CLOCK。sql_mode 包含 ONLY_FULL_GROUP_BY,舊應用可能報錯,需調整。MySQL 5.7 在安全、JSON、Generated Column、Sys Schema、Online DDL、並行複製等方面實現質的飛躍。建議:
1. 直接遷移獲得性能紅利
2. 關注 Buffer Pool chunk 對齊與並行複製模式
3. 善用 Sys Schema 進行日常巡檢
4. 考慮托管服務 (如網易蜂巢 RDS) 獲得已調優的生產級實例