首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.7 新特性深度解析:安全性、靈活性、易用性、可用性、性能五大維度

     編輯:MySQL 資料庫相關知識

前言

MySQL 5.7 於 2015 年 GA,引入大量重量級特性,被廣泛認為是「里程碑版本」。本文從五大維度系統梳理核心新特性。

1. 安全性增強

  • Root 默認隨機密碼:初始化生成隨機密碼,存儲於 ~/.mysql_secret 或錯誤日誌,杜絕空密碼風險。
  • 移除 test 數據庫:默認不再創建,即使手動創建也受權限系統控制。
  • SSL 簡化配置:mysql_ssl_rsa_setup 自動生成證書,默認連接加密。
  • 密碼過期策略:ALTER USER 'user'@'host' PASSWORD EXPIRE INTERVAL 90 DAY;
  • 賬戶鎖定/解鎖:ALTER USER 'user'@'host' ACCOUNT LOCK/UNLOCK; 臨時禁用賬戶無需刪除。

2. 靈活性:JSON 與 Generated Columns

2.1 原生 JSON 支持 (5.7.8+)

CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

優勢:
- Server 層提供豐富 JSON 函數 (JSON_EXTRACT, JSON_SET, -> 操作符等)
- 存儲為 BLOB,與存儲引擎無關 (MyISAM/InnoDB 均支持)
- 完勝 MongoDB 兩點:混合存儲結構化+非結構化數據、完整 ACID 事務支持

2.2 Generated Columns (虛擬/存儲列)

列值由表達式自動計算:

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

兩種類型:

殺手級特性:為 Generated Column 建索引

ALTER TABLE triangle ADD INDEX idx_area (area);

無法在應用層實現「按計算列索引」,極大擴展查詢優化空間。

3. 易用性提升

  • Ctrl+C 不再退出客戶端:僅中斷當前語句,保持會話,符合 Linux 直覺。
  • EXPLAIN FOR CONNECTION:分析正在運行的查詢,DBA 排查長事務利器。
    EXPLAIN FOR CONNECTION 123;
  • Performance Schema 擴展:新增內存使用、MDL 鎖、存儲過程監控。
  • Sys Schema (5.7.7+):系統庫,封裝 Performance Schema 提供開箱即用的診斷視圖:
類型存儲計算時機適用場景
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。

4. 可用性與在線操作

  • 在線修改複製過濾規則:停止 SQL 線程 → 修改 → 啟動,無需重啟。
  • 在線調整 Buffer Pool 大小:引入 innodb_buffer_pool_chunk_size (默認 128MB),按塊擴縮容。
    注意:innodb_buffer_pool_size 必須是 chunk_size × instances 的倍數,否則自動向上取整。
  • Online DDL 擴展:支持重命名索引、修改 VARCHAR 長度 (不重建表)。
    ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
  • 在線啟用 GTID:無需停機即可從非 GTID 遷移到 GTID 複製拓撲。

5. 性能優化

5.1 臨時表優化

基於「臨時表僅當前會話可見、生命週期隨連接結束」特性:
- 引入專用臨時表空間
- DDL 不持久化元數據
- DML 不寫 Redo、關閉 Change Buffer
→ 大幅減少 IO,提升臨時表操作性能。

5.2 只讀事務優化

  • 默認假設事務為只讀,發起寫操作才轉為讀寫事務。
  • 避免分配事務 ID、回滾段、減少鎖競爭。
  • OLTP 讀多寫少場景顯著受益。

5.3 連接處理加速

將 THD/VIO 初始化從接收線程下發到工作線程,減少主線程阻塞,提升短連接吞吐。

5.4 真正的並行複製

核心思想:同一組提交的事務無衝突,可並行回放。
設置:slave_parallel_type = LOGICAL_CLOCK (默認 DATABASE 庫級並行效果有限)。
5.7 並行複製徹底解決複製延遲痛點。

遷移注意事項

  • innodb_buffer_pool_size 需按 chunk 對齊,否則實際分配超預期。
  • 並行複製必須設置 slave_parallel_type=LOGICAL_CLOCK。
  • 5.7 默認 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) 獲得已調優的生產級實例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved