代码改变世界

MySQL 8.0 已废弃的功能

2025-08-27 11:33  abce  阅读(67)  评论(0)    收藏  举报

MySQL 8.0 即将达到其生命周期终止(EOL)阶段,而 MySQL 8.4 则成为焦点,这是首个长期支持(LTS)版本。在MySQL 8.4 中,MySQL 8.0 中一些功能已经被移除或过期。

mysql shell 提供了诸如 util.checkforserverupgrade() 之类的工具,可帮助你提前扫描已废弃功能和升级阻碍因素。

 

移除的功能

1.password()函数

老的版本可以使用set password=password()来修改设置密码,这使用了比较旧的、安全性低的哈希方法。现在已经被彻底移除。可以切换成create user ... identified by 'passwrod'、alter user ... identified by 'password' 命令。

2.tx_isolation系统变量

老版本中tx_isolation也是transaction_isolation的别名,早就过期,多年以后终于被移除。建议在应用程序代码和配置文件中将 tx_isolation 替换为 transaction_isolation。

3.expire_logs_days变量

expire_logs_days是以前设置二进制日志保留时间的方式。它已被更精细的 binlog_expire_logs_seconds 取代。

 

过期的功能

升级到 mysql 8.4 后,将看到以下新警告。建议立即开始规划解决这些问题,以便下次升级更加顺畅。

1.mysql_native_password

这是8.0版本之前的默认身份验证插件。与当前的默认插件caching_sha2_password相比,它安全性较低,因此已正式被淘汰。建议开始对用户和旧应用程序进行审计,确保它们能够支持新的身份验证插件。

2.flush hosts

该命令在现代容器化环境中已不再实用。它即将被淘汰,因此建议将其从任何维护脚本中移除。

3.–skip-grant-tables

我们都曾使用过这个“紧急”选项来重置丢失的 root 密码,但它是一个巨大的安全漏洞。其废弃鼓励使用更安全的 init-file 方法进行密码恢复。

4.float(m,d) 和 double(m,d) 语法

很多人曾使用这个非标准语法来定义小数位数。sql 标准仅支持 float 或 double,因此 mysql 已移除这一易混淆的替代方案。

现在应在模式定义中使用简单的 float 或 double 类型。建议在应用程序逻辑中处理任何特定的舍入或格式化操作。尽管此语法目前已被废弃,但你应预期它将在未来版本的 mysql 中被移除。

5.default_authentication_plugin

为清晰起见,对名称进行了简单修改。该变量现更名为default_authentication_policy。