很多同学可能刚因MySQL5.7 EOL后将MySQL5.7升级到了MySQL8.0。但是再一看MySQL8.0的生命周期,彻底绷不住了。又要升级到MySQL8.4了,开发同学也要配合进行兼容性验证及调整了。

从上面官方公布的声明周期表中可以看到MySQL 8.0 版本的 “保质期” 要到了!预计在2026年4月,它就将迎来EOL(End of Life,生命周期终止),届时官方不再提供安全更新、漏洞修复,使用风险直线上升!这个时候,2024 年 4 月 30 日发布的 MySQL 8.4 LTS 版本,就成了咱们升级的首选!今天就来给大家盘一盘,MySQL8.4 版本到底有哪些超实用的新特性及变更点。

新特性
根据官方文档的介绍,对比MySQL8.0而言,MySQL8.4有如下新特性:
1. 安全增强
默认禁用mysql_native_password插件:从8.4.0开始,默认不再启用mysql_native_password认证插件。如果需要启用,必须在配置文件([mysqld]部分)设置mysql_native_password=ON或启动时使用--mysql-native-password=ON。
TLS证书强制验证:新增系统变量tls-certificates-enforced-validation,用于在启动或重新加载证书时强制验证。如果启用,发现无效证书将阻止启动或加载,并发出警告。
WebAuthn认证插件:新增基于FIDO/FIDO2标准的WebAuthn认证插件(企业版),支持使用安全密钥、生物识别等设备进行认证
新增权限:
1)FLUSH_PRIVILEGES权限:专门用于执行FLUSH PRIVILEGES命令(之前需要RELOAD权限)。升级时,如果用户已有RELOAD权限,会自动授予FLUSH_PRIVILEGES
2)TRANSACTION_GTID_TAG权限:用于设置GTID标签(见下文GTID标签化)
LDAP认证超时控制:新增LDAP连接和响应超时参数(如authentication_ldap_simple_connect_timeout等),默认30秒(仅Linux)
2. InnoDB存储引擎优化
系统变量默认值变更:
innodb_buffer_pool_in_core_file:默认改为OFF(如果支持MADV_DONTDUMP),否则ON
innodb_parallel_read_threads:默认值改为可用逻辑处理器数/8(最小4)
innodb_read_io_threads:默认值改为可用逻辑处理器数/2(最小4)
temptable_max_ram:默认值改为总内存的3%(在1-4 GiB范围内)
temptable_max_mmap:默认值改为0(禁用)
专用服务器自动配置:当innodb_dedicated_server=ON时,innodb_redo_log_capacity的计算从基于内存改为基于CPU,且不再改变innodb_flush_method的值
3. 复制与Group Replication
GTID标签化(Tagged GTIDs):扩展GTID格式为UUID:TAG:NUMBER,允许为事务组分配标签(如区分数据操作和运维操作)。使用:
SET gtid_next = 'AUTOMATIC:tag_name'(会话级)或SET gtid_next = UUID:tag_name:NUMBER(单事务,需要TRANSACTION_GTID_TAG权限)
多线程复制(MTA)支持SQL_AFTER_GTIDS:之前使用SQL_AFTER_GTIDS会强制切换为单线程,现在支持并行复制,提高性能
Group Replication增强:
1) 默认group_replication_consistency=AFTER(强一致性)
2) 新增group_replication_preemptive_garbage_collection(单主模式预垃圾回收)和group_replication_preemptive_garbage_collection_rows_threshold(触发阈值)
3) 新增性能指标(如MEMBER_FAILURE_SUSPICIONS_COUNT)用于网络诊断
4) Clone插件跨小版本兼容:允许在同一个大版本(如8.4.x)的不同小版本间克隆(例如8.4.0克隆到8.4.14)
4. 功能改进
直方图自动更新:使用ANALYZE TABLE ... UPDATE HISTOGRAM AUTO可启用直方图自动更新(默认手动)。
EXPLAIN增强:
1) EXPLAIN FOR SCHEMA schema_name ...:在指定schema中解释查询。
2) EXPLAIN FORMAT=JSON INTO @var:将JSON格式结果存入变量。
新增explain_json_format_version系统变量(1:传统线性格式;2:新的访问路径格式)。
3)集合操作优化:EXCEPT和INTERSECT默认使用Hash算法(通过hash_set_operations控制),可通过set_operations_buffer_size调整内存。
新增SQL语法:
SHOW PARSE_TREE:显示SELECT语句的解析树(仅调试版)。
TABLESAMPLE子句:支持抽样查询(如SELECT ... FROM table_name TABLESAMPLE BERNOULLI(10))。
5. 企业版增强
对于使用企业版的同学,有如下变更:
数据脱敏(Data Masking):
1)支持自定义脱敏字典存储库(通过component_masking.masking_database变量)。
2)支持定期刷新脱敏字典(component_masking.dictionaries_flush_interval_seconds)。
防火墙(Firewall):
1)存储过程改为事务性操作(错误时回滚)。
2)新增mysql_firewall_reload_interval_seconds变量定期重载规则。
3) 支持自定义防火墙数据库(mysql_firewall_database)。
4) 弃用用户级防火墙存储过程(改用组策略)。
6. 弃用和移除
弃用(未来版本移除):
1)变量:group_replication_allow_local_lower_version_join
2)通配符授权:GRANT ... ON db%.*(未来%和_将视为普通字符)
3)非标准外键:引用非唯一键或部分键的外键(需设置restrict_fk_on_non_standard_key=OFF启用)
立即移除:
1)插件:keyring_file、keyring_encrypted_file、keyring_oci(改用对应的Component)。
2)语句:FLUSH HOSTS(改用TRUNCATE performance_schema.host_cache)。
3) 复制语法:CHANGE MASTER TO → 改用CHANGE REPLICATION SOURCE TO。
3)系统变量:default_authentication_plugin(改用authentication_policy)。
变更列表如下图所示:


新特性举例


1. 加密插件
mysql_native_password加密插件默认已经禁用,如果需要兼容低版本客户端,需要显式启动后才能使用。例如想直接创建一个mysql_native_password加密方式的用户时会报错。
# 默认方式创建用户mysql> create user u1 identified by 'U1@2025.com';Query OK, 0 rows affected (0.04 sec)mysql> SELECT plugin FROM mysql.user WHERE user='u1';+-----------------------+| plugin |+-----------------------+| caching_sha2_password |+-----------------------+1 row in set (0.00 sec) # 实用mysql_native_password插件创建用户mysql> CREATE USER u2 IDENTIFIED WITH 'mysql_native_password' BY 'U2_Passwd';ERROR 152


1万+

被折叠的 条评论
为什么被折叠?



