代码 MySQL 9.6.0:MD5()/SHA1() 移入 classic_hashing 组件,外键约束交给 SQL 层

2026-09-13 21:03:09

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 EXPORTDROP 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_ERRORSCOUNT_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 连接禁用时使用,本版起改为报错。
复制全文 生成海报 MySQL 数据库 升级 外键 安全

推荐文章

程序员茄子在线接单