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 默认值的变化,是确保平滑升级的关键。

相关推荐
HAWK eoni1 小时前
Mysql 驱动程序
数据库·mysql
xxjj998a2 小时前
Laravel4.x核心特性全解析
android·mysql·laravel
何中应2 小时前
CentOS 7安装、卸载MySQL数据库(二)
数据库·mysql·centos
梁萌2 小时前
mysql使用事件做日志表数据转移
数据库·mysql
lThE ANDE2 小时前
MySQL中的TRUNCATE TABLE命令
数据库·mysql
STER labo3 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
dreamZhanglx3 小时前
MySQL进阶
数据库·mysql
xmjd msup3 小时前
MySQL 函数
数据库·mysql
jefl jxak4 小时前
mysql用户名怎么看
数据库·mysql