- **重要说明;组复制**:组通信系统(GCS)负责处理成员之间的组复制通信,并跟踪组成员身份以及所有组成员之间的连接。成员身份跟踪包括当前及前两次迭代的成员身份。当某个成员离开时,组内剩余成员会保留该离开成员的记录,但在其返回前停止与其通信。例如:组内包含成员M1、M2和M3。M3离开组后,M1和M2停止与M3通信。当新成员(M4)加入时,它会了解该组前几次迭代的成员身份,并尝试与所有服务器通信,包括前几次迭代中的服务器(此处为M3)。 若某些先前的服务器已消失且不再返回,新成员会持续尝试连接这些缺失的服务器;在某些情况下,这些持续的连接尝试可能会引入网络延迟,影响组成员的通信。 为避免此问题,现在对属于组成员身份迭代中的服务器的连接会在5分钟后停止,这一时间应足以重新建立有效连接,同时不会对组通信造成持续影响。(漏洞 #37704514)
- **性能**:在MySQL 8.0中已优化移除的某些查询中的冗余条件,在后续版本中不再被移除,导致此类查询的性能大幅下降。(漏洞 #117907、漏洞 #37808260) 参考:此问题是以下漏洞的回归:漏洞 #30112096。
- **InnoDB**:即使不需要,每次行更新时都会检查该表是否被外键引用。 现在仅在需要时才执行该检查。(漏洞 #37867653)
- **InnoDB**:在缓冲池创建期间为线程设置处理器亲和性时,未正确解析`pthread_setaffinity_np`的返回值。因此,即使亲和性设置失败,也不会返回错误。(漏洞 #37825544)
- **InnoDB**:重建主键时,若存在重复数据,服务器有时会遇到问题,可能导致服务器意外停止。 感谢Xizhe Zhang及阿里巴巴团队的贡献。(漏洞 #37822992)
- **InnoDB**:修复了与删除属于索引一部分的列相关的问题。(漏洞 #37726881)
- **InnoDB**:由于未受保护的静态数组,MySQL社区版二进制文件包含不必要的OpenTelemetry符号。(漏洞 #37689163)
- **InnoDB**:双写缓冲区过大。计算每个文件的段数时,总会额外添加一个段,而实际上只有当双写实例的数量不能被双写文件的数量整除时,才应添加额外的段。(漏洞 #37684656)
- **InnoDB**:修复了与`DELETE`操作相关的问题。(漏洞 #37478594)
- **InnoDB**:在`VARCHAR`(https://dev.mysql.com/doc/refman/9.4/en/char.html)列上创建二级索引时,分配的内存可能超过配置值,分配的内存量与`innodb_ddl_buffer_size`(https://dev.mysql.com/doc/refman/9.4/en/innodb-parameters.html#sysvar_innodb_ddl_buffer_size)的值直接相关,从而导致类似“ERROR 1136 (21S01):第1行的列数与值数不匹配”的错误。(漏洞 #37233273)
- **InnoDB**:修复了与空间数据类型列索引相关的问题。(漏洞 #36682518)
- **InnoDB**:服务器关闭期间,临时表处理程序未能正常终止,可能导致服务器意外终止。通过实施一种机制来跟踪并正确清理与每个线程相关联的临时表对象,已解决此问题。(漏洞 #36538081)
- **InnoDB**:当MySQL企业备份增量备份失败后,若重做日志消费者滞后,可能会导致长时间的信号量等待崩溃,从而阻止重做日志写入线程推进。返回的错误消息类似如下: [警告] [MY-013934] [InnoDB] 重做日志写入程序正在等待MEB重做日志消费者,该消费者当前正在读取LSN=23335640211468,这阻止了重做日志后续部分的回收。考虑增加innodb_redo_log_capacity。 (漏洞 #36330455)
- **InnoDB**:修复了与表上的范围查询相关的问题。(漏洞 #31360522)
- **复制**:修复了`libs/mysql/binlog/event/event_reader.cpp`中的内部内存管理问题。(漏洞 #37371443)
- **复制**:在半同步复制中,当二进制日志后缀的长度超过六位(.999999),使得下一个日志文件变为例如`mysql-bin.1000000`时,复制协议会意外地从半同步变为异步。 感谢曹吴昊的贡献。(漏洞 #115861、漏洞 #37024069)
- **组复制**:系统状态变量`Gr_empty_consensus_proposals_count`(https://dev.mysql.com/doc/refman/9.4/en/group-replication-status-variables.html#statvar_Gr_empty_consensus_proposals_count)未按预期更新。(漏洞 #37937927)
- **组复制**:在网络环境不稳定的情况下,启用了`group_replication_paxos_single_leader=ON`(https://dev.mysql.com/doc/refman/9.4/en/group-replication-system-variables.html#sysvar_group_replication_paxos_single_leader)的组复制InnoDB集群中,一些长时间运行的事务会陷入“等待处理程序提交”状态。结果,`group_replication_set_as_primary()`(https://dev.mysql.com/doc/refman/9.4/en/group-replication-functions-for-new-primary.html#function_group-replication-set-as-primary)被迫等待,进而阻塞其他传入的查询,导致集群不可写。长时间运行的事务陷入“等待处理程序提交”状态的问题发生如下:
在间歇性网络分区期间,次要节点由于成员身份信息过时或不准确而错误地承担了领导者角色。这导致同步节点编号分配冲突,使得来自主节点的事务无法完成。 我们通过确保次要节点在将视图消息推送到Paxos之前始终反映最新、准确的状态来修复此问题。这确保过时或不一致的成员身份信息不会导致领导力或同步节点编号分配冲突。(漏洞 #37764970) 参考:另见漏洞 #117424、漏洞 #37237959、漏洞 #37645674。
- **Fedora 24上的RPM安装**无法完成,因为从上游拉取了冲突的包。此修复添加了适当的废弃声明以阻止冲突的包。(漏洞 #37976913)
- **某些调用存储例程的触发器并非总能正确执行**。(漏洞 #37915445)
- **内部函数`transform_table_subquery_to_join_with_derived()`在调用后未能正确恢复当前查询块,导致断言错误**。(漏洞 #37884336) 参考:另见漏洞 #37832605。
- **移除了`item_cmpfunc.cc`中潜在的内存泄漏**。(漏洞 #37883669)
- **使用包含子查询的CTE的视图并非总能得到正确处理**。(漏洞 #37832605)
- **如果启用了`component_keyring_encrypted_file`(https://dev.mysql.com/doc/refman/9.4/en/keyring-encrypted-file-component.html)或`component_keyring_file`(https://dev.mysql.com/doc/refman/9.4/en/keyring-file-component.html)且`binlog_encryption`(https://dev.mysql.com/doc/refman/9.4/en/replication-options-binary-log.html#sysvar_binlog_encryption)设置为`ON`,由于访问密钥环数据文件时出现问题,服务器无法在Docker容器中启动**。(漏洞 #37821740)
- **移除了`sql/opt_costconstantcache.cc`中的一个警告,该警告由设置而非比较值的断言引起**。(漏洞 #37814484)
- **在已使用系统的APT仓库安装MySQL的Ubuntu 25.04系统上,无法安装Oracle的MySQL包**。(漏洞 #37804480)
- **在Fedora 24上,当系统上已安装MariaDB时,由于包冲突,无法安装Oracle MySQL RPM包**。通过此修复,冲突得到妥善处理,使得MySQL服务器能够成功安装。(漏洞 #37798784)
- **改进了先前针对关闭期间客户端连接并非总能正确终止的问题的修复**。(漏洞 #37755594) 参考:此问题是以下漏洞的回归:漏洞 #35854919。
- **当计算的块数超过65535时,`INTERSECT`中触发断言错误**,这可能发生在估计的行数非常高,或者`set_operations_buffer_size`(https://dev.mysql.com/doc/refman/9.4/en/server-system-variables.html#sysvar_set_operations_buffer_size)系统变量设置过低的情况下。 此修复添加了对此情况的缺失检查。如果需要超过2个块文件集,我们会恢复为基于索引临时表的去重。为提醒用户,此信息会在查询的注释和优化器跟踪中呈现。 作为此修复的一部分,`set_operations_buffer_size`使用的块大小从128增加到1024。(漏洞 #37742092)
- **Fedora 42的RPM安装包已适配Fedora 42及更高版本中`/usr/bin`和`/usr/sbin`目录合并的情况**。(漏洞 #37737658)
- **使用InnoDB的全文搜索性能,特别是短语搜索,已得到改进**。文档ID匹配的效率有所提升。(漏洞 #37682648)
- **当`keyring_okv`插件(参见《使用keyring_okv KMIP插件》(https://dev.mysql.com/doc/refman/9.4/en/keyring-okv-plugin.html))已安装但配置不正确时,对`performance_schema.keyring_keys`(https://dev.mysql.com/doc/refman/9.4/en/performance-schema-keyring-keys-table.html)表的查询会出现问题**。(漏洞 #37655299)
- **从`sql/sql_resolver.cc`中移除了一个断言**。(漏洞 #37601389)
- **作为包含多个子查询的条件的一部分且其策略已确定为`IN-to-EXISTS`的子查询,会被检查是否可物化,从而导致问题**。之所以进行物化检查,是因为该条件中的其他某个子查询的策略已确定为`MATERIALIZATION`。我们通过添加检查,仅关注那些应被物化的子查询来解决此问题。(漏洞 #37587388)
- **漏洞 #30875669的修复在该漏洞关闭时并未实际包含在mysql客户端的代码中**。现在已实施相关更改。(漏洞 #37572191) 参考:另见漏洞 #30875669。
- **`mysql_secure_installation`未按预期检查root密码是否已过期**。(漏洞 #37563088)
- **包含一行或多行且每行包含多个SQL语句的初始化文件,在初始化期间有时会产生错误**。(漏洞 #37559598)
- **某些`CREATE TABLE`(https://dev.mysql.com/doc/refman/9.4/en/create-table.html)和`DROP TABLE`(https://dev.mysql.com/doc/refman/9.4/en/drop-table.html)语句序列未得到正确处理**。(漏洞 #37534068) 参考:此问题是漏洞 #35721121的回归:。
- **移除了由MySQL 9.2.0中对缓存SHA-2认证插件所做工作引入的性能回归**。(漏洞 #37523469)
- **`UPDATE ... SET ...`(https://dev.mysql.com/doc/refman/9.4/en/update.html)并非总能成功回滚**。(漏洞 #37489167)
- **`CREATE TABLE`(https://dev.mysql.com/doc/refman/9.4/en/create-table.html)语句中的多个`DEFAULT`列表达式并非总能得到正确处理**。(漏洞 #37436220)
- **包含执行聚合的关联子查询的查询,在执行期间有时会(错误地)因重复键错误而被拒绝**。 此问题由先前的修复引入,该修复在`JOIN::cleanup()`执行期间移除了对原始引用切片的恢复(`set_ref_item_slice(REF_SLICE_SAVED_BASE)`),并假设这是不必要的。结果,来自先前执行的临时表字段引用未被清除,导致尝试向临时表插入重复键时触发错误“无法写入;表中存在重复键”。 我们通过在清理期间恢复原始引用切片来修复此问题,确保任何过时的引用都被丢弃。(漏洞 #37415167) 参考:另见漏洞 #32141711。此问题是漏洞 #35856247的回归。
- **在某些Windows系统上,使用MSI安装程序安装MySQL Server 9.1后,服务器无法启动**。这是因为这些系统未安装Visual C++ Redistributable v.14.42或更高版本。MySQL Server MSI安装程序现在会检查此要求,只有满足要求才会开始安装。(漏洞 #37365476)
- **注释中未加引号的分号字符(;)并非总能被标记为错误,尽管它们是不允许的**。(漏洞 #37117875)
- **从`keyring_aws`插件中移除了潜在的内存泄漏**。(漏洞 #36684413)
- **在尝试将子查询转换为派生表时,某些情况并非总能被考虑到**。(漏洞 #36421710) 参考:此问题是漏洞 #36921175的回归:。
- **设置`max_join_size`(https://dev.mysql.com/doc/refman/9.4/en/server-system-variables.html#sysvar_max_join_size)导致某些嵌套查询处理不当**。(漏洞 #35625769)
- **当子查询位于`SELECT`(https://dev.mysql.com/doc/refman/9.4/en/select.html)列表中且包含该查询被隐式分组时,将标量子查询转换为与派生表的连接本应被允许,但当`subquery_to_derived`(https://dev.mysql.com/doc/refman/9.4/en/switchable-optimizations.html#optflag_subquery-to-derived)优化器开关启用时,该转换会被拒绝**。(漏洞 #35150438)
- **当`explain_json_format_version`(https://dev.mysql.com/doc/refman/9.4/en/server-system-variables.html#sysvar_explain_json_format_version)等于1时,`EXPLAIN ANALYZE FORMAT=JSON`(https://dev.mysql.com/doc/refman/9.4/en/explain.html#explain-analyze)无法正确处理包含子查询的查询**。 感谢Peiyuan Liu及腾讯团队的贡献。(漏洞 #117995、漏洞 #37285902)
- **可以对`SET TRANSACTION ISOLATION LEVEL`(https://dev.mysql.com/doc/refman/9.4/en/set-transaction.html)使用`PERSIST`或`PERSIST_ONLY`,尽管这是不允许的,且会在服务器重启时导致错误**。现在尝试这样做会导致语句被拒绝,并返回错误`ER_GRP_RPL_UNSUPPORTED_TRANS_ISOLATION`(https://dev.mysql.com/doc/mysql-errors/9.4/en/server-error-reference.html#error_er_grp_rpl_unsupported_trans_isolation)。(漏洞 #115619、漏洞 #36854635)
- **当服务器以`autocommit=OFF`(https://dev.mysql.com/doc/refman/9.4/en/server-system-variables.html#sysvar_autocommit)运行时,查询重写插件(参见《重写器查询重写插件》(https://dev.mysql.com/doc/refman/9.4/en/rewriter-query-rewrite-plugin.html))无法正常工作**。(漏洞 #115437、漏洞 #36784795)
- **`MIN()`(https://dev.mysql.com/doc/refman/9.4/en/aggregate-functions.html#function_min)作为窗口函数使用时,未按预期忽略空值**。(漏洞 #113631、漏洞 #36182490) -
在使用 `RANGE` 帧单位的窗口函数规范中,此前允许在 `ORDER BY` 表达式中使用 `RAND()` 函数(https://dev.mysql.com/doc/refman/9.4/en/mathematical-functions.html#function_rand)。这违反了 `RANGE` 帧规范的基本要求,即帧内值必须保持单调递增或递减。为解决此问题,现在禁止在 `RANGE` 帧单位下使用非确定性的 `ORDER BY` 表达式,此类查询将直接返回错误。 此外,该修复还解决了一个相关问题:当计算 `BETWEEN CURRENT ROW AND after_value FOLLOWING` 帧边界时,如果被比较的行值为无符号类型且可能小于 `after_value`,会导致下溢(underflow)并产生错误结果。现在遇到这种情况时,系统会直接拒绝执行并返回错误。 有关窗口函数帧规范的详细信息,请参见:https://dev.mysql.com/doc/refman/9.4/en/window-functions-frames.html。(Bug #111510, Bug #35521787)
以上内容是MySQL 9.4版本的主要内容,详情请访问MySQL官网。