MySQL 8.4 LTS版本有哪些新特性_查阅官方手册了解架构调整

浅静君_3207

浅静君_3207

2026-05-28

758人浏览

原创

mysql 8.4 lts不是功能大爆发版本,而是将8.1–8.3中验证成熟的架构调整和默认行为优化打包为长期支持基线,升级关键在于关注默认值变更与行为收敛点,如innodb_change_buffering默认改为none、group_replication_consistency默认为before_on_primary_failover、innodb_redo_log_capacity替代旧日志参数、mysql_native_password默认禁用等,这些静默变化最易引发性能回退或连接失败。

mysql 8.4 lts版本有哪些新特性_查阅官方手册了解架构调整

直接说结论:MySQL 8.4 LTS 不是“功能大爆发”版本,而是把过去几年创新版(8.1–8.3)中验证成熟、生产可用的架构调整和默认行为优化,打包进一个长期支持基线。查阅官方手册时,重点不是找“全新功能”,而是盯紧 默认值变更 和 行为收敛点 —— 这些才是升级后最可能出问题的地方。

innodb_change_buffering 默认从 all 改为 none

这个改动影响非常实际:8.4 启动后,InnoDB 默认不再缓存非唯一二级索引的插入/删除标记操作。以前 innodb_change_buffering=all 会把这类写操作先攒在缓冲区,等页面读入内存再合并,降低随机 I/O;现在设为 none,所有变更都立即落盘或走正常路径。

适用场景:
- SSD/NVMe 环境下,随机写性能足够强,change buffer 的收益变小,反而可能因争用缓冲池引发锁等待
- OLTP 主键写密集、二级索引更新少的业务,基本无感
- 但如果你的表有大量非唯一二级索引 + 高频批量 INSERT/DELETE,QPS 可能小幅下降,延迟毛刺变多

容易踩的坑:
- 沿用旧 my.cnf 未显式配置该参数,结果发现批量导入变慢,排查半天才意识到是默认值变了
- 误以为是硬件或配置问题,反复调 innodb_io_capacity,其实根源在 change buffer 被关了

group_replication_consistency 默认为 BEFORE_ON_PRIMARY_FAILOVER

组复制(MGR)的事务一致性保障前移了。8.0 默认 EVENTUAL,主切后新主可能还没回放完全部 binlog 就开始提供读服务;8.4 默认强制新主在接管前完成所有已提交事务的回放。

这意味着:
- 故障切换时间略长(通常多几百毫秒),但应用读不到“跳变”数据
- 如果你的应用依赖“最终一致性”做宽松读取(比如报表类查询跑在只读节点),切换后可能短暂卡住或超时
- BEFORE_ON_PRIMARY_FAILOVER 不影响正常主从复制,只作用于 MGR 内部故障转移流程

关键提醒:
- 该参数不能动态 SET,必须在 my.cnf 中配置并重启生效
- 若需兼容旧行为,可手动设回 EVENTUAL,但需承担一致性风险

innodb_redo_log_capacity 替代 innodb_log_file_size + innodb_log_files_in_group

Redo Log 管理方式重构了。8.4 废弃了老式双参数组合,统一用单参数 innodb_redo_log_capacity 控制总容量(单位字节)。例如原配置 innodb_log_file_size=1G × 2 = 2G,现在直接设 innodb_redo_log_capacity=2147483648。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

为什么这样改:
- 避免用户误配导致日志文件数不匹配、启动失败(如只改 _file_size 忘改 _files_in_group)
- 官方可更灵活控制内部日志段分配策略,尤其适配高吞吐写入场景

实操注意:
- 升级前必须停库,用 mysqld --initialize-insecure 或手动清理旧日志文件(ib_logfile0, ib_logfile1)
- 首次启动时若检测到旧日志文件存在,会报错退出,提示 “Redo log files exist but redo log capacity is not set”
- 建议在初始化配置中显式写明 innodb_redo_log_capacity,不要依赖自动计算

mysql_native_password 插件默认禁用

连接层最常踩的坑。8.4 默认认证插件是 caching_sha2_password,而 mysql_native_password 被彻底禁用——不是废弃,是默认关掉。

现象很典型:
- 旧 JDBC 驱动(如 Connector/J 5.1.x)、PHP mysqli 扩展、某些 Python MySQL 客户端连不上,报错 Authentication plugin 'caching_sha2_password' cannot be loaded 或类似提示
- CREATE USER ... IDENTIFIED WITH mysql_native_password 会失败,除非先启用插件

解决办法只有两个:
- 在 my.cnf 的 [mysqld] 段加 mysql_native_password=ON,然后重启
- 或升级客户端驱动,使用 8.0+ 版本的 Connector/J,并确保连接字符串含 &serverTimezone=UTC 等兼容项

别忽略这点:很多自动化部署脚本硬编码了 mysql_native_password 创建用户,升级后全挂,得逐个改。

真正麻烦的从来不是“加了什么新功能”,而是这些默认值和行为的静默切换——它们不会报错,但会让系统在某个凌晨三点突然慢下来,或者让某条 SQL 的执行计划彻底偏移。升级前务必在测试环境用真实流量压测,尤其盯住 SHOW ENGINE INNODB STATUS 里的 change buffer 使用率、redo log 刷写延迟、以及 MGR 切换日志里的 consistency wait 时间。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4463

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

931

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1169

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6401

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3203

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6380

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8701

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1170

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1032

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 189人学习