第 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 支持生命周期
- MySQL 8.0:GA 2018年,Premier Support 到 2025年4月,Extended Support 到 2026年4月
- MySQL 8.4 LTS:GA 2024年4月,Premier Support 到 2029年4月,Extended Support 到 2032年4月
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 插件默认禁用(需要显式启用)。这意味着:
- 旧应用使用
mysql_native_password认证的连接会失败 - 旧版 JDBC 驱动(5.x)可能无法连接,需升级到 Connector/J 8.x
- 迁移方案:将用户改为
caching_sha2_password,或临时启用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 时,以下特性已被移除:
query_cache_*所有参数(Query Cache 在 8.0 已移除,8.4 连参数也没了)innodb_file_format(Barracuda/Antelope,8.0 移除)innodb_large_prefix(8.0 移除)- 部分旧的
INFORMATION_SCHEMA视图
6. MySQL 9.x Innovation Track 前瞻
9.0 主要变化(2024年7月发布)
- **VECTOR 数据类型:**原生向量存储,支持向量距离计算(ANN 搜索)。这是 AI 应用的重大特性。
- **JavaScript 存储程序:**支持用 JavaScript 编写存储过程和函数(通过 GraalVM)
- **正式移除 mysql_native_password:**8.4 废弃,9.0 移除
- **移除旧 SLAVE 命令:**全部替换为 REPLICA 系列
-- 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 版本再用于生产。