注: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_DEFINER和ALLOW_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 默认值 | 变更意义 |
|---|---|---|---|
| 200 | 10000 | 旧值适配机械硬盘,新值适配现代 SSD/RAID,提升刷脏页能力 |
| fsync | O_DIRECT (若系统支持) | 减少操作系统页缓存双重缓冲,降低 I/O 开销 |
| ON | OFF | AHI 在高并发写或特定负载下可能引起争用,默认关闭更稳妥,建议按需开启 |
| all | none | 同样因 SSD 普及,变更缓冲的收益降低,默认关闭以减少复杂性 |
| 16M | 64M | 增大日志缓冲,减少高频事务提交时的磁盘 I/O |
| 依赖 io threads | 128 | 固定为 128,提供更可预测的双写缓冲行为 |
| ON | OFF | 默认不在 core 文件中转储巨大的 buffer pool,防止 core 文件过大占满磁盘 |
| 1GB | 总内存的 3% (1-4GB 区间) | 更智能地根据服务器内存动态调整临时表内存上限 |
| 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 TO;SHOW SLAVE STATUS变为SHOW REPLICA STATUS;RESET SLAVE变为RESET REPLICA等。系统变量:如
master_info_repository、relay_log_info_repository已被移除;状态变量如Com_slave_start变为Com_replica_start。选项:
MASTER_HOST、MASTER_PORT等连接选项变为SOURCE_HOST、SOURCE_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 格式版本。集合操作优化:
EXCEPT和INTERSECT默认使用 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_seconds;binlog_transaction_dependency_tracking已移除;have_openssl/have_ssl等已移除。
六、 升级注意事项与兼容性检查清单
从 8.0.46 升级到 8.4.9 属于跨 LTS 的主版本升级,需谨慎操作:
认证兼容:检查是否有用户仍使用
mysql_native_password,提前改为caching_sha2_password:ALTER USER 'user'@'host' IDENTIFIED WITH caching_sha2_password BY 'password';。SQL 与 schema 检查:
移除
AUTO_INCREMENT从FLOAT/DOUBLE列。检查外键是否引用了唯一键,若无则需添加唯一索引或调整业务逻辑。
检查是否使用了
FLUSH HOSTS或CHANGE MASTER TO等已移除语法(尤其在存储过程、脚本中)。
配置清理:从
my.cnf中移除已废弃/移除的系统变量(如default_authentication_plugin,expire_logs_days,master_info_repository等),否则 8.4 可能无法启动。字符集:建议将
utf8mb3迁移至utf8mb4,因为utf8mb3已弃用。预检查:若在云环境(如 RDS),利用官方的预升级检查工具;自建环境可使用
mysql-shell的util.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 默认值的变化,是确保平滑升级的关键。