原創做者: 管長龍 html
昨日 MySQL 官網正式發佈 8.0.17 / 5.7.27 / 5.6.45 三個(維護)版本,距離上一個 GA 版本(8.0.16)發佈時隔僅 88 天!mysql
MySQL 各開發團隊的博客網站,同一時間發佈了多篇文章報道新版本發佈(後續翻譯)。三個版本除了修復 Bug 外,兩個 5.* 版本則優化了 Windows 的告警功能,8.0.17 添加了一些新功能,標記並不推薦某些功能。sql
具體請查看 MySQL 官網的 Release Notes 頁面,下文爲 MySQL 8.0.17 版本的新特性梗概。json
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 官網截圖服務器
1、克隆架構
在 8.0.16 新增的 MySQL Shell (本次也有更新),可將一臺運行中的服務器,克隆出一臺新服務器。本過程可自動化實現,但須要預先使用 mysqldump 或 backup 等部署初始狀態。例如,須要爲 MySQL InnoDB Cluster 添加新成員,只需啓動一臺新的服務器,並操做 MySQL Shell 告知加入指定集羣便可。分佈式
主要包括:克隆本地副本 [WL #9209] /克隆遠程副本 [WL #9210] /克隆遠程配置 [WL #11636] /克隆複製座標 [WL #9211] /克隆加密 [WL #9682]函數
2、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');
3、JSON 模式
繼續增長對 JSON 模式的支持JSON_SCHEMA_VALID(<json schema>, <json doc>)函數實現 JSON 文檔的驗證 [WL #11999]。JSON_SCHEMA_VALIDATION_REPORT(<json schema>, <json doc>)函數實現結構化打印 JSON 對象,提供更詳細的錯誤報告 [WL #13005]。
4、改進優化器
子查詢優化,將 NOT EXISTS 和 NOT IN 轉換爲反半鏈接 [WL#4245]。轉換下降了運行成本,即經過將子查詢表引入頂層查詢,並經過將半鏈接和反鏈接合併在一塊兒。確保 SQL 條件中的全部謂詞都是完整的 [WL#12358],不完整的謂詞會被不等式代替。解析器,優化器和執行器只需處理完成謂詞。
將 CAST 添加到 FLOAT / DOUBLE / REALCatalin,以支持根據 SQL 標準對 FLOATING 點數據類型進行強制轉換操做。這使得顯式CAST支持與具備更多種類投射可能性的隱式CAST對齊。[WL#529] 支持顯式強制 DOUBLE,FLOAT 以及 REAL 使用其中一個功能 CAST() 或 CONVERT()。
5、Volcano 迭代器
這項功能是基於 Volcano 模型,目標是簡化代碼庫,啓用散列鏈接等新功能,並啓用更好的EXPLAIN和EXPLAIN ANALYZE。
Volcano iterator semijoin [WL#12470] 在迭代器執行器中實現了全部形式的半鏈接。
迭代器執行程序分析查詢 [WL#12788] 經過支持窗口函數,彙總和最終重複數據刪除,擴展了迭代器執行程序能夠處理的分析查詢的範圍。
6、字符集新增排序規則
爲 utf8mb4 添加新的二進制排序規則 utf8mb4_0900_bin [WL#13054] 新的排序規則相似於 utf8mb4_bin 排序規則,區別在於 utf8mb4_0900_bin 使用 utf8mb4 編碼字節而且不增長填充空間。
7、複製加強
經過自動實例克隆加強的組複製分佈式恢復。
加強了組複製的跨版本互操做性。
加密條件和臨時,磁盤上的二進制日誌捕獲緩存。
mysqlbinlog 的協議壓縮支持。
特別注意,此版本實現了對集羣或組成員的克隆支持,這是在 MGR 和 InnoDB Cluster 方面的重大改進。
8、路由
MySQL 8.0.17 爲 MySQL 路由添加了監控基礎架構和監控 REST 接口。但願監控路由器的應用程序和用戶能夠得到對配置數據,性能信息和資源使用狀況的結構化訪問。此外,MySQL 路由已經與 MySQL Group Replication 進一步集成,由於它如今處理由組複製協議發出的視圖更改通知。
9、MTR 測試組件
將 MyISAM 的測試用例移動到單獨的 .test 文件 [WL#7407] 並容許 MTR 測試組件在未安裝 MyISAM 引擎的服務器上運行。
10、其它
服務器可以以最多255個字符的主機名運行。[WL#12571]
將互斥鎖定順序檢查添加到服務器,這將做爲一種方法和工具來強制運行時執行沒有死鎖。[WL#3262]
若存在工做線程更多分區的狀況下,進一步拆分剩餘分區來改進並行掃描。[WL#12978]
在 MySQL 客戶端中添加操做系統信息做爲鏈接屬性,這使 DBA 能夠更輕鬆地通知用戶在服務器上運行耗時的查詢。[WL#12955]
11、棄用和刪除
首先要強調的是,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-replication/