MySQL8.0.46 与 MySQL8.4.9:跨越代际的深度差异解析与升级全指南

注:MySQL 8.0.46 是 8.0 系列的最后一个维护版本(于 2026 年 4 月 21 日发布),随后 8.0 系列即进入 EOL(生命周期终止)状态;而 MySQL 8.4.9 是 8.4 LTS(长期支持)系列的重要维护版本。两者虽同属 8.x 大系,但 8.4 作为新的 LTS 基线,包含了大量架构调整、默认值变更及老旧特性的清理。


一、 版本定位与生命周期:为何必须关注这次跨越

MySQL 官方自 8.0 之后调整了版本发布模型,引入了 LTS(Long Term Support,长期支持)与创新版(Innovation)的区分。理解这一点是理解两个版本差异的前提。

  • MySQL 8.0.46(EOL):8.0 系列自 2018 年发布以来,一直是过去几年的绝对主力。但截至 2026 年 4 月 30 日,该系列已正式结束生命周期(End of Life)。这意味着不再有官方的安全补丁、Bug 修复或支持。继续在生产环境使用 8.0.46 将面临合规与安全风​​险。

  • MySQL 8.4.9(LTS):8.4 系列于 2024 年 4 月发布,被指定为新的 LTS 版本。其前缀支持(Premier Support)持续至约 2029 年 4 月,扩展支持(Extended Support)甚至延续到 2032 年 4 月左右。它是目前官方推荐的生产环境"稳定锚点"。

小结:从 8.0.46 到 8.4.9 不仅是补丁版本的迭代,更是从"旧的稳定版"向"新的长期支持基线"的代际交接。8.4.9 移除了大量 8.0 中已弃用的历史包袱,并引入了适应现代硬件和新安全标准的默认配置。

mysql8.0.46一键安装https://onefire.blog.csdn.net/article/details/160682983

mysql8.4.9 一键安装https://onefire.blog.csdn.net/article/details/160684425


二、 安全与认证机制的重大变革

安全是 8.4 系列改动最剧烈的领域之一,许多旧有习惯需要被打破。

1. mysql_native_password的退场

在 MySQL 8.0 中,caching_sha2_password已成为默认认证插件,但 mysql_native_password仍默认启用以兼容旧客户端。到了 MySQL 8.4,这一妥协被取消:

  • 8.0.46 :默认启用 mysql_native_password,旧应用通常无需修改即可连接。

  • 8.4.9默认禁用mysql_native_password插件。如果业务仍有老旧客户端(如非常旧的 PHP 版本或某些旧驱动)依赖此插件,连接将会失败。若必须启用,需在配置文件中显式设置 mysql_native_password=ON,但这仅是过渡方案,因为该插件将在 MySQL 9.0 中被彻底移除。

  • 变量变更 :系统变量 default_authentication_plugin已在 8.4 中被移除,取而代之的是 authentication_policy,提供了更灵活的多策略控制。

2. 权限细化与 TLS 增强

  • 细粒度权限 :8.4 将原有的 SET_USER_ID权限拆分为 SET_ANY_DEFINERALLOW_NONEXISTENT_DEFINER,提升了权限控制的精确度。同时新增了 FLUSH_PRIVILEGES(专用于重载权限,原需 RELOAD 权限)和 TRANSACTION_GTID_TAG权限。

  • TLS 强制验证 :新增 tls-certificates-enforced-validation变量,若启用,当 TLS 证书无效时,服务器将拒绝启动或重载,避免了因证书问题导致的潜在安全风险。

  • 弱加密套件移除:8.4 不再支持不符合现代安全标准的弱 TLS 加密套件。


三、 InnoDB 引擎与默认配置的现代适配

MySQL 8.4 对 InnoDB 的默认参数进行了大幅调整,使其更贴合现代服务器硬件(如大内存、SSD、多核 CPU),而非沿用十年前的保守默认值。

1. 核心 I/O 与性能参数变更

