gslsoft

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、字符集与函数行为变更(关键修复)

  1. 1. IFNULL() 在LIKE子句的排序规则冲突
    • • 问题IFNULL() 返回二进制排序规则(派生类型NONE),在LIKE操作中触发 ER_CANT_AGGREGATE_2COLLATIONS 错误。
    • • 修复:降低 NONE 类型的优先级,使 LIKE 优先使用另一操作数的排序规则,兼容性影响极小。
    • • 行动项:检查涉及 IFNULL(col, '') LIKE '%pattern%' 的查询是否正常。
  2. 2. 非ASCII标识符的CHECK约束兼容性
    • • 生成列表达式中的非ASCII标识符(如中文列名),在非UTF-8客户端字符集(如GBK)导致语法错误。
    • • 影响:使用多语言列名时需确保客户端字符集兼容UTF-8。

二、安装与编译优化

  1. 1. 跨平台支持增强
    • • macOS:支持Kerberos编译 (-DWITH_KERBEROS),修复M1芯片状态变量读取问题。
    • • Linux
      • • 支持RHEL/Oracle Linux 10的RPM安装
      • • Debian包允许非root用户安装
    • • Windows
      • • 配置器保留自定义my.ini设置(原地升级)
      • • 修复自定义错误日志名称导致的升级卡死
  2. 2. 依赖库升级
    组件 升级版本 影响
    ICU 77-1 优化Unicode处理
    zstd 1.5.7 提升压缩效率
    Boost 1.87.0 最低要求变更
    CMake ≥3.14.6 移除旧版本兼容
    OpenSSL 支持v3 macOS默认适配新版本

三、安全与弃用警告

  1. 1. 函数弃用计划
    • • 立即行动
      • • MD5() 和 SHA1() 已标记弃用,未来版本移除 → 迁移至 SHA2()
      • • 密钥环插件API弃用 → 改用密钥环组件迁移指南
    • • 移除项:系统变量 temptable_use_mmap (8.0.26已弃用)
  2. 2. 安全配置强化
    • • Windows配置器:禁止重复用户创建,root密码长度限制仅对新配置生效
    • • 环境变量支持:CLI模式可通过 MYSQL_PWD 文件路径传递密码

四、InnoDB 关键改进

  1. 1. 性能与稳定性
    • • 变更缓冲默认值:innodb_change_buffer_max_size=5(原25),平衡IO与内存负载
    • • 修复内存泄漏(错误处理路径)
    • • 主键重建时重复数据处理更健壮(阿里贡献)
  2. 2. 监控增强
    • • information_schema.innodb_cmp_per_index 正确返回库/表名
    • • 错误日志打印 buf_page_t 和 buf_block_t 元数据(调试辅助)

五、复制与高可用升级

  1. 1. 组复制(Group Replication)
    • • 新错误码 ER_GRP_RPL_APPLIER_THD_KILLED:区分线程终止类型(主动KILL vs 错误)
    • • 网络不稳定时:次要节点不再错误接管领导权,避免事务阻塞(修复集群不可写问题)
    • • 成员变更优化:新成员仅连接活跃节点,5分钟后停止尝试连接旧成员
  2. 2. NDB集群二进制日志分片
    • • 新增启动选项:
      • • --ndb-log-row-slice-count=N:分片数量
      • • --ndb-log-row-slice-id=M:当前服务器分片ID
    • • 价值:水平扩展二进制日志写入,提升大规模集群吞吐量

六、开发者工具与功能

  1. 1. JavaScript存储程序
    • • 支持 BIT 数据类型 → 类型转换规则见文档
    • • GraalVM升级至23.1.7,Truffle库至24.2.1
    • • 内存不足时严格报错(修复静默成功问题)
  2. 2. 向量化支持
    • • VECTOR_TO_STRING() 正确设置输出排序规则
  3. 3. 客户端增强
    • • mysql 客户端新增 --commands 选项:禁用交互命令(默认OFF),提升脚本安全性

七、重大漏洞修复(部分摘要)

模块 问题描述 影响
InnoDB 二级索引内存超配 → 触发 ERROR 1136 DDL失败
复制 半同步复制在binlog序号≥1000000时降级为异步 数据一致性风险
优化器 窗口函数 MIN() 忽略NULL值失败 计算结果错误
子查询 关联子查询+聚合导致重复键错误 查询中断
安装 macOS未指定 --plugin-dir 时密钥环组件加载失败 root密码设置失败
触发器 调用存储例程的触发器执行异常 业务逻辑错误

升级行动建议

  1. 1. 测试优先
    • • 重点验证 IFNULL() + LIKEMD5()/SHA1() 替代方案、非ASCII列名表结构。
  2. 2. 安全迁移
    • • 密钥环插件 → 组件迁移(参考官方文档)
    • • 停止使用 temptable_use_mmap
  3. 3. 参数调整
    • • 检查 back_log 默认值10000对Linux配置的要求(参考
    • • 评估 innodb_change_buffer_max_size=5 对IO负载的影响。
  4. 4. 监控
    • • 组复制新增状态变量 Gr_empty_consensus_proposals_count 的波动。

完整变更清单见 MySQL 9.4.0 Release Notes
注意:此为创新版本,生产部署建议评估长期支持(LTS)版本策略。

posted on 2025-07-28 02:56  gslsoft  阅读(153)  评论(0)    收藏  举报