大家好,我是小耶,写功课只是为了我踩过的坑,你们别再踩了!
有一个现实正在逼近每一位MySQL DBA:MySQL 8.0社区版的生命周期走到了尽头。 根据Oracle官方支持政策,2026年4月起,MySQL 8.0已进入“永续支持”阶段,不再提供公开的安全更新和漏洞修复。这意味着继续使用8.0,风险正在累积。
那升到什么版本?答案是MySQL 8.4 LTS。
2024年4月30日发布的MySQL 8.4,是MySQL历史上第一个长期支持(LTS)版本。它提供5年超长支持周期(至2031年),每年两次补丁更新。8.4系列聚焦安全与稳定性,不会像8.0早期那样频繁引入破坏性变更——这正是生产环境最需要的品质。
下面我从5个维度,梳理8.0到8.4的核心变化。
变化一:InnoDB并行查询——从“实验品”到“生产力”
这是8.4最重磅的性能升级,也是解决大表查询慢的关键利器。
8.0.30首次引入了InnoDB并行查询作为实验特性。但那个版本的分片算法存在明显缺陷——数据分布不均,经常出现“有的线程闲死、有的线程忙死”的长尾巴问题。
8.4 LTS对并行查询做了全面固化和深度优化。核心改进是两级分片策略:先按数据量把B+树切成均衡的大块预分配,执行中再动态拆分剩余任务。实测数据很有说服力——1亿行订单表,COUNT(*)从单线程1.82秒降到16线程0.22秒,提速8.3倍。关键是不需要修改业务SQL,也不需要分库分表。
配置也不复杂,核心就三个参数:
parallel_query:总开关,8.4默认开启parallel_threads_limit:单条查询最大worker线程数,默认4,上限64innodb_parallel_read_threads:实例全局并行扫描线程池大小,默认CPU逻辑核数/8
建议先用EXPLAIN ANALYZE验证——Extra字段出现Using parallel scan (N workers),就说明生效了。
变化二:Redo Log动态容量——告别“停机调参”
8.0时代,调整Redo Log大小需要停机修改配置文件、重启实例。对于核心业务系统,每次调整都是一次“开胸手术”。
8.4引入了innodb_redo_log_capacity系统变量,支持在线调整Redo Log容量,无需重启。
新的容量计算方法也变了:如果未手动设置,Redo Log容量会根据CPU逻辑核数自动计算——(可用逻辑处理器数/2)GB,最大动态默认值16GB。InnoDB会自动维护32个大小相同的Redo Log文件,每个文件大小为总容量的1/32。这意味着升级后,Redo Log会自动匹配硬件能力,不再需要DBA凭经验拍脑袋调参。
变化三:默认认证插件变更——小心连不上!
这是个升级时必须重点关注的兼容性变化。
8.4默认不再启用已弃用的mysql_native_password认证插件。如果你的应用或工具仍然依赖旧认证方式(比如一些老版本的JDBC驱动、PHP扩展、Navicat等客户端),升级后可能连不上数据库。
要启用旧认证方式,需要在配置文件中加入mysql_native_password=ON。建议升级前先检查所有应用的认证方式,统一迁移到caching_sha2_password,避免升级后才发现连不上。
变化四:InnoDB参数默认值大幅调整
8.4调整了多个InnoDB系统变量的默认值。以下是几个关键变化:
| 参数 | 8.0默认值 | 8.4默认值 | 影响 |
|---|---|---|---|
innodb_buffer_pool_instances |
8 | CPU核数的1/4(1-64) | 大内存实例性能提升 |
innodb_change_buffering |
all | none | 减少后台IO,但可能影响写入性能 |
innodb_redo_log_capacity |
基于内存计算 | 基于CPU计算 | 自动适配硬件 |
innodb_dedicated_server |
OFF | ON(自动检测) | 专用服务器自动优化 |
建议升级后用SHOW VARIABLES对比新旧默认值,确认是否符合业务预期。
变化五:云原生与AI能力的前瞻布局
8.4在云原生方向做了架构预留。
存算分离架构预留:8.4的架构设计为存储计算分离预留了空间。预计到2026年,将有超过60%的企业采用Serverless形态的数据库服务。8.4为这一转型提前做了准备。
AI驱动参数调优(实验性) :8.4内置了实验性的AI驱动参数调优功能。虽然目前还是实验特性,但方向已经明确——数据库正在从“人调参”走向“AI调参”。
直方图自动更新:8.4新增了直方图自动更新能力。创建直方图时指定AUTO UPDATE后,当表数据发生足够变化时,优化器会自动重建直方图,保持统计信息持续准确。DBA再也不用定期手动ANALYZE TABLE了。
升级前必须检查的5件事
准备升级前,一定要先过一遍这个清单:
- 运行升级检查器:MySQL Shell内置了升级检查工具,可以自动检查实例是否准备好升级。建议先跑一遍,把报告里的问题全部解决再动手。
- 检查认证插件兼容性:确认所有应用连接使用的认证方式。如果还在用
mysql_native_password,要么先迁移到caching_sha2_password,要么确保8.4配置中启用了旧认证。 - 检查表结构兼容性:8.4不再支持
FLOAT和DOUBLE列上的AUTO_INCREMENT。如果表结构中有这种定义,升级前必须改掉。分区键中也不允许使用前缀索引。 - 检查外键约束:8.4要求父表被引用的列必须有唯一键。如果8.0中存在不符合此规则的外键,升级会失败。
- 检查MySQL Connector/驱动版本:确认使用的驱动版本兼容8.4。老版本驱动可能不识别8.4的新认证方式或新特性。
总结
8.4 LTS不是8.0的小修小补,而是一次架构级的升级。InnoDB并行查询让大表查询不再依赖分库分表,Redo Log动态容量让调参告别停机,存算分离预留让云原生转型有了基础。MySQL 8.0的生命周期已经结束,现在是时候认真规划升级路径了。
小耶在手,SQL 不愁
还有什么想了解的,欢迎留言!小耶一定知无不言言无不尽……我们下次见~