MySQL 9.6.0:MD5()/SHA1() 移入组件,外键约束交给 SQL 层
MySQL 9.6.0 于 2026-01-20 发布。发布说明:https://dev.mysql.com/doc/relnotes/mysql/9.7/en/news-9-6-0.html
这个版本里有几处会直接影响存量代码和运维配置的改动,按模块记录如下。
MD5()/SHA1() 移入 classic_hashing 组件
MD5() 和 SHA1() 这两个 SQL 函数从服务器内核迁移到独立组件 classic_hashing(WL #16956,参见 Legacy Hashing Component)。目的是把已弃用的哈希算法单独管起来,便于按安全合规要求控制是否可用。
存量 SQL 如果还在调用 MD5() 或 SHA1(),需要显式安装组件:
INSTALL COMPONENT 'file://component_classic_hashing';
不装组件就调用这两个函数会失败,属于升级前必须确认的兼容点。同一批安全改动里,MySQL Server 升级为使用非弃用的 OpenSSL 算法。
外键约束与级联从 InnoDB 移到 SQL 层
以前外键约束和级联操作由 InnoDB 存储引擎处理,自本版起改由 MySQL Server 的 SQL 层处理(WL #11249)。带来的变化是二进制日志更完整、可分析性更好:数据变更始终可见、被记录并被复制。该改动完全向后兼容。
如果出于某些原因要继续让 InnoDB 处理外键约束与级联,需要用新的系统变量启动服务器:
[mysqld]
innodb_native_foreign_keys = ON
同一节里,opentelemetry-cpp 升级到 1.23.0。
container_aware 启动选项
MySQL Server 新增启动选项 container_aware,控制服务器发现并遵循容器设置的 CPU 与内存资源限制(WL #16937)。跑在容器里的实例可以据此让资源上限与 cgroup 保持一致。
InnoDB 侧还有若干可观测性和正确性改动:
- redo 日志错误消息现在包含当前 LSN 与 redo 容量信息。
- 新增警告码
ER_IB_WRN_REDO_DISABLED_INFO与错误码ER_IB_MSG_LOG_WRITER_WAIT_ON_NEW_LOG_FILE_INFO。 MONITOR输出增加 redo 容量细节。- 修复
XA PREPARED事务在--innodb-force-recovery非零重启时状态被错误改成ACTIVE的问题。 - 修复小部分更新后读取 blob 因 MVCC 不一致返回错误结果。
- 修复
FLUSH TABLE FOR EXPORT与DROP TABLE/DML 并发时的死锁。
GTID set 新数据结构
复制部分新增了一套 GTID set 数据结构,用更简单、更现代、更高效的 Global Transaction ID 处理库替换旧实现。对外行为不变,属于内部实现层面的替换。
Performance Schema:TEMPORARY_ACCOUNT_LOCKS
Performance Schema 新增 TEMPORARY_ACCOUNT_LOCKS 表,用于查看被临时锁定的账户(WL #16803)。HOST_CACHE 表同时新增两列:COUNT_ACCOUNT_LOCKED_ERRORS、COUNT_TEMPORARY_ACCOUNT_LOCKED_ERRORS。
其他改动与修复
Audit Log:修改 audit_log_rotate_on_size 需要 AUDIT_ADMIN 权限;Audit Log 引入 component 形式的组件化实现。
可插拔认证:连接不存在的用户时统一返回 Access denied for user,不再抛出 Plugin 'mysql_native_password' is not loaded 这类插件报错,避免通过错误信息区分用户是否存在。
SQL 语法:JSON duality views 支持表级 DML 标记,包括 INSERT/UPDATE/DELETE 以及 NO INSERT 等限制标记。
配置与工具修复:
mysqldump --order-by-primary之前会按表上每个索引排序,而不是只按主键排序。--slow-query-log-file可在慢查询日志未启用时使用。--general-log-file可在通用日志关闭时设置。--open-win-firewall可在 TCP/IP 连接禁用时使用,本版起改为报错。