從 MySQL 8.1 開始,官方啟用了新的版本模型:MySQL 創新版 (Innovation) 和長期支持版 (LTS)。 根據介紹,兩者的質量都已達到可用于生產環境級別。區別在于: 如果希望嘗試最新的功能和改進,并喜歡與最新技術保持同步,那么 MySQL 創新版本可能最適合您。 該版本非常適合在快節奏的開發環境中工作的開發人員和 DBA,其中有高水平的自動化測試和現代的持續集成技術,可以實現更快的升級周期。 如果您的環境需要繼續保持已經固定的行為,那么 LTS 版本就是您的不二之選。這些版本僅包含必要的修復,因此可以減少數據庫軟件行為變更帶來的風險。
2024年7月1日,MySQL的創新版MySQL 9.0 GA,如果您還不清楚什么是創新版,請查閱MySQL的創新版(Innovation)與長期穩定版(LTS)。
這個版本里面有哪些變化。
- “mysql_native_password”插件已經被刪除,如果客戶端軟件不具備“CLIENT_PLUGIN_AUTH”能力將無法連接服務器。為了向后兼容,“mysql_native_password”在9.0版本的客戶端上仍然可以連接到早期版本的MySQL服務器。
- SQL語句“CREATE EVENT”、“ ALTER EVENT”,及 “DROP EVENT”可以作為PREPARE執行。
- 由包含“IGNORE”關鍵字的語句忽略產生的錯誤“ER_SUBQUERY_NO_1_ROW”已從錯誤列表中刪除。
- Performance Schema中增加了兩個表:
variables_metadata:提供了關于系統變量的一般信息。這些信息包括MySQL服務器識別的每個系統變量的名稱、作用域、類型、范圍(如適用)和描述。 - global_variale_attributes:提供了關于服務器分配給全局系統變量的屬性值對的信息。
- EXPLAIN ANALYZE的輸出結果可以用JSON格式保存,語法如下:
EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt
Windows版本的相關改進
使用Windows版的用戶可以在這個版本里面獲得大量的體驗改善,修復了Windows安裝向導中大量的錯誤。
MySQL Shell
更新并簡化了InnoDB ReplicaSet中鎖的處理,不再需要多個每個實例的鎖。
支持部分或完全解散 ClusterSet。
支持在所有能夠訪問的成員上執行“.execute().”。
升級檢查工具支持對外鍵參照的檢查。
MySQL9.0支持的平臺
9.x | 8.4 長期支持 | 8.0 | ||
---|---|---|---|---|
操作系統 | 建筑學 | |||
Oracle Linux / Red Hat / CentOS / Rocky Linux | ||||
Oracle Linux 9 / Red Hat Enterprise Linux 9 / Rocky Linux 9 | x86_64,arm64 | ? | ? | ? |
Oracle Linux 8 / Red Hat Enterprise Linux 8 / CentOS 8 / Rocky Linux 8 | x86_64,arm64 | ? | ? | ? |
Oracle Linux 7 / Red Hat Enterprise Linux 7 / CentOS 7 | x86_64,arm64 | ? | ? | ? |
Oracle Linux 6 / Red Hat Enterprise Linux 6 / CentOS 6 | x86_32、x86_64 | ? | ||
Oracle Solaris | ||||
Solaris 11(更新 4+) | SPARC_64 | ? | ? | ? |
Canonical | ||||
Ubuntu 24.04 LTS | x86_64 | ? | ? | ? |
Ubuntu 22.04 LTS | x86_64 | ? | ? | ? |
Ubuntu 20.04 LTS | x86_64 | ? | ||
SUSE | ||||
SUSE 企業版 Linux 15 / OpenSUSE 15 (15.5) | x86_64 | ? | ? | ? |
SUSE Enterprise Linux 12(12.5+) | x86_64 | ? | ||
Debian | ||||
Debian GNU/Linux 12 | x86_64 | ? | ? | ? |
微軟 Windows 服務器 | ||||
Microsoft Windows 2022 服務器 | x86_64 | ? | ? | ? |
微軟 Windows 2019 服務器 | x86_64 | ? | ? | ? |
Microsoft Windows 2016 服務器 | x86_64 | ? | ? | ? |
微軟Windows | ||||
微軟 Windows 11 | x86_64 | ? | ? | ? |
微軟 Windows 10 | x86_64 | ? | ||
蘋果 | ||||
macOS 14 | x86_64,arm64 | ? | ? | ? |
macOS 13 | x86_64,arm64 | ? | ? | ? |
MySQL 9.0 中已棄用的功能
以下功能在 MySQL 9.0 中已棄用,并且可能會在未來的系列中刪除。如果 MySQL 更新說明中有顯示替代方案,則你們應更新應用程序并使用它們。
對于使用 MySQL 9.0 中已棄用且已在更高 MySQL 版本中刪除的功能的應用程序,從 MySQL 9.0 源復制的語句到運行更高版本的副本時,語句可能會執行失敗,或者可能對源和副本產生不同的影響。為了避免此類問題,應修改使用 9.0 中已棄用功能的應用程序以避免這些問題,并盡可能使用替代方案。以下內容為棄用功能,
性能模式 variables_info 表列。 性能模式變量信息表的 MIN_VALUE 和 MAX_VALUE 列現已棄用,并且可能會在未來的 MySQL 版本中刪除。相反請使用 Variables_metadata 表中具有相同名稱的列(請參閱上文 1.3 章節)。
MySQL 9.0 中刪除的功能
以下功能已過時并已在 MySQL 9.0 中刪除。如果 MySQL 更新說明中有顯示替代方案,則你們應更新應用程序并使用它們。
對于使用 MySQL 9.0 中刪除的功能的 MySQL 8.4 應用程序,從 MySQL 8.4 源復制到 MySQL 9.0 副本時,語句可能會執行失敗,或者可能對源和副本產生不同的影響。為了避免此類問題,應修改使用 MySQL 9.0 中刪除的功能的應用程序以避免這些問題,并盡可能使用替代方案。
mysql_native_password 插件。mysql_native_password 身份驗證插件已在 MySQL 8.0 中棄用,已被刪除。服務器現在拒絕來自不具有 CLIENT_PLUGIN_AUTH 功能的舊客戶端程序的 mysql_native 身份驗證請求。
由于此更改,以下服務器選項和變量也已被刪除:
–mysql-native-password 服務器選項
–mysql-native-password-proxy-users 服務器選項
default_authentication_plugin 服務器系統變量
給大家介紹一下 mysql_native_password 插件。
mysql_native_password 介紹
從 MySQL 8.0.4 開始,MySQL 默認身份驗證插件從 mysql_native_password 改為 caching_sha2_password 。相應地,libmysqlclient 也使用 caching_sha2_password 作為默認的身份驗證機制。
刪除起因
在這之前 MySQL 5.6/5.7 使用的默認密碼插件是 mysql_native_password。mysql_native_password 的特點是不需要加密的連接。該插件驗證速度特別快,但是不夠安全,因為,mysql_native_password 使用的是于 SHA1 算法,NIST(美國國家標準與技術研究院)在很早之前就已建議停止使用 SHA1 算法,因為 SHA1 和其他哈希算法(例如 MD5)容易被破解。
其實從 MySQL 5.6 開始就引入了更安全的認證機制:ha256_password 認證插件。它使用一個加鹽密碼(salted password)進行多輪 SHA256 哈希(數千輪哈希,暴力破解更難),以確保哈希值轉換更安全。但是,建立安全連接和多輪 hash 加密很耗費時間。雖然安全性更高,但是驗證速度不夠快。
改進
MySQL 試圖結合二者的優點。于是在 MySQL 8.0.3 版本引入了一個新的身份驗證插件 caching_sha2_password ,作為sha256_password的代替方案,在sha256_password 的基礎上進行了改進補上了短板,既解決安全性問題又解決性能問題。與此同時 sha256_password將退出時代的浪潮。MySQL 預計在未來版本中將其刪除。使用 sha256_password 進行身份驗證的 MySQL 賬戶建議轉為 caching_sha2_password。
其實 MySQl 早就想在 8.0 版本中替換到 mysql_native_password 插件,到了 9.0 版本直接刪除 mysql_native_password 功能其實提前跟大家打過招呼。
總結
MySQL 9.0 版本新增了 EXPLAIN 分析 JSON 輸出、DDL 語句新增 Event 語法、性能模式新添加了兩個新表,棄用了老版本中的 variables_info 表,刪除了 mysql_native_password 認證插件。
這些更新沒有帶來大的功能改動,對于大多數應用程序來說影響很小,沒有當年 MySQL 5.7 發布時帶來的 innodb 存儲引擎那種給人帶來的激動感,更新說明中也沒有強調性能改進(估計性能對比 8.4 版本提升不大)。不過這也說明關系型數據庫 MySQL 如今的功能以及穩定性方面都已經越來越完善。