技術分享 | MySQL 8.0.17 GA 釋出!
原創作者: 管長龍
昨日 MySQL 官網正式釋出 8.0.17 / 5.7.27 / 5.6.45 三個(維護)版本,距離上一個 GA 版本(8.0.16)釋出時隔僅 88 天!
MySQL 各開發團隊的部落格網站,同一時間釋出了多篇文章報道新版本釋出(後續翻譯)。三個版本除了修復 Bug 外,兩個 5.* 版本則優化了 Windows 的告警功能,8.0.17 添加了一些新功能,標記並不推薦某些功能。
具體請檢視 MySQL 官網的 Release Notes 頁面,下文為 MySQL 8.0.17 版本的新特性梗概。
MySQL 官網的 Release Notes 頁面:
http://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-27.html http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-45.html
圖片自 MySQL 官網截圖
一、克隆
在 8.0.16 新增的 MySQL Shell (本次也有更新),可將一臺執行中的伺服器,克隆出一臺新伺服器。本過程可自動化實現,但需要預先使用 mysqldump 或 backup 等部署初始狀態。例如,需要為 MySQL InnoDB Cluster 新增新成員,只需啟動一臺新的伺服器,並操作 MySQL Shell 告知加入指定叢集即可。
主要包括:克隆本地副本 [WL #9209] /克隆遠端副本 [WL #9210] /克隆遠端配置 [WL #11636] /克隆複製座標 [WL #9211] /克隆加密 [WL #9682]
二、JSON 的多值索引
InnoDB 現在支援 JSON 陣列上的多值索引。多值索引是多個索引記錄可以指向同一資料記錄的索引,這對於索引 JSON 文件非常有用。例如:{user:"Bob",zipcode:[94477,94536]}
如果我們想在上面的 JSON 資料中搜索 zipcodes,可以使用如下語句建立索引:
CREATE INDEX zips ON t1((CAST(data->'$.zipcode' AS UNSIGNED ARRAY)));
這是一種函式索引,使用 CAST() 函式將 JSON 陣列轉換為 SQL 型別的陣列。多值索引通常配合如下函式使用:MEMBER OF()、JSONCONTAINS() 和 JSONOVERLAPS(),例如:
SELECT * FROM t1 WHERE 123 MEMBER OF(data->'$.data.zipcode');
三、JSON 模式
繼續增加對 JSON 模式的支援JSON_SCHEMA_VALID(<json schema>, <json doc>)函式實現 JSON 文件的驗證 [WL #11999]。JSON_SCHEMA_VALIDATION_REPORT(<json schema>, <json doc>)函式實現結構化列印 JSON 物件,提供更詳細的錯誤報告 [WL #13005]。
四、改進優化器
子查詢優化,將 NOT EXISTS 和 NOT IN 轉換為反半連線 [WL#4245]。轉換降低了執行成本,即通過將子查詢表引入頂層查詢,並通過將半連線和反連接合並在一起。確保 SQL 條件中的所有謂詞都是完整的 [WL#12358],不完整的謂詞會被不等式代替。解析器,優化器和執行器只需處理完成謂詞。
將 CAST 新增到 FLOAT / DOUBLE / REALCatalin,以支援根據 SQL 標準對 FLOATING 點資料型別進行強制轉換操作。這使得顯式CAST支援與具有更多種類投射可能性的隱式CAST對齊。[WL#529] 支援顯式強制 DOUBLE,FLOAT 以及 REAL 使用其中一個功能 CAST() 或 CONVERT()。
五、Volcano 迭代器
這項功能是基於 Volcano 模型,目標是簡化程式碼庫,啟用雜湊連線等新功能,並啟用更好的EXPLAIN和EXPLAIN ANALYZE。
Volcano iterator semijoin [WL#12470] 在迭代器執行器中實現了所有形式的半連線。
迭代器執行程式分析查詢 [WL#12788] 通過支援視窗函式,彙總和最終重複資料刪除,擴充套件了迭代器執行程式可以處理的分析查詢的範圍。
六、字符集新增排序規則
為 utf8mb4 新增新的二進位制排序規則 utf8mb4_0900_bin [WL#13054] 新的排序規則類似於 utf8mb4_bin 排序規則,區別在於 utf8mb4_0900_bin 使用 utf8mb4 編碼位元組並且不增加填充空間。
七、複製增強
-
通過自動例項克隆增強的組複製分散式恢復。
-
增強了組複製的跨版本互操作性。
-
加密條件和臨時,磁碟上的二進位制日誌捕獲快取。
-
mysqlbinlog 的協議壓縮支援。
特別注意,此版本實現了對叢集或組成員的克隆支援,這是在 MGR 和 InnoDB Cluster 方面的重大改進。
八、路由
MySQL 8.0.17 為 MySQL 路由添加了監控基礎架構和監控 REST 介面。希望監控路由器的應用程式和使用者可以獲得對配置資料,效能資訊和資源使用情況的結構化訪問。此外,MySQL 路由已經與 MySQL Group Replication 進一步整合,因為它現在處理由組複製協議發出的檢視更改通知。
九、MTR 測試元件
將 MyISAM 的測試用例移動到單獨的 .test 檔案 [WL#7407] 並允許 MTR 測試元件在未安裝 MyISAM 引擎的伺服器上執行。
十、其它
伺服器能夠以最多255個字元的主機名執行。[WL#12571]
將互斥鎖定順序檢查新增到伺服器,這將作為一種方法和工具來強制執行時執行沒有死鎖。[WL#3262]
若存在工作執行緒更多分割槽的情況下,進一步拆分剩餘分割槽來改進並行掃描。[WL#12978]
在 MySQL 客戶端中新增作業系統資訊作為連線屬性,這使 DBA 可以更輕鬆地通知使用者在伺服器上執行耗時的查詢。[WL#12955]
十一、棄用和刪除
首先要強調的是,MySQL 8.0.17 不會刪除任何功能,但會在 8.0 系列中中將某些功能標記為已棄用。在將來的主要版本中刪除不推薦使用的功能。
棄用或警告 named_pipe_full_access_group 的值 'everyone' 。我們希望將來我們會將 named_pipe_full_access_group 系統變數的預設值從 'everyone' 更改為 'i.e. no-one'。[WL#12670]
棄用用於指定 _bin 排序規則的關鍵字 BINARY。[WL#13068]
棄用整數顯示寬度和 ZEROFILL 選項。[WL#13127]
棄用 DECIMAL 和 FLOAT 資料型別的無符號屬性。[WL#12391]
棄用 SQL 語句中 && 和 || 作為 AND 和 OR 的同義詞。[WL#13070]
棄用在 DOUBLE 和 FLOAT 上使用 AUTO_INCREMENT。[WL#12575]
棄用指定浮點型別位數的能力。[WL#12595]
棄用非標準語法 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS。[WL#12615]
最後
MySQL 8.0 在整體可用性上繼續加強,特別是在組複製方面持續改進,並完善了 MySQL Shell 等新特性。社群會針對一些新特性持續釋出文章,盡情期待!
參考連結:
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html https://mysqlserverteam.com/the-mysql-8-0-17-maintenance-release-is-generally-available/ https://mysqlhighavailability.com/automatic-provisioning-in-group-replic