2025
年
10
月
21
日,MySQL
9.5.0
创新版本发布。
本次发布带来权限管控强化、性能自动优化、安全加密升级等核心更新,同时修复数十个稳定性问题。
同步更新的还有 MySQL
8.4.7 和 MySQL
8.0.44。
需要注意的是,MySQL
8.0.x
将于
2026
年第二季度结束生命周期(EOL),建议大家尽早考虑升级到
MySQL 8.4.x LTS。
一、安全与权限:更精细的管控,更严格的防护
安全是数据库的基石,MySQL
9.5.0在账户权限、认证加密、数据传输三方面做了关键优化,尤其适合对权限管控要求高的企业场景。
1.
账户角色管理:新增“强制角色”激活机制
新增系统变量 activate_mandatory_roles(默认开启),用于单独激活“强制角色”,与原有activate_all_roles_on_login(登录激活所有角色)形成互补逻辑:
若activate_all_roles_on_login开启:忽略activate_mandatory_roles,强制角色+已授权角色全部激活;
若activate_all_roles_on_login关闭、activate_mandatory_roles开启:除账户默认角色外,额外激活强制角色;
两者均关闭:仅激活账户默认角色。
此前角色激活要么“全激活”要么“仅默认”,新增“强制角色”后,可针对核心权限(如数据只读、审计日志查看)设置“必须生效”,即使账户未主动授权,也能确保合规性(如金融场景的“审计角色强制启用”)。
2.
认证加密:密码安全性与兼容性双提升
密码哈希强度升级:caching_sha2_password_digest_rounds 默认值从
5000
提升至 10000,迭代次数增加意味着暴力破解难度呈指数级上升,同时兼容原有 caching_sha2_password 认证插件,无需修改应用连接逻辑。
LDAP认证废弃旧算法:SCRAM-SHA-1认证方法被标记为废弃,默认改用更安全的 SCRAM-SHA-256 ,对应变量 authentication_ldap_sasl_auth_method_name 默认值同步更新,需注意旧
LDAP
集成场景的兼容性适配。
密钥环功能修复:解决了密钥环组件无法读取短路径配置文件、通用密钥函数处理无效参数异常的问题,避免加密数据因配置问题导致的访问失败。
3.
复制传输:默认开启全链路加密
replication(复制)连接默认启用加密,涉及三个核心参数变更:
CHANGE
REPLICATION SOURCE TO 语句的 SOURCE_SSL 默认值改为
1(启用);
group_replication_ssl_mode 默认值改为 REQUIRED(必须加密);
group_replication_recovery_use_ssl 默认值改为 ON(恢复数据时加密)。
此前复制数据传输可能存在明文风险,此次默认加密后,主从节点、MGR
集群间的数据同步无需额外配置即可防护“中间人攻击”,尤其适合跨机房、云环境的部署场景。
二、性能优化:自动适配硬件,减少手动调参
MySQL 9.5.0
在
InnoDB、线程池、二进制日志等核心组件引入“自动配置”逻辑,降低运维成本的同时,让性能更贴合硬件资源。
1. InnoDB:日志写入线程智能开关
innodb_log_writer_threads(日志写入线程)的默认值不再固定,而是根据“是否开启二进制日志”和“CPU核心数”动态判断:
|
二进制日志状态 |
CPU核心数条件 |
innodb_log_writer_threads
默认值 |
|
关闭(log_bin=OFF) |
≤4核 |
OFF(单线程) |
|
关闭(log_bin=OFF) |
>4核 |
ON(多线程) |
|
开启(log_bin=ON) |
≤32核 |
OFF(单线程) |
|
开启(log_bin=ON) |
>32核 |
ON(多线程) |
日志写入是
InnoDB
的性能瓶颈之一,多线程适合高并发场景,但会增加
CPU
开销。此次动态适配逻辑,能在“低配置机器避免资源浪费”和“高配置机器释放性能”之间找到平衡,无需
DBA
手动判断。
2.
线程池:硬件感知自动调参
线程池插件新增“硬件自动配置”功能,可根据服务器
VCPU
数量自动设置 5
个核心参数的默认值,同时校验并修正手动配置的错误参数(如参数值超出合理范围时自动调整,并记录警告日志):
thread_pool_size(线程池大小)
thread_pool_max_transactions_limit(单线程池最大事务数)
thread_pool_query_threads_per_group(每组查询线程数)
thread_pool_algorithm(调度算法)
thread_pool_max_unused_threads(最大空闲线程数)
此前线程池参数需根据业务并发手动调整(如CPU核数2倍设置线程池大小),对运维经验要求高。自动配置后,新手也能快速搭建高性能线程池,减少“参数调错导致的性能瓶颈”。
3.
二进制日志:依赖历史容量大幅扩容
binlog_transaction_dependency_history_size(事务依赖历史大小)的默认值从
25000
提升至
100
万,最大值从 100
万提升至
1000
万。
该参数控制二进制日志中存储的“事务依赖关系”数量,容量不足会导致依赖信息丢失,进而影响主从复制的并行回放效率。此次扩容后,高并发场景(如秒杀、大促)下的复制延迟问题将显著缓解。
三、功能增强:JSON、多语言引擎、工具链升级
除了基础能力优化,MySQL
9.5.0
还在
JSON
处理、JavaScript
支持、诊断工具等方面新增实用功能,覆盖更多业务场景。
1. JSON
二元视图(JSON
Duality Views):修复稳定性问题
JSON
二元视图是
MySQL
用于“关系表与JSON数据双向映射”的功能,此次修复了5个关键问题,确保业务可用性:
支持
AUTO_INCREMENT
列显式插入0值,符合业务习惯。
禁止删除嵌套子视图的“单例子节点”,避免意外数据丢失。
解决含子查询的
WHERE
条件创建视图时的断言失败问题(此前可能导致数据库崩溃)。
修复
UPDATE
语句执行时的“地址映射错误”,避免服务异常退出。
统一
DML 与
SELECT
查询在derived_merge=off下的行为,减少逻辑不一致。
2.
多语言引擎(MLE):JavaScript
支持升级+内存自动配置
结果集大小限制提升:SQL
调用
JS
存储过程时的结果集上限提高,支持更大数据量的处理(如批量数据计算)。
JS
语法同步最新标准:MLE
的
JavaScript
支持升级至
ECMAScript 2025
规范,可使用箭头函数、解构赋值等新语法,开发存储过程更灵活;
内存自动分配:mle.memory_max(MLE最大内存)默认按“物理内存
5%”计算,且限制在
0.4GB~32GB
之间,避免手动设置不当导致内存溢出或资源浪费。
3.
新增诊断工具:mysqldm
快速收集问题信息
新增客户端工具 mysqldm(MySQL
Diagnostic Monitor),可自动执行预定义查询,收集服务器诊断信息(如进程列表、锁状态、性能指标),并以JSON格式存储。
支持自定义输出目录、采集迭代次数、迭代间隔,方便
DBA
将信息提交给
Oracle Support
快速定位问题,减少“手动执行多条
SQL
收集信息”的繁琐操作。
四、兼容性与废弃:这些内容需要注意
升级前必须关注“参数变更”与“废弃与移除”列表,避免因依赖旧功能导致升级失败。
1.
系统变量默认值变化
explain_format:从 TRADITIONAL 更改为 TREE
explain_json_format_version:从
1 更改为
2。
为了默认启用增强复制功能,gtid_mode 的默认值已更改为
ON。此外,enforce_gtid_consistency 的默认值也更改为
ON。
从此版本开始,innodb_change_buffering 的默认值为
ALL。这改进了二级索引更新的处理。
2.
已移除的功能
系统变量 group_replication_allow_local_lower_version_join(MySQL
8.4.0
起废弃);
系统变量 replica_parallel_type(MySQL
8.0.29
起废弃);
插件 semisync_master(替换为semisync_source)、semisync_slave(替换为semisync_replica)。
3.
标记为废弃的功能
密钥环插件keyring_okv:替换为keyring_kmip组件,后者支持
KMIP 1.1
协议(兼容
Oracle Key Vault、Gemalto
SafeNet
等主流密钥管理产品)。
SCRAM-SHA-1认证方法:建议尽快迁移至SCRAM-SHA-256。
4.
编译与系统兼容性
编译要求:CMake
最低版本升至
3.17.5,需提前升级编译工具。
Solaris
系统:支持
Clang/GCC
编译,默认使用
OpenSSL 3,解决旧版本编译兼容性问题。
Windows
系统:修复共享内存连接失败、含转义字符的用户名创建异常、非默认端口升级时的误报等问题。
内容载自:ORACLE网站
