从 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 如今的功能以及稳定性方面都已经越来越完善。