網頁開發

MySQL 9.7 LTS 來了:八年來最重要的版本,把企業級功能放進了 Community Edition

2026.05.17 · 52 次瀏覽
MySQL 9.7 LTS 來了:八年來最重要的版本,把企業級功能放進了 Community Edition

Hypergraph Optimizer、Dynamic Data Masking、Telemetry 全面解禁,PHP / Laravel / Nginx 團隊這一季升級該怎麼排

2026 年 5 月,Oracle 正式釋出 MySQL 9.7.0 LTS。對絕大多數還在用 8.0 系列、或是觀望了一整年才敢碰 9.x Innovation Release 的團隊來說,這是自 2024 年 8.4 之後第一個「值得真的去升級」的版本——也是繼 8.0 之後,MySQL 第一次把過去只屬於 Enterprise Edition 的能力,整批搬進 Community Edition。


如果只看一行重點:MySQL 9.7 LTS 把過去十年大家在等的 Hypergraph Optimizer 正式開放給社群版,等於整個 Open Source 世界突然多了一個能跟 PostgreSQL 在複雜 JOIN 場景正面對決的優化器。對 Laravel、Yii、Symfony 這類重度依賴 Eloquent/ORM 多表關聯的後端來說,這是這一季最值得排進 sprint 的事。


一、Hypergraph Optimizer:終於不用怕「七張表 JOIN」


傳統 MySQL 的 optimizer 在做 JOIN 時,是用「貪婪式」搜索一個近似最佳的計畫。一旦 SQL 涉及五張表以上的多重關聯、或是 GROUP BY/ORDER BY 跟 JOIN 順序有交互作用,計畫品質就會嚴重退步——這也是過去十年大家忍不住把熱資料丟去 PostgreSQL 或 Elasticsearch 的最大原因。


Hypergraph Optimizer 改用 dynamic programming,把整個查詢視為一張圖,列舉所有可連通的子計畫,再依照成本選擇真正的最佳路徑。Oracle 官方部落格的數據顯示,在多表 JOIN 與多種 JOIN 演算法競爭的工作負載下,新計畫器產出的執行計畫品質與 PostgreSQL 等價,部分情境甚至更快。


使用方式很簡單——在 session 層級下達 SET optimizer_switch='hypergraph_optimizer=on',就能讓特定報表型查詢吃到新計畫器,不會影響其他線上交易。建議先用 EXPLAIN FORMAT=tree 比對前後計畫,再決定要不要在 my.cnf 全域開啟。


二、Dynamic Data Masking 終於可以「不改 App」就上線


9.7 LTS 把 Dynamic Data Masking(DDM)正式 GA。這個功能對所有需要符合個資法、PCI-DSS、HIPAA 或 ISO 27001 的台灣外包與接案團隊都非常重要——它讓你可以在「base table 的欄位層級」掛遮罩政策,由 MySQL 在 query time 根據執行者的角色決定要回傳原值還是遮罩後的值,App 端完全不用改。


實際情境:你的後台讓客服看訂單,但客服不該看到完整信用卡末四碼或身分證字號。過去要嘛在 SQL view 裡用 CONCAT('***', RIGHT(...)),要嘛在 Laravel Accessor 裡做遮罩——前者管不住直接連 DB 的人,後者管不住其他語言寫的微服務。9.7 之後,遮罩規則直接綁在欄位上,誰連、用什麼工具連,都受同一份政策約束。


三、Telemetry Component:MySQL 終於原生講 OpenTelemetry


9.7 新增的 Telemetry Component 可以把 metrics 與 traces 直接吐給 Prometheus、OpenTelemetry Collector 等可觀測性工具。過去要做 MySQL 監控,得另外裝 mysqld_exporter、Percona PMM、或自建 sidecar;現在從資料庫核心就能讓 SRE 直接看到 query trace 與 replication lag,整套監控的維運成本直接砍掉一截。


四、Replication 可觀測性大升級


9.7 對多執行緒複製(Multi-threaded Replication)的「lag、throughput、queued work、worker 行為」全面開放可觀測。對任何用 MySQL 做讀寫分離、或是用 GTID 跨機房同步的 Laravel 專案來說,過去最大的痛點——「我也不知道 slave 為什麼又落後了三分鐘」——終於有了可觀測的訊號。


五、PHP / Laravel 團隊這一季的升級節奏


建議的安全升級路徑:先在 staging 環境跑 mysql-shell util.checkForServerUpgrade(),確認沒有相容性警告;再做完整的 mysqldump + 異地備份;接著一鍵 in-place upgrade 到 9.7 LTS。對 Laravel 來說,9.7 與 8.0 在 SQL 層面相容性極高,Eloquent 的查詢幾乎不用改,但建議把 config/database.php 裡的 strict 模式打開後重跑一次測試,因為 9.x 對 sql_mode 比 8.0 更嚴。


六、什麼時候不要升 9.7?


如果你的系統還重度依賴 MySQL 8.0 的 X Protocol 部分舊功能(已在 9.x 系列中棄用),或是還沒升級到 Laravel 11+/PHP 8.3+,就先別動 production。LTS 的好處是它會撐到 2028 年——你有時間先把 PHP/Laravel 端升好再來。


我的觀點


過去十年,MySQL 在「複雜分析查詢」一直被 PostgreSQL 壓著打,導致很多團隊的解法是「OLTP 用 MySQL、複雜報表搬去 PG」,整個技術棧就此分裂。9.7 LTS 等於 Oracle 正式回頭打這場仗:Hypergraph Optimizer 補上分析查詢的痛點、Vector Data Type(9.0 引入)補上 AI/RAG 場景、DDM 補上合規場景、Telemetry 補上可觀測性。對台灣中小企業外包接案來說,這個版本最大的意義是——你不再需要為了一張像樣的 dashboard 就被迫多養一台 PostgreSQL。一台 MySQL 9.7 LTS,加上 Laravel + Nginx,2026 年的中型 SaaS 技術棧又重新變得簡單。


資料來源