暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

MySQL 9.2.0 中的更新(2025-01-21,创新版本)

通讯员 2025-01-22
779

账户管理注意事项

C API 说明

  • 当 libmysql客户端API 用户尝试缓存并 重用准备好的语句,准备一次,然后调用 任选 mysql_stmt_bind_param() 或 mysql_stmt_bind_named_param() 其次 mysql_stmt_execute() 重复 而不调用匹配的 mysql_stmt_close() 或调用 它在遥远的将来(例如,在 Application Exit 时)。

    我们通过引入单独的 MEM_ROOT 对象,用于存储绑定 parameters 数组中,该对象可以被清除(将 memory) mysql_stmt_bind_param() 或 mysql_stmt_bind_named_param() 中。(错误 #37202066)

  • OK_Packet 的 Doxygen 评论并未涵盖所有可能的情况;此版本已更新,因此它现在可准确反映服务器实际发送的数据。(错误 #35630063)

    参考资料:另见:Bug #35358417、Bug #36374232。

字符集支持

  • 当从创建的连接和客户端字符设置为 latin1 的视图中进行选择时,会产生零行(其中需要一行),其中对视图的查询使用 UTF8 作为其连接和客户端字符 set 时,视图包含具有非 ASCII 的 Literal 值 字符,并且查询执行了条件下推到 的 UNION 的 视图。

    此问题与之前的问题有关,该问题修复了 错误:该情况下的问题是 正确考虑视图定义的字符集 将 View 中包含的条件下推到 Inner 时 query 块,但当时实施的修复并未采用 考虑到视图可能包含 非 ASCII 字符。

    这意味着要下推的条件被写入具有错误字符集的文本字符串。我们通过确保使用正确的字符集创建字符串来修复此疏忽。(错误 #37111452)

    参考资料:另见:Bug #36246859。

编译说明

  • macOS 版本: 使用 OBJECT 库代替 routing_guidelines 使用 Xcode 进行编译时。(错误 #37350937)

  • macOS 版本: 从 MacOS 版本中删除了过时的 CMake 代码。 (错误 #37258036)

  • macOS 版本: 现在可以使用 Homebrew 版本的 铛。 (错误 #37256912)

  • macOS 版本: 删除了 ld: warning: ignoring duplicate libraries 形式的警告和特定于 xcodebuild 中。(错误 #37065301)

  • Microsoft Windows: Windows 版本现在配置了 -DWITH_ASAN。(错误 #37309813)

  • Microsoft Windows: 在 中禁用了 Windows 编译器警告 C26445 和 C26821 cmake/msvc_cppcheck.cmake 中。这两者都与 MSVC 将 gsl::span 替换为 std::span,它不用于 MySQL。(错误 #37158156)

  • Microsoft Windows: 删除了使用 Visual 构建 MySQL 时发出的编译器警告 工作室 2022。 (错误 #113870、错误 #36256477)

  • Microsoft Windows: 在 Windows 上构建 MySQL 不支持 CMake 选项 -DWITH_SASL。现在,在执行此操作时尝试使用此选项会导致构建终止并显示错误。(错误 #113558、错误 #36155972)

  • Solaris 的: 在 Solaris 上构建 MySQL 所需的最低 GCC 版本 已上调至 11.4。看 源安装先决条件,了解更多信息。(错误 #37256600)

  • 从 CMake 3.26 开始,CMake 会写入文件 CMakeFiles/CMakeConfigureLog.yaml ,它取代了 CMakeError.log。参考资料 因此CMakeError.log已被删除。(错误 #37305289)

  • 实施符合标准 my_char_traits<unsigned char> 供使用 作为 std::char_traits<unsigned char> ,该版本在 Clang 18 中已弃用,并在 Clang 19 中被删除。(错误 #37273525)

  • 文件 stream_cipher.h 和 stream_cipher.cc 中,由 mysys/ 位于 sql/ 但不依赖于任何其他服务器 此目录中的代码;这些文件现已移至 mysys/ 的(错误 #37257736)

  • 删除或修复了许多版权头文件中的问题。(错误 #37238155)

  • 删除了使用 GCC 14 构建 MySQL 时在 sql/item.cc 中发现的可能未初始化的错误。(错误 #37157201)

  • 禁用了几个 clang-tidy 检查,这些检查在编译 MySQL 时会生成不必要的警告。(错误 #37129808)

  • 用于构建 component_mle 的 CMake 代码 假设 GraalVM 二进制文件可用,则在 /usr/global/share 中,或者位于命令行上提供的位置。现在,当这些条件都不成立时,可以从远程服务器下载 GraalVM。(错误 #37121798)

  • 用于编译 MySQL 的 libedit 版本升级到 20240808-3.1。(错误 #37101293)

  • 无法使用 Clang 13 在 Ubuntu 22.04 上构建服务器。(错误 #37075154)

  • 删除了 mysql_prepare_create_table() (在文件中 sql/sql_table.cc)在使用 XCode 16 编译 MySQL 时找到。(错误 #37068527)

  • 使用 MySQL 构建时,某些插件无法加载 -FTLS-MODEL=initial-exec 的 API API 中。通过删除此编译器标志并回退到默认值 (global-dynamic) 来修复。(错误 #37017999)

  • 无法使用 Clang 19 编译 MySQL。(错误 #37014761)

  • #include <chrono> 丢失 plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.cc 即使此文件中引用了 std::chrono::d uration_cast()。(错误 #116779、错误 #37329617)

  • 由于 TIRPC 的问题,无法使用 cmake 3.11 在 Fedora 40(可能还有其他 Linux 平台)上构建服务器。(错误 #116144、错误 #37080195)

组件注释

  • 对于 MLE 组件, mysql_option.option_usage 表的 USAGE_DATA列显示  value 用作字符串而不是 boolean 值。

    有关更多信息,请参阅 期权跟踪表。(错误 #37122749)

  • 存在于 mysql_option.option_usage 表依赖于 Option Tracker 是在 审计日志。

    请参阅 Option Tracker 组件,以及 MySQL Enterprise Audit 了解更多信息。(错误 #37037438)

  • 在一个会话中安装 Option Tracker 组件,同时在 中执行 UNINSTALL COMPONENT 其他会话导致服务器挂起。

    有关更多信息,请参阅 Option Tracker Component 。(错误 #36991399)

  • 密钥环组件的配置文件中的错误未正确记录。(错误 #36982002)

  • INSTALL COMPONENT 与使用子查询的 SET PERSIST 同时发出,有时可能导致服务器意外退出。(错误 #36559078)

    参考资料:另见:错误 #35647759。

配置说明

  • Microsoft Windows: 在 Windows 上,MySQL Configurator 不再执行已弃用的 FLUSH PRIVILEGES 语句。(错误 #37170330)

弃用和删除说明

Doxygen 笔记

  • COM_QUERY 个数据包的有效负载长度为 在其中一个 MySQL 数据包示例中计算错误。这 payload length 现在根据实际 查询的长度。

    感谢 Konno Satoshi 的贡献。(错误 #116339、错误 #37161043)

防火墙说明

  • 在某些情况下,在执行升级后,与 MySQL Enterprise Firewall 相关的存储过程未得到正确处理。(错误 #36084822)

INFORMATION_SCHEMA 注释

安装说明

  • 从 MySQL 5.7 升级到更高的 MySQL 版本系列时,系统创建的 mysql.sys 和 mysql.session 帐户现在被修改为使用 caching_sha2_password 身份验证插件而不是 mysql_native_password 插件,后者在 MySQL 8.0 中已弃用,并在 MySQL 9.0 中删除。(错误 #36608160)

JavaScript 程序

  • MySQL ENUM 和 现在支持 SET 类型 JavaScript 存储例程的参数。有关更多详细信息 信息,包括这些 MySQL 之间的转换规则 类型和 JavaScript 类型,请参阅 与 MySQL ENUM 和 SET 相互转换。(WL #16599)

  • MLE 组件支持的 JavaScript 程序,以 作为 MySQL 企业版的一部分,现在支持从 JavaScript 例程访问 用户定义的函数、过程和变量。MySQL 存储 函数和过程可以使用 架构方法 getFunction() 和 getProcedure()返回 Function 对象,这些对象可以与参数一起使用来调用例程。存储过程的 OUT 和 INOUT 参数 使用通过 mysql.arg() 的对于其他 信息和示例,请参阅 存储的例程 API

    MLE 组件现在还提供了一个 JavaScript MySQL 事务 API,执行大多数 MySQL 的操作 事务性 SQL 语句,例如 START TRANSACTION、COMMIT、 ROLLBACK 和 设置 AUTOCOMMIT。 还包括对 Savepoints 的支持。支持 SqlError 对象。 有关更多信息,请参阅 JavaScript Transaction API 和 SqlError 对象

    MySQL 用户变量可以作为 JavaScript 全局 Session 对象的属性直接访问。例如,名为 myvar 的用户变量可以读取或设置为 session.myvar。看 从 JavaScript 访问 Session Variables,了解更多信息 信息和示例。

    该版本还增加了对直接访问 MySQL 内置函数 RAND() 的支持。 SLEEP()、 UUID()和 IS_UUID()、as、 rand()、 sleep()、 uuid()和 isUUID()的看 MySQL 函数

    有关 JavaScript 程序和 MLE 组件的详细信息,请参阅 JavaScript 存储程序和 多语言引擎组件 (MLE)。(WL #16585)

  • MLE 组件作为 MySQL 企业版的一部分提供,现在支持可重用的 JavaScript 库,其中包含可从其他 JavaScript 存储程序调用的函数。可以使用此版本中添加的 CREATE LIBRARY 和 DROP LIBRARY SQL 语句来管理 JavaScript 库;他们可以 包含在其他存储的 JavaScript 程序中,并带有 USING 子句添加到 CREATE FUNCTION 和 CREATE 过程USING 支持一个或多个库的列表 名字。

    CREATE LIBRARY 在给定数据库中创建一个新的 JavaScript 库。库代码在创建时被解析并检查其有效性,如果它包含错误,则被拒绝。DROP LIBRARY 会删除一个 JavaScript 图书馆。库函数可以在其他 JavaScript 存储程序使用 library_name.function_name 表示法。在以下情况下,可以使用 USING 对库进行别名 将它们包含在 JavaScript 程序中。

    您可以使用 SHOW CREATE LIBRARY 语句、 也是此版本中的新增功能。两个新的相关信息架构 tables 中:的 LIBRARIES 表提供 有关 JavaScript 库的信息,以及 ROUTINE_LIBRARIES 提供 有关包含 JavaScript 的存储例程的信息 图书馆。

    服务器上发出的库 DDL 和 SHOW CREATE LIBRARY 语句的计数可用作状态变量,Com_create_library。 Com_drop_library 和 Com_show_create_library

    有关更多信息和示例,请参阅 使用 JavaScript 库,以及 多语言引擎组件 (MLE)。(WL #16359、WL #16360、WL #16362、WL #16555)

MySQL Enterprise 说明

  • 复制: 处理程序的 rnd_pos() 函数 实现了 Replication Applier Metrics 表的接口 错误;在使用此函数的情况下,表 似乎缺少一行。

    有关更多信息,请参阅 复制应用程序指标组件。(错误 #37076428、错误 #37132660)

  • 复制: 对于大多数 await 操作,我们会记下 await 开始的时间,并且 结束时间,并将它们的差值添加到总等待时间中 时间,但在跟踪等待所花费的时间时,情况并非如此 对于提交顺序,我们使用了一个 awake up 的函数 ,并导致等待时间增加 1。 这个 1 秒的精度对于大多数实际目的来说太低了 并导致代码不必要的复杂性。

    为了解决这些问题,我们现在以相同的方式跟踪等待时间 for commit order 等待,就像我们对其他 await 所做的那样。

    有关更多信息,请参阅 复制应用程序指标组件。(错误 #37053708)

优化器说明

  • JSON格式: 添加了对基于 iterator 的查找引用 EXPLAIN FORMAT=JSON 进行索引查找。这 lookup_references JSON v2 中的字段 EXPLAIN 格式对应于 JSON v1 中的 ref 字段 EXPLAIN 格式。(错误 #37126176)

  • 一些哈希连接在 pack_rows::RequestRowId()来调用,即使它们 未使用行 ID。

    通过跳过循环来修复 TableCollection::tables() 中的 RequestRowId(),以防没有表可从中请求行 ID。(错误 #37243461)

  • EXPLAIN FORMAT=TREE 现在显示 RowID 有序检索 (ROR) 交集计划的集群主键扫描。(错误 #37199800)

  • 下推一个在 WHERE 子句导致聚合函数在不应该被评估时被评估。(错误 #36421735)

性能架构说明

  • 如果 root 以外的用户运行 START REPLICA,则 PERFORMANCE_SCHEMA.PROCESSLIST 将该用户名分配给新生成的前台复制线程,而不是系统用户

    自此版本起,系统用户被分配到所有前台系统线程。(错误 #37357562)

  • PERFORMANCE_SCHEMA.PROCESSLIST 筛选出没有用户名的前台线程。如 在这个版本中,system_user 被分配给没有用户名的前台线程。(错误 #37357562)

  • 在某些情况下,元数据锁可以升级或降级到不同的LOCK_TYPE。这 更改未反映在 PERFORMANCE_SCHEMA.METADATA_LOCKS 桌子。

    感谢 George 马 和阿里巴巴团队的贡献。(错误 #116625、错误 #37271768)

可插拔身份验证

  • 以下与 AUTHENTICATION_POLICY_ADMIN 权限现已解决:

    • 对于具有该权限的用户,无法创建省略了默认身份验证插件的用户,因为在全局值 authentication_policy 中指定的默认值 在创建时包含在内,无论是否指定了任何 不。

      我们通过忽略全局身份验证策略来解决此问题 当执行账户创建的用户具有 AUTHENTICATION_POLICY_ADMIN 特权。

    • 对于没有权限的用户,尝试创建 user 的 rejected 并出现错误,因为 默认全局身份验证策略 他们没有具体说明。

      我们通过包含 全局身份验证策略,当用户执行 帐户创建没有 AUTHENTICATION_POLICY_ADMIN 特权

    有关更多信息,请参阅 authentication_policy 系统变量以及 MySQL 提供的权限。(错误 #37027739)

  • authentication_openid_connect 插件是 现在注册到 Option Tracker 组件。

    有关更多信息,请参阅 Option Tracker 组件,以及 OpenID Connect 可插拔身份验证。(错误 #116045、错误 #37041216)

SQL 语法说明

  • 重要变更: BINLOG 关键字不能再用作 MySQL 存储程序中未加引号的标签名称。之前 升级到此版本,您应该更新任何受影响的 因此,应用程序。

    有关更多信息,请参阅关键字和保留字。(错误 #22574003)

添加或更改的功能

  • InnoDB 的: 在恢复期间,所有恢复都禁用了 IBUF 合并 批次(最后一个批次除外),但现在对所有批次均禁用 批次。此更改会阻止添加新的重做日志 条目,因为它们导致死锁和 Recovery 从 其他 IBUF 页面。 (错误 #33134355、WL #15372)

  • Microsoft Windows: 在 Windows 上,MySQL Configurator 添加了命令行 用于配置 MySQL Server 安装的接口。看 MySQL Configurator CLI,了解更多信息。

    此版本的已知限制:新 CLI 仅支持 configure 操作。(WL #16564)

  • 包含 curl 而不是链接到系统 curl 库的二进制软件包已升级为使用 curl 8.11.1。(错误 #37389565)

  • 重构了代码以利用 OpenSSL 3.x 功能 要提高加密操作的性能,例如 由 MySQL 执行的 MD5() 和 SHA2() 函数。(错误 #116939、错误 #37185170、WL #16504)

  • 添加了源代码静态分析工具。有关使用情况详细信息,请参阅 scripts/static_analysis.md 或执行 python3 ./scripts/static_analysis.py --help 以获取更多帮助。使用此选项可检查单个提交或整个源代码存储库。(WL #16329)

  • 将缓存 SHA-2 身份验证插件转换为使用事件组件 API 而不是审计日志插件 API。这也会删除 sha2_cache_cleaner 审计插件。(WL #16572)

错误修复

  • 不兼容的更改: 当 最小边界矩形变化最小的几何体 (MBR) 之后执行删除操作。

    升级到此版本时,建议您丢弃 任何空间索引,然后在 升级完成。或者,您可以拖放并重新创建 此类索引,但在 利用它们出现的任何表。您应该 另请注意,降级到任何以前的版本 重新引入了前面描述的原始问题。

    有关更多信息,请参阅 创建空间索引。(错误 #36452528)

  • InnoDB 的: 改进了模拟的异步 I/O (AIO) 处理程序 高容量情况下的性能。 (错误 #37366607)

  • InnoDB 的: 改进的异步 I/O (AIO) 页面清理程序线程管理 性能。 (错误 #37359213)

  • InnoDB 的: 在查询 Performance 时并发截断表 架构有时会导致 MySQL 意外停止。 (错误 #37271715)

  • InnoDB 的: 对同时包含空间索引和自动增量列的表使用 INPLACE 算法的 ALTER TABLE 操作可能会导致损坏,或者在调试版本中触发调试断言。这是因为在准备新记录时,自动增量列值在空间索引的旧记录中被覆盖。(错误 #37189985)

  • InnoDB 的: 某些 IO 缓冲区序列化在 debug 中触发了断言 版本。 (错误 #37139618)

  • InnoDB 的: 包含外部的行的虚拟列信息 在 UPDATE 操作期间并不总是记录存储的 BLOB,这有时会导致索引 PRIMARY 损坏 错误。 (错误 #36880863)

  • InnoDB 的: 改进了 InnoDB 启动时间。(错误 #36880863)

    参考资料:此问题是 Bug #36808732 的回归。

  • InnoDB 的: 创建 FULLTEXT 索引,其中 FTS_DOC_ID大于 4294967295 的值。(错误 #36879147)

    参考资料:另见:错误 #37387224。

  • InnoDB 的: 改进 can_older_trx_be_still_active() 所以 它不再使用 trx_sys->rw_trx_list。(错误 #36729529)

  • InnoDB 的: 删除主键,然后添加新的 使用 INPLACE 算法将列AUTO_INCREMENT作为降序的主键 失败。

    感谢 Shaohua Wang 和阿里巴巴团队的贡献。(错误 #36658450)

  • InnoDB 的: 从 mysqladmin 中删除了内存泄漏 客户。 (错误 #36537941)

  • InnoDB 的: 扩展用户表空间会生成文件扩展名重做日志 records (MLOG_FILE_EXTEND) 的记录,但在扩展系统表空间时不会生成它们。(错误 #36511673)

  • InnoDB 的: 在 Windows 上,修复了速度变慢的 doublewrite 缓冲区回归 文件访问,并重构 FILE_FLAG_OVERLAPPED 打开文件的标志用法。(错误 #36259487)

  • InnoDB 的: 对具有自引用外键和全文索引的表执行 DELETE 操作可能触发了断言。(错误 #36234681)

  • InnoDB 的: 删除了处理过时的重做日志格式的代码。 (错误 #35020216)

  • InnoDB 的: 重做日志插入的公共前缀压缩 (MLOG_REC_INSERT) 曾被禁用,但现在在版本匹配时启用。(错误 #34946626)

    参考资料:此问题是 Bug #13899 的回归。

  • InnoDB:ON DELETE CASCADE 与生成的列 包含二级索引有时会失败,因为 删除前未初始化列模板。

    我们感谢 Rahul Malik 的贡献。(错误 #33691659)

  • InnoDB 的: 更新操作尝试在 为子表构建 Update 节点,但不应具有 这样做是因为外键约束不能引用 virtual 列。 (错误 #33327093)

  • InnoDB 的: 如果禁用了二进制日志记录,则可以进行全文 搜索查询在服务器崩溃后不正确。

    感谢 Yin Peng 和腾讯团队的贡献。(错误 #116212、错误 #37095383)

  • InnoDB 的: 删除了 dd_set_autoinc() 方法。(错误 #116175、错误 #37089340)

  • InnoDB 的: ALTER TABLE 可以使用 INPLACE 算法,以 由于插入非重复记录而导致的重复键错误 同时暂停重新构建以释放页面 门闩。

    感谢 Dmitry Lenev 和 Percona 团队为此修复做出的贡献。(错误 #115511、错误 #36808088)

  • InnoDB 的: 执行规则的检查 ALGORITHM=INSTANT 不能用于另一个表中的外键约束引用的列,该表未检查所述约束的最后一个字段。(错误 #115457、错误 #36796094)

  • InnoDB 的: CPU 使用情况统计信息未考虑超过 128 中,这可能会降低这些大型系统的性能。 (错误 #115399、错误 #36765223)

  • InnoDB 的: 现在,对空表执行带有 ADD COLUMN 或 DROP COLUMN 的 ALTER TABLE 时,默认使用 INPLACE 算法,而不是 INSTANT。此更改意味着这些简单操作的行版本不再递增。(错误 #113051、错误 #36004394)

  • InnoDB 的: 使用 INPLACE 算法重建 InnoDB 表的 ALTER TABLE 操作 如果发生清除,可能会导致丢失一行数据 并发在包含聚集 或 空间索引。

    感谢 Dmitry Lenev 和 Percona 团队为此修复做出的贡献。(错误 #110706、错误 #113812、错误 #115608、错误 #116764、错误 #35303494、错误 #36261480、错误 #36846567、错误 #37318367)

  • InnoDB 的: 具有降序主键且 index_merge优化有时会产生不正确的结果,例如缺少行。(错误 #106207、错误 #33767814)

  • 复制: 在 InnoDB ClusterSet 设置中,当 autocommit 设置为 集群中的所有节点上关闭,使用 MySQL Shell 的受控切换被拒绝,并显示错误 1105 (未知错误)。

    为了解决这个问题,我们现在强制 channel_change_source_connection_auto_failover() 每当 autocommit=OFF 阻止表 执行 Info 存储库事务时的 Access 死锁 更改后 SOURCE_CONNECTION_AUTO_FAILOVER 。(错误 #37173907)

  • 复制: 当接收和应用大额事务时,一个 停止复制通道的请求是使用 STOP REPLICA 时,MySQL 没有正确执行此操作,随后没有处理任何通道命令。此外,服务器关闭进程未正常完成,需要终止 MySQL 进程或重新启动主机系统。(错误 #115966、错误 #37008345)

  • 复制: 副本重新连接到源时写入的日志消息 (例如,当它通过发出 STOP REPLICA 后 START REPLICA) While initializing dump thread for replica with UUID uuid, found a zombie dump thread with the same UUID. Source is killing the zombie dump thread(thread_id) 已改进为 Upon reconnection with the replica, while initializing the dump thread for UUID uuid, an existing dump thread with the same UUID was detected. The source is terminating the previous dump thread (thread_id), which is normal and expected 。(错误 #84358、错误 #25330090)

  • 组复制: 删除了内部 功能 cs::apply::Commit_order_queue::front() 和 cs::apply::Commit_order_queue::remove() 。(错误 #37223451)

    参考资料:另见:错误 #35206392。

  • 组复制: 当主节点意外离开组并快速离开组时 尝试重新加入,则已选为删除 其他故障成员尝试驱逐或移除故障节点 但由于缺乏多数票而无法这样做。当被驱逐 或者 removed 节点是主节点,这会使集群没有 primary,导致 unusable 状态。 (错误 #36991859)

    参考资料:另见:错误 #37181867。

  • 组复制: 在某些情况下,添加新的辅助节点会导致现有的 secondaries 设置为 lag,从而导致死锁,锁持续存在 在重新启动主数据库之前,无法进行更多写入操作。

    此死锁发生在票证管理器之间,这可确保 事务提交到视图的正确一侧 change(在视图更改之前或之后)和 commit order manager 的 Manager 中,它确保 事务的提交顺序与它们的顺序相同 收到时,这两位经理需要不同的订单。 这意味着,在某些情况下,添加新的辅助对象会导致 组 primary 无法执行写入操作。

    我们通过忽略提交顺序管理器来解决这个问题 对 的 Ticket Manager 排序和强制执行 发生此类死锁时的非冲突事务。一个 这样做的结果是 replica_preserve_commit_order 不得严格遵守 View_change_log_event。换句话说, replica_preserve_commit_order不再 对 Group 上的入站通道提供严格保证 复制主副本。 replica_preserve_commit_order 仍可确保事务正确排序,唯一的例外是围绕视图更改日志事件的非冲突事务。(错误 #35206392)

    参考资料:另见:Bug #37223451。

  • 组复制: 通过消除 Group Replication 中的垃圾回收 对 is_subset_not_equals() 中。(错误 #110673、错误 #35286974)

  • 组复制: 从所有成员都属于 运行相同版本的 MySQL,并将其升级到更高版本的 版本(来自更高版本系列),然后请求它 重新加入组会导致升级后的组成员挂在 正在恢复状态。

  • 改进了 MySQL 9.1.0 中对允许范围内具有未知列的查询的条件所做的现有修复。(错误 #37341055)

    参考资料:此问题是 Bug #35058815 的回归。

  • 使用不是 JSON 字符串的类型参数调用 mle_set_session_state() 会导致组件退出。(错误 #37334566)

  • 在 当不可能的条件 detected else where 在查询中。这会产生问题 Optimizer 尝试检测需要 物化。由于子查询未优化,因此尝试 访问查询块的 Join 指针会导致服务器 退出。

    我们通过在完成子查询的具体化转换之前检查子查询是否进行了优化来解决此问题。(错误 #37321762)

  • 某些嵌套的 SELECT 语句ER_DUP_KEY临时表上生成。(错误 #37309915)

    参考资料:此问题是 Bug #115597、Bug #36846564 的回归。

  • 具有未使用任何表且具有非零 OFFSET 子句的子查询的查询未返回正确的结果。例如, SELECT (SELECT 1 LIMIT 1 OFFSET 10) 返回 1 而不是预期的 NULL。(错误 #37293822)

  • 错误 ER_DD_UPDATE_DATADIR_FLAG_FAIL 、 ER_IB_MSG_FIL_STATE_MOVED_PREV_OR_HAS_DATADIR , ER_RPL_KILL_OLD_DUMP_THREAD_ENCOUNTERED 、 和 ER_RPL_MTA_ALLOW_COMMIT_OUT_OF_ORDER 最初在 MySQL 8.0 中定义,但随后在 MySQL 8.4 中被分配了不同的错误代码号(但名称相同)。MySQL 8.0 中分配的编号现在仅适用于 MySQL 8.0;在 MySQL 8.4 及更高版本系列中,仅使用 MySQL 8.4 中分配的编号。(错误 #37284176)

  • 在 mle::validate() 和 validate_session_options() 中。(错误 #37267887)

  • 对于哈希联接,时间和资源花费在不必要的构造和销毁从未使用过的 HashJoinChunk 对象上,即使在哈希联接无法完全在内存中执行并随后溢出到磁盘的情况下也是如此。(错误 #37235166)

  • 在升级期间向 sys 架构添加事件会导致服务器意外关闭。(错误 #37162611)

  • 在 sql/item_cmpfunc.cc 中, Item_bool_func2::resolve_type() 已将 对 unchecked 调用 Item_bool_func::resolve_type() ;对 Item_bool_func::resolve_type() 忽略其返回值,即使出现错误,执行也会继续。(错误 #37143289)

  • 当计算 value BETWEEN 'a' AND 'b' 时,服务器现在检查字符串文字并确保它们使用与要与之比较的值相同的字符集和排序规则。(错误 #37086818)

  • 删除了 sql/item_func.cc 的(错误 #37083848)

    参考资料:另见:Bug #29467577。

  • 删除了 中发现的内存泄漏 option_tracker/udfs.cc 中。(错误 #37075241)

  • AppArmor 拒绝访问 /proc/$pid/task/$thread_id/mem ,生成堆栈跟踪所需的文件。(错误 #37063288)

    参考资料:另见:错误 #37387034。

  •  sql/sql_resolver.cc 的(错误 #36987582)

    参考资料:此问题是 Bug #112557、Bug #35855294 的回归。

  • MySQL 允许在窗口 PARTITION BY 和 ORDER BY 表达式中使用外部引用,这不符合 SQL 标准。(错误 #36921175)

  • 当查询使用 index_subquery 联接类型执行子查询,子查询表在执行计划中使用具体化时,有时会忽略子查询中的筛选条件。派生的表访问路径替换了筛选条件,从而生成了没有筛选层的最终计划。为了解决这个问题,在这种情况下,我们现在添加派生表访问路径以及筛选器访问路径,而不是替换后者。(错误 #36918913)

  • 某些标量子查询到派生表的转换并不总是正确执行。(错误 #36902116)

  • 一些类似于 a UNION b UNION c ... 占用了过多的内存。为了帮助防止这种情况发生,我们现在在上下文化发生之前在解析级别展平相等集操作,这应该会减少此类操作的资源使用量。(错误 #36652610)

  • 改进了内部功能 my_print_help() 中。(错误 #36615714)

    参考资料:另见:错误 #37387224。

  • 从 Acl_cache 中删除了不正确的代码。(错误 #36608160)

  • 包含聚合函数 WITH ROLLUP 的子查询(该函数是行值比较器的一部分)并不总是被正确处理。(错误 #36593235)

    参考资料:另见:Bug #37387180。此问题是以下各项的回归:Bug #30969045、Bug #30921780、Bug #26227613、Bug #29134467、Bug #30967158。

  • 在保留变量时引发的错误可能无法正确报告。(错误 #36574732)

  • 一些使用 WITH ROLLUP 的子查询并不总是被正确处理。(错误 #36421704)

  • MyISAM 块长度计算并不总是正确执行。(错误 #36347992)

  • 删除了潜在的争用条件。(错误 #35981769)

    参考资料:另见:Bug #36608160。

  • mysqldump--column-statistics 选项现在默认处于禁用状态。(错误 #35209008)

  • 修复了与 FTS 和并发 DDL 或 DML 相关的问题。(错误 #34633727)

  • DROP VIEW 名称被拒绝,并显示 ER_BAD_TABLE_ERROR是否存在同的表。(错误 #33200087)

  • 设置 explain_json_format_version 2 现在对 EXPLAIN 格式=JSON:

    • 输出包括 JSON 架构版本 少校次要格式;这始终显示为 2.0 在 MySQL 9.2 中。

    • 只有查询属性直接存储在顶级 对象;在版本 1 输出中,此对象同时包含 query attributes 和 iterator 属性。

     explain_json_format_version = 1 在此版本中保持不变。(错误 #116915、错误 #37372130、错误 #35239659)

  • mysqlslap 实用程序未禁用 SSL 当 --ssl-mode=disable 选项。(错误 #116844、错误 #37353662)

  • 当取 YEAR 列和 BOOL (TINYINT) 列,则结果的数据类型为 TINYINT,因为 内部的缺陷 field_types_merge_rules数组。我们通过以下方式解决这个问题 在这种情况下,将 result 数据类型调整为 SMALLINT 的 SMALLINT 中。(错误 #116415、错误 #37192491)

  • 当哈希表无法放入联接缓冲区并溢出到磁盘时,某些使用哈希反联接的查询会返回不正确的结果。(触发问题的查询实际上指定了 LEFT JOIN,但这已被转换 在内部从 left outer join 到 antijoin.)

    问题是在将探测行写入 chunk 文件时,会跳过探测表中的某些行,跳过的行是连接的一部分中包含 NULL 的行 钥匙。对于内部连接和半连接,可以跳过此类行,因为 已知它们在构建表中没有匹配项,但对于 外部连接和反连接,探测表中没有 Build Table 中的 matching row 应该是 join 的一部分 result,因此它们必须包含在 chunk 文件中。

    我们已经在 chunk 文件中保留了这些行,以便进行外部连接。此修复扩展了用于该目的的逻辑,使其也适用于反联接。(错误 #116334、错误 #37161583)

  • 在某些情况下,在准备好的语句或存储过程中使用时,包含公共表表达式的查询在第二次和后续执行中会产生不同的结果。(错误 #116140、错误 #37074489)

  • 当服务器sql_mode包含ANSI_QUOTES时, SHOW GRANTS 用反引号 (') 引用存储函数和存储过程名称,同时对其他对象的名称使用双引号 ()。现在,在这种情况下总是使用双引号。(错误 #115953、错误 #37003502)

  • 将 BIT 值作为参数的窗口函数不返回 BIT。(错误 #115597、错误 #36846564)

  • 如果出现 mysqlslap 实用程序,则 mysqlslap 实用程序变得无响应 --auto-generate-sql-execute-number 和 --concurrency 是 指定但不指定 --auto-generate-sql 或 --query 的(错误 #113215、错误 #36048754)

  • 在 MySQL 8.0 及更高版本中,表单 SELECT DISTINCT ... FROM t1 WHERE NOT IN(SELECT ...) 被转换为 antijoin 的 API 调用,导致优化器不选择 对表 T1 进行组跳过扫描,而它本应被选中 在 MySQL 5.7 中。这导致 这样的查询。未选择组跳过扫描,因为查询是 现在不再是 antijoin 后面的单表查询 transformation,并且该访问方法仅对 单个表查询。查询也可以看到相同的行为 它们也被转换为 semijoins。在这种情况下, 如果 method 仅用于删除重复项(即,使用 DISTINCT 或 GROUP BY,但 没有聚合函数)。

    为了解决这个问题,当原始查询中只有一个表时,我们启用组跳过扫描,而不管内部转换后存在的半连接表的数量是多少,只要查询不包含聚合函数。(错误 #112632、错误 #35842412)

  • mysql 客户端不允许使用 '#' 或 '--' 在优化器提示注释中。

    感谢 Kaiwang Chen 的贡献。(错误 #98521、错误 #30875669)

  • mysqldump--compact 选项现在禁用 --tz-utc 的

    以前,使用 --tz-utc enabled(默认)、 --compact 执行 SET TIME_ZONE='+00:00' 但未将此语句写入 dump 文件。这会导致不一致,因为数据是使用 UTC 提取的,但转储的读者不知道数据使用了这个时区。(错误 #58491、错误 #11765514)

  • 当比较 VECTOR 列及其长度 属性未被考虑。



最后修改时间:2025-01-22 11:19:43
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论