第 42 章

MySQL 8.4 新特性

MySQL 8.4 LTS + 9.x 新特性

MySQL 8.4 于 2024 年 4 月发布,是 MySQL 历史上第一个明确标注 LTS(Long-Term Support) 的版本,支持周期到 2032 年。本章梳理 8.4 的关键变化以及 9.x Innovation Track 的前瞻。

1. 全新 LTS 版本策略

1.1 新版本命名体系

MySQL 8.4 开始,Oracle 引入了 Innovation Track 和 LTS Track 双轨制:

类型 示例版本 发布频率 支持期 适合场景
LTS Track 8.4.x, 8.4 LTS 每 2 年一个 LTS 版本 5+3 年(主要+扩展) 生产环境,稳定优先
Innovation Track 9.0, 9.1, 9.2... 每季度发布 仅到下一个版本 尝鲜,开发环境

**生产环境建议:**使用 LTS 版本(当前 8.4 LTS,下一个 LTS 预计是 9.4 或更高)。Innovation Track 版本没有长期支持,不适合生产。

1.2 支持生命周期

2. 关键默认值变更(升级必看)

**升级前必查:**以下默认值变更可能悄悄改变系统行为,务必在升级前用 mysqlcheck --upgrade 和 MySQL Shell 的 util.checkForServerUpgrade() 检查兼容性。

参数 8.0 默认值 8.4 默认值 影响
group_replication_paxos_single_leader OFF ON MGR 性能提升,但更改了选主行为
binlog_transaction_dependency_tracking COMMIT_ORDER WRITESET 并行复制默认更激进(性能提升)
replica_parallel_workers 4 4(无变化)
authentication_policy mysql_native_password caching_sha2_password 旧驱动需要升级
require_secure_transport OFF OFF(无变化)

3. 8.4 主要新特性

3.1 复制增强

-- 新语法:SHOW REPLICA STATUS(替代 SHOW SLAVE STATUS)
SHOW REPLICA STATUS\G

-- CHANGE REPLICATION SOURCE TO(替代 CHANGE MASTER TO)
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST = '192.168.1.100',
  SOURCE_PORT = 3306,
  SOURCE_USER = 'repl',
  SOURCE_PASSWORD = 'password',
  SOURCE_LOG_FILE = 'binlog.000001',
  SOURCE_LOG_POS = 4;

-- START/STOP REPLICA(替代 START/STOP SLAVE)
START REPLICA;
STOP REPLICA;

**兼容性:**旧语法(SLAVE 系列)在 8.4 中正式废弃(Deprecated),在 MySQL 9.x 中将被移除。建议尽快更新脚本和监控工具。

3.2 GTID 增强

-- 8.4 新增:GTID_SUBTRACT() 函数增强
-- 可以更灵活地计算 GTID 集合差异

-- 新增:gtid_purged 可以在运行时重置(更简单的复制恢复)
RESET BINARY LOGS AND GTIDS;  -- 替代旧的 RESET MASTER(该命令被废弃)

3.3 EXPLAIN 增强

-- 8.4 的 EXPLAIN FORMAT=JSON 输出更详细
EXPLAIN FORMAT=JSON SELECT * FROM orders WHERE user_id = 1\G

-- 新增:EXPLAIN INTO(将结果存入变量,便于程序化处理)
EXPLAIN FORMAT=JSON INTO @explain_result
SELECT * FROM orders WHERE user_id = 1;
SELECT JSON_PRETTY(@explain_result);

3.4 性能 Schema 增强

-- 新增事务级 I/O 统计
SELECT * FROM performance_schema.events_transactions_current\G

-- 新增:query_attributes(8.0 已有,8.4 增强)
-- 给查询附加键值对元数据,便于追踪
mysql_query_attribute_string("request_id", "req-12345");
SELECT /* 带上 request_id */ * FROM orders WHERE user_id = 1;

3.5 身份验证变更

MySQL 8.4 中,mysql_native_password 插件默认禁用(需要显式启用)。这意味着:

-- 检查当前用户认证插件
SELECT user, plugin FROM mysql.user;

-- 迁移到 caching_sha2_password
ALTER USER 'myapp'@'%' IDENTIFIED WITH caching_sha2_password BY 'newpassword';

-- 临时启用旧插件(不推荐长期使用)
[mysqld]
mysql_native_password=ON

3.6 GROUP BY 行为修正

8.4 中,ONLY_FULL_GROUP_BY SQL Mode 默认行为更严格,且有若干边缘情况修正:

-- 8.0 中允许的某些模糊 GROUP BY 在 8.4 中可能报错
-- 建议检查所有使用 GROUP BY 的查询

-- 查看当前 SQL Mode
SELECT @@sql_mode;

-- 如有兼容性问题,可临时关闭(不推荐)
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

4. 废弃特性(Deprecated)

以下特性在 8.4 中标记废弃,将在未来 MySQL 9.x 或下一个 LTS 中移除:

废弃特性 替代方案
SHOW SLAVE STATUS SHOW REPLICA STATUS
CHANGE MASTER TO CHANGE REPLICATION SOURCE TO
START/STOP SLAVE START/STOP REPLICA
RESET MASTER RESET BINARY LOGS AND GTIDS
mysql_native_password 插件(默认禁用) caching_sha2_password
--skip-host-cache 参数 host_cache_size=0
部分 Performance Schema 旧表名 查阅官方 Deprecation 文档

5. 已移除特性(MySQL 8.0→8.4)

从 8.0 升级到 8.4 时,以下特性已被移除:

6. MySQL 9.x Innovation Track 前瞻

9.0 主要变化(2024年7月发布)

-- MySQL 9.0+ VECTOR 类型示例
CREATE TABLE embeddings (
  id INT PRIMARY KEY AUTO_INCREMENT,
  content TEXT,
  embedding VECTOR(1536)  -- OpenAI ada-002 维度
);

INSERT INTO embeddings (content, embedding)
VALUES ('Hello world', TO_VECTOR('[0.1, 0.2, ..., 0.5]'));

-- 向量相似度查询(余弦距离)
SELECT id, content,
  VECTOR_DISTANCE(embedding, TO_VECTOR('[0.1, 0.2, ..., 0.5]'), 'COSINE') AS distance
FROM embeddings
ORDER BY distance LIMIT 5;

总结:MySQL 8.4 是当前最推荐的生产版本,主要升级点是新的复制命令语法和认证方式变化。9.x 的 VECTOR 类型最令人期待,但属于 Innovation Track,建议等到稳定后或下一个 LTS 版本再用于生产。

本章评分
4.7  / 5  (3 评分)

💬 留言讨论