参数名 MySQL 8.0.46 默认值 MySQL 8.4.9 默认值 变更意义
innodb_io_capacity 200 10000 旧值适配机械硬盘,新值适配现代 SSD/RAID,提升刷脏页能力
innodb_flush_method fsync O_DIRECT​ (若系统支持) 减少操作系统页缓存双重缓冲,降低 I/O 开销
innodb_adaptive_hash_index ON OFF AHI 在高并发写或特定负载下可能引起争用,默认关闭更稳妥,建议按需开启
innodb_change_buffering all none 同样因 SSD 普及,变更缓冲的收益降低,默认关闭以减少复杂性
innodb_log_buffer_size 16M 64M 增大日志缓冲,减少高频事务提交时的磁盘 I/O
innodb_doublewrite_pages 依赖 io threads 128 固定为 128,提供更可预测的双写缓冲行为
innodb_buffer_pool_in_core_file ON OFF 默认不在 core 文件中转储巨大的 buffer pool,防止 core 文件过大占满磁盘
temptable_max_ram 1GB **总内存的 3%**​ (1-4GB 区间) 更智能地根据服务器内存动态调整临时表内存上限
innodb_purge_threads 4 自适应​ (≤16核为1,否则4) 根据 CPU 核数自适应清理线程数

2. 其他 InnoDB 调整

  • innodb_parallel_read_threads默认值改为 可用逻辑处理器数/8(最小 4)。

  • innodb_read_io_threads默认值改为 可用逻辑处理器数/2(最小 4)。

  • innodb_dedicated_server=ON时,redo log 容量计算改为基于 CPU 而非内存,且不再强制改变 innodb_flush_method


四、 复制、高可用与 Group Replication 的演进

1. 术语去重写(Source / Replica)

MySQL 8.4 彻底贯彻了移除 Master/Slave 术语的行动,全部替换为 Source/Replica。这不仅涉及文档,更涉及 SQL 语法和系统变量:

  • SQL 语句CHANGE MASTER TO已移除,必须使用 CHANGE REPLICATION SOURCE TOSHOW SLAVE STATUS变为 SHOW REPLICA STATUSRESET SLAVE变为 RESET REPLICA等。

  • 系统变量 :如 master_info_repositoryrelay_log_info_repository已被移除;状态变量如 Com_slave_start变为 Com_replica_start

  • 选项MASTER_HOSTMASTER_PORT等连接选项变为 SOURCE_HOSTSOURCE_PORT

2. 功能增强

  • GTID 标签化(Tagged GTIDs) :扩展了 GTID 格式(UUID:TAG:NUMBER),允许为事务组打标签,便于区分数据操作与运维操作,需 TRANSACTION_GTID_TAG权限。

  • 多线程复制(MTA) :此前使用 SQL_AFTER_GTIDS会强制切单线程,8.4 现支持并行应用,提升性能。

  • Group Replication :默认一致性级别改为 AFTER(强一致性);新增单主模式预垃圾回收机制;新增网络诊断指标(如 MEMBER_FAILURE_SUSPICIONS_COUNT)。

  • Clone 插件:放宽版本限制,允许在同大版本(如 8.4.x)的不同小版本间直接克隆,无需严格匹配小版本号。


五、 SQL 语法、功能与弃用移除

1. 新增功能

  • 直方图自动更新 :使用 ANALYZE TABLE ... UPDATE HISTOGRAM AUTO可启用,默认仍为手动。

  • EXPLAIN 增强 :支持 EXPLAIN FOR SCHEMA指定库;支持 EXPLAIN FORMAT=JSON INTO @var存入变量;新增 explain_json_format_version控制 JSON 格式版本。

  • 集合操作优化EXCEPTINTERSECT默认使用 Hash 算法(受 hash_set_operations控制),性能通常优于旧算法。

  • TABLESAMPLE 子句 :支持伯努利抽样(BERNOULLI)等,如 SELECT * FROM t TABLESAMPLE BERNOULLI(10)

  • mysqldump :新增 --output-as-version选项,可生成兼容旧版(如 8.0.23 之前)的备份文件。

