一、字符集与函数行为变更(关键修复)
- 1. IFNULL() 在LIKE子句的排序规则冲突
- • 问题:
IFNULL()返回二进制排序规则(派生类型NONE),在LIKE操作中触发ER_CANT_AGGREGATE_2COLLATIONS错误。 - • 修复:降低
NONE类型的优先级,使LIKE优先使用另一操作数的排序规则,兼容性影响极小。 - • 行动项:检查涉及
IFNULL(col, '') LIKE '%pattern%'的查询是否正常。 - 2. 非ASCII标识符的CHECK约束兼容性
- • 生成列表达式中的非ASCII标识符(如中文列名),在非UTF-8客户端字符集(如GBK)下导致语法错误。
- • 影响:使用多语言列名时需确保客户端字符集兼容UTF-8。
二、安装与编译优化
- 1. 跨平台支持增强
- • macOS:支持Kerberos编译 (
-DWITH_KERBEROS),修复M1芯片状态变量读取问题。 - • Linux:
- • 支持RHEL/Oracle Linux 10的RPM安装
- • Debian包允许非root用户安装
- • Windows:
- • 配置器保留自定义
my.ini设置(原地升级) - • 修复自定义错误日志名称导致的升级卡死
- 2. 依赖库升级
组件 升级版本 影响 ICU 77-1 优化Unicode处理 zstd 1.5.7 提升压缩效率 Boost 1.87.0 最低要求变更 CMake ≥3.14.6 移除旧版本兼容 OpenSSL 支持v3 macOS默认适配新版本
三、安全与弃用警告
- 1. 函数弃用计划
- • 立即行动:
- •
MD5()和SHA1()已标记弃用,未来版本移除 → 迁移至SHA2() - • 密钥环插件API弃用 → 改用密钥环组件(迁移指南)
- • 移除项:系统变量
temptable_use_mmap(8.0.26已弃用) - 2. 安全配置强化
- • Windows配置器:禁止重复用户创建,root密码长度限制仅对新配置生效
- • 环境变量支持:CLI模式可通过
MYSQL_PWD文件路径传递密码
四、InnoDB 关键改进
- 1. 性能与稳定性
- • 变更缓冲默认值:
innodb_change_buffer_max_size=5(原25),平衡IO与内存负载 - • 修复内存泄漏(错误处理路径)
- • 主键重建时重复数据处理更健壮(阿里贡献)
- 2. 监控增强
- •
information_schema.innodb_cmp_per_index正确返回库/表名 - • 错误日志打印
buf_page_t和buf_block_t元数据(调试辅助)
五、复制与高可用升级
- 1. 组复制(Group Replication)
- • 新错误码
ER_GRP_RPL_APPLIER_THD_KILLED:区分线程终止类型(主动KILL vs 错误) - • 网络不稳定时:次要节点不再错误接管领导权,避免事务阻塞(修复集群不可写问题)
- • 成员变更优化:新成员仅连接活跃节点,5分钟后停止尝试连接旧成员
- 2. NDB集群二进制日志分片
- • 新增启动选项:
- •
--ndb-log-row-slice-count=N:分片数量 - •
--ndb-log-row-slice-id=M:当前服务器分片ID - • 价值:水平扩展二进制日志写入,提升大规模集群吞吐量
六、开发者工具与功能
- 1. JavaScript存储程序
- • 支持
BIT数据类型 → 类型转换规则见文档 - • GraalVM升级至23.1.7,Truffle库至24.2.1
- • 内存不足时严格报错(修复静默成功问题)
- 2. 向量化支持
- •
VECTOR_TO_STRING()正确设置输出排序规则 - 3. 客户端增强
- •
mysql客户端新增--commands选项:禁用交互命令(默认OFF),提升脚本安全性
七、重大漏洞修复(部分摘要)
| 模块 | 问题描述 | 影响 |
| InnoDB | 二级索引内存超配 → 触发 ERROR 1136 |
DDL失败 |
| 复制 | 半同步复制在binlog序号≥1000000时降级为异步 | 数据一致性风险 |
| 优化器 | 窗口函数 MIN() 忽略NULL值失败 |
计算结果错误 |
| 子查询 | 关联子查询+聚合导致重复键错误 | 查询中断 |
| 安装 | macOS未指定 --plugin-dir 时密钥环组件加载失败 |
root密码设置失败 |
| 触发器 | 调用存储例程的触发器执行异常 | 业务逻辑错误 |
升级行动建议
- 1. 测试优先:
- • 重点验证
IFNULL() + LIKE、MD5()/SHA1()替代方案、非ASCII列名表结构。 - 2. 安全迁移:
- • 密钥环插件 → 组件迁移(参考官方文档)
- • 停止使用
temptable_use_mmap。 - 3. 参数调整:
- • 检查
back_log默认值10000对Linux配置的要求(参考) - • 评估
innodb_change_buffer_max_size=5对IO负载的影响。 - 4. 监控:
- • 组复制新增状态变量
Gr_empty_consensus_proposals_count的波动。
完整变更清单见 MySQL 9.4.0 Release Notes
注意:此为创新版本,生产部署建议评估长期支持(LTS)版本策略。
浙公网安备 33010602011771号