2. 严格化与报错(不再仅是警告)

  • AUTO_INCREMENT on FLOAT/DOUBLE :在 8.0 中仅是弃用警告,在 8.4 中会直接报错,必须改为整数类型。

  • 外键约束 :8.0 允许引用父表的非唯一索引;8.4 要求引用的父列必须有唯一索引 (由 restrict_fk_on_non_standard_key控制,默认 ON),强化了关系完整性。

3. 移除的功能与工具

  • 工具mysqlpump(原已废弃)已被移除。

  • 语句FLUSH HOSTS已移除,需用 TRUNCATE TABLE performance_schema.host_cache替代。

  • 插件 :旧版 Keyring 插件(keyring_file, keyring_encrypted_file, keyring_oci)已移除,必须使用对应的 Component 架构。

  • 变量expire_logs_days已移除,需使用 binlog_expire_logs_secondsbinlog_transaction_dependency_tracking已移除;have_openssl/have_ssl等已移除。


六、 升级注意事项与兼容性检查清单

从 8.0.46 升级到 8.4.9 属于跨 LTS 的主版本升级,需谨慎操作:

  1. 认证兼容 :检查是否有用户仍使用 mysql_native_password,提前改为 caching_sha2_passwordALTER USER 'user'@'host' IDENTIFIED WITH caching_sha2_password BY 'password';

  2. SQL 与 schema 检查

    • 移除 AUTO_INCREMENTFLOAT/DOUBLE列。

    • 检查外键是否引用了唯一键,若无则需添加唯一索引或调整业务逻辑。

    • 检查是否使用了 FLUSH HOSTSCHANGE MASTER TO等已移除语法(尤其在存储过程、脚本中)。

  3. 配置清理 :从 my.cnf中移除已废弃/移除的系统变量(如 default_authentication_plugin, expire_logs_days, master_info_repository等),否则 8.4 可能无法启动。

  4. 字符集 :建议将 utf8mb3迁移至 utf8mb4,因为 utf8mb3已弃用。

  5. 预检查 :若在云环境(如 RDS),利用官方的预升级检查工具;自建环境可使用 mysql-shellutil.checkForServerUpgrade()进行兼容性评估。


七、 总结:该如何选择?

  • 现有 8.0.46 用户 :鉴于 8.0 已 EOL,强烈建议制定升级计划迁移至 8.4 LTS。8.4.9 提供了更长的支持周期、更安全的默认配置以及对现代硬件更优的性能参数预设。

  • 新部署项目 :应直接选择 MySQL 8.4.9 LTS(或更新的 8.4.x),避免未来短期内再次面临 EOL 升级压力。除非有极强的兼容性顾虑且暂时无法测试,否则不应新装 8.0 系列。

MySQL 8.4 并非颠覆性的重构,而是一次"去芜存菁"的成熟化迭代。它清理了积攒近 8 年的技术债务,将默认配置对齐到 2024+ 的硬件与安全基准。理解上述差异,尤其是认证、复制术语和 InnoDB 默认值的变化,是确保平滑升级的关键。

相关推荐
摇滚侠1 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
ApacheSeaTunnel3 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
DARLING Zero two♡4 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
活宝小娜5 小时前
mysql详细安装教程
数据库·mysql·adb
Database_Cool_5 小时前
什么是数据仓库物化视图?AnalyticDB MySQL 实时物化视图能力解析
人工智能·mysql·阿里云
Database_Cool_5 小时前
即席查询(Ad-Hoc)数据库选型:AnalyticDB MySQL 秒级 Ad-Hoc 分析方案
数据库·mysql
一杯奶茶¥5 小时前
水果销售网站 CRM客户信息管理系统 超市管理系 酒店管理系统 健身房管理系统 在线音乐网站 校园招聘系统
java·vue.js·spring boot·mysql·spring·java项目
用户800391387836 小时前
使用 Gemini 解决 MySQL 常见问题
mysql
Database_Cool_7 小时前
什么是湖仓一体?和数据仓库的本质区别(附 AnalyticDB MySQL 湖仓一体方案)
数据库·数据仓库·mysql
XZ-0700018 小时前
MySQL事务
数据库·mysql·oracle