Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.24 的变化(2021-04-20,全面上市)

MySQL 8.0.24 的变化(2021-04-20,全面上市)

审核日志说明

编译笔记

  • GCC 10 现在是支持在 EL7 或 EL8 上构建 MySQL 的编译器。该编译器在 devtoolset-10(EL7) 或 gcc-toolset-10(EL8) 包中可用。libmysqlclient还建议在构建基于C API 库的第三方应用程序时使用 GCC 10 。(缺陷号 32381003)

连接管理说明

  • 以前,如果客户端在系统变量指定的时间内没有使用到服务器 wait_timeout的连接并且服务器关闭了连接,则客户端不会收到任何原因通知。通常,客户端会 在查询期间看到与 MySQL 服务器的连接丢失 ( CR_SERVER_LOST) 或 MySQL 服务器已消失 ( CR_SERVER_GONE_ERROR)。

    在这种情况下,服务器现在会在关闭连接之前将原因写入连接,并且客户端会收到一条信息更丰富的错误消息,客户端因不活动而被服务器断开连接。请参阅 wait_timeout 和 interactive_timeout 以配置此行为。 ( ER_CLIENT_INTERACTION_TIMEOUT).

    以前的行为仍然适用于客户端与旧服务器的连接以及旧客户端与服务器的连接。

错误处理

  • 客户端连接失败消息现在包括端口号。例如:无法连接到“127.0.0.1:63333”上的 MySQL 服务器。. 感谢 Daniël van Eeden 的贡献。(错误#30787660,错误#98311)

钥匙圈笔记

  • MySQL Keyring 以前使用服务器插件实现密钥库功能,但现在正在过渡到使用 MySQL 组件基础结构,从这些密钥环组件开始:

    keyring_file新的密钥环组件与现有的和 插件 有相似之处 keyring_encrypted_file,但配置不同,使用不同的磁盘存储格式,并且对密钥类型和密钥大小的限制更少。

    密钥环组件不会在启动期间使用 --early-plugin-load服务器选项加载,也不会在启动期间或运行时使用系统变量进行配置:

    如果安装了密钥环组件,新的 Performance Schema keyring_component_status表将提供有关它的状态信息。请参阅 keyring_component_status 表

    密钥迁移功能得到了扩展。以前,密钥迁移仅发生在从一个密钥环插件到另一个密钥环插件的过程中。新的 --keyring-migration-to-component 服务器选项支持从密钥环插件到密钥环组件的密钥迁移;这有助于将 MySQL 安装从密钥环插件转换为密钥环组件。新的 mysql_migrate_keyring实用程序支持从一个密钥环组件到另一个密钥环组件的密钥迁移。请参阅 在密钥环密钥库之间迁移密钥。没有规定将密钥从密钥环组件迁移到密钥环插件。

    现有的密钥环插件仍然可用,用户可见的特征没有变化,但它们的实现被修改为使用组件基础设施。这可以使用名为的内置插件来促进,该插件 daemon_keyring_proxy_plugin充当插件和组件服务 API 之间的桥梁。请参阅 密钥环代理桥接插件

优化器注释

  • 只要启用变量的subquery_to_derived标志, MySQL 查询优化器现在就可以将派生表优化应用于相关的标量子查询 。optimizer_switch这是通过应用一个额外的分组,然后对提升的谓词进行外部连接来完成的。例如,查询SELECT * FROM t1 WHERE (SELECT a FROM t2 WHERE t2.a=t1.a) > 0可以重写为SELECT t1.* FROM t1 LEFT OUTER JOIN (SELECT a, COUNT(*) AS ct FROM t2 GROUP BY a) AS derived ON t1.a = derived.a WHERE derived.a > 0

    如果子查询已经有一个明确的分组,MySQL 将额外的分组添加到现有分组列表的末尾。

    MySQL 执行基数检查以确保子查询返回的行不超过一行, ER_SUBQUERY_NO_1_ROW如果返回则引发。在评估提升的谓词之前, 检查是作为评估重写查询中的任何 WHERE或子句的一部分执行的。JOIN

    有关详细信息,请参阅 相关子查询以及 派生表

包装说明

  • 捆绑libedit库已升级到版本 20190324-3.1。(缺陷号 32433089)

  • 包含curl而不是链接到系统curl库的二进制包已升级为使用curl7.74.0。

性能模式注释

  • 不兼容的更改: 性能模式 setup_instruments表中的检测修改如下:

    • 有新的内存工具来计算分配给数据字典基础设施和对象的内存:

      memory/sql/dd::infrastructure
      memory/sql/dd::objects
    • 为了提高仪器命名的统一性,对一些仪器进行了重命名。受影响的仪器名称使用与 C++ 命名空间相同样式的键前缀进行分组。例如,与错误相关的工具使用 error::前缀,与分区相关的工具使用Partition::前缀。下表显示了受影响的仪器。

      旧仪器名称 新仪器名称
      debug_sync_control::debug_sync_action THD::debug_sync_action
      errmsgs errmsgs::server
      handler::errmsgs errmsgs::handler
      handlerton handlerton::objects
      log_error_loaded_services log_error::loaded_services
      log_error_stack log_error::stack
      LOG_name LOG::file_name
      MDL_context_backup_manager MDL_context::backup_manager
      Partition_admin Partition::admin
      Partition_share Partition::share
      partition_sort_buffer Partition::sort_buffer
      partition_syntax_buffer Partition::syntax_buffer
      Prepared_statement_map Prepared_statement::infrastructure
      prune_partitions::exec Partition::prune_exec
      Recovered_xa_transactions XA::recovered_transactions
      thd::main_mem_root THD::main_mem_root
      XID XA::transaction_contexts

      此外,该servers仪器是 的副本servers_cache并已被删除。

      使用旧的或已删除的仪器名称的应用程序应进行调整以解决此更改。

    • 列中为多个仪器赋予了一个值 DOCUMENTATION(不再是 NULL),从而提高了运行时仪器文档的可用性。

可插拔认证

安全说明

空间数据支持

添加或更改的功能

  • InnoDB: 最大AUTOEXTEND_SIZE设置从 64M 增加到 4GB。该 AUTOEXTEND_SIZE选项在 MySQL 8.0.23 中引入,定义了InnoDB 当表空间变满时扩展表空间大小的量。CREATE TABLEALTER TABLECREATE TABLESPACEALTER TABLESPACE语句支持该选项有关详细信息,请参阅 表空间 AUTOEXTEND_SIZE 配置。(缺陷号 32438606)

  • Microsoft Windows: 编译/RTC1器标志已从调试编译器标志中删除,以减少mysql-test-run.pl在 Windows 上使用 MSVC 时运行脚本调用的所有测试所需的时间。最初,此编译器标志是随CMake 程序引入的(默认情况下用于调试构建),它生成代码以测试函数调用周围的堆栈损坏和运行时未初始化变量的使用。删除错误预计不会丢失错误发现/RTC1 编译器标志。Address Sanitizer (ASAN) 测试更有可能发现内存错误,例如堆栈损坏,编译器警告会检测未初始化变量的使用。(缺陷号 32525732)

  • Microsoft Windows: 系统 named_pipe_full_access_group 变量现在默认为空字符串 (''),使命名管道连接安全。以前,'*everyone*'是默认值。可以替换有效的 Windows 本地组名。

  • 新的 clone_donor_timeout_after_network_failure 克隆插件变量定义了捐赠者允许接受者在网络故障后重新连接并重新启动克隆操作的时间量。超时之前固定为 5 分钟。现在可以将超时延长至 30 分钟,以便为解决网络问题提供更多时间。

    感谢 Daniël van Eeden 的贡献。(错误#32335434,错误#102103)

  • 客户端应用程序和测试套件插件现在报告 utf8mb3而不是utf8 在编写字符集名称时。(错误#32164079,错误#32164125)

  • 现在可以在组复制仍在运行时更新组复制的主机白名单,从中可以接受传入的组通信系统连接。因此,您可以将新成员添加到由白名单控制的组,而无需停止并重新启动组复制。group_replication_ip_allowlist白名单由每个组成员上 的系统变量指定 。

  • --skip-slave-start命令行参数用于防止在副本服务器重新启动时启动复制 I/O 线程和复制 SQL 线程 。但是,在命令行或my.cnf选项文件中使用参数可能需要登录服务器主机。现在 skip_slave_start提供系统变量以使用 MySQL 服务器的特权结构来访问此功能,因此数据库管理员不需要对操作系统的任何特权访问。新的全局系统变量是只读的,可以使用SET PERSIST_ONLY语句设置。作为系统变量,它的值也可以从 MySQL 客户端查询并由 MySQL API 使用。这--skip-slave-start 命令行参数仍然可以用作替代方法,它设置新的全局系统变量。

修正错误

  • 重要说明: 当语句utf8mb3中指定排序规则时 ,包含字符集名称的系统变量值和二进制日志随后都会显示字符集,因为 它正在成为 的同义词 。现在在这种情况下, 改为显示,并引发警告 ”是已弃用字符集 UTF8MB3 的排序规则。请考虑使用带有适当排序规则的 UTF8MB4。(错误#27225287、错误#32085357、错误#32122844)CREATE TABLESHOW CREATE TABLEDEFAULT CHARSETutf8utf8mb4utf8mb3CREATE TABLEcollation_name

    参考资料:另请参阅:Bug #30624990。

  • InnoDB: 该函数遇到的陈旧页面 buf_page_create()被释放,然后再次从磁盘读取而无需重新初始化。(缺陷号 32622548)

  • InnoDB:在 MySQL 8.0.23 中,源代码 enum中缓冲池页面和缓冲池块数据结构中的 C++为,导致数据 表 字符而不是整数 InnoDBintuint8_tasciiINFORMATION_SCHEMA

    填充表的函数 INNODB_BUFFER_PAGE_LRU没有打印字段的IO_PIN状态 IO_FIX。(缺陷号 32575469)

  • InnoDB:btr_pcur_t::copy_stored_position 函数将一个索引树持久游标的位置复制到另一个,执行了不必要的 free 和 malloc 调用。(缺陷号 32574835)

  • InnoDB: 检查表上锁的函数试图获取独占锁系统 (lock_sys) 锁存器,导致长时间的信号量等待。(缺陷号 32545030)

  • InnoDB: 将临时表空间计为打开的文件导致 innodb_open_files超出限制,阻止其他文件打开。在计算打开的文件时,临时表空间现在被忽略。(漏洞#32541241)

  • InnoDB:buf_flush_ready_for_flush()函数在没有首先检查页面是否脏或 I/O 已修复的情况下将陈旧页面识别为准备好刷新,从而导致断言失败。(缺陷号 32530147)

  • InnoDB: 回滚修改生成列的事务引发断言失败。尝试释放外部存储列占用的空间时发生故障。包含外部存储列的更新向量不考虑生成的列。(错误号 32529561)

  • InnoDB: 在禁用的情况下启动服务器时 innodb_validate_tablespace_paths ,用户创建的撤消表空间在启动过程的初始阶段暂时设置为不活动,不会重新激活。(缺陷号 32493885)

  • InnoDB: Disabling innodb_extend_and_initialize,这导致InnoDB使用 fallocate(),导致面向插入的工作负载的性能回归。(缺陷号 32437020)

  • InnoDB: 删除了不必要的全刷新列表扫描,提高了创建会话临时表空间的速度。以前,根据缓冲池的大小和脏页的数量,会话临时表空间的创建可能需要很长时间,从而影响写事务性能。(缺陷号 32423860)

  • InnoDB: 检查给定页面类型是否有效的函数在测试撤消表空间的有效但未定义的页面类型时引发断言。(缺陷号 32366301)

  • InnoDB: 改进了分片读写锁功能检测。(缺陷号 32333168)

  • InnoDB:COMPRESSION在 Windows 上,当使用该选项 创建表时 InnoDB 未能在检查由同一系统调用设置的打孔支持标志之前检查系统调用的错误状态,这导致读取未初始化的标志。(缺陷号 32322645)

  • InnoDB: 由于 MySQL 5.7 中引入的几何类型更改,在从 MySQL 5.7 升级到 MySQL 8.0 后重新启动服务器时,在 MySQL 5.6 中创建的几何列导致失败。(缺陷号 32299738)

  • InnoDB: 在恢复期间,多个记录组迷你事务的日志记录被解析了两次。现在保存第一次解析操作的日志记录以避免第二次通过,从而提高了恢复性能。

    感谢翟伟祥的贡献。(错误#32293797,错误#102010)

  • InnoDB: 在调试版本中,二级索引的结束范围条件检查引发了断言失败,而 Valgrind 测试发现了读取未初始化值的虚拟列上二级索引的结束范围条件检查。(缺陷号 32291506)

  • InnoDB:禁用变量后,一个线程 的 innodb_log_writer_threads 大量日志写入可能会阻止其他线程的日志刷新机会。(缺陷号 32255538)

  • InnoDB:SHOW ENGINE INNODB STATUS死锁信息中,在单个rw-lock 读取器线程持有共享闩锁的情况下,读取器线程 id 未打印。(缺陷号 32252477)

  • InnoDB:在同一个表上 运行并发SHOW CREATE TABLEALTER TABLE 操作引发断言失败。该 SHOW CREATE TABLE线程引用了一个已因 ALTER TABLE操作而变得陈旧的表空间对象。(缺陷号 32235621)

  • InnoDB: MySQL 5.7 中分片计数器的引入rw_lock_stats 导致 CPU 缓存效率下降。为了解决 MySQL 5.7 中的这个问题,更改了分片方法。为了获得最佳性能, rw_lock_statsMySQL 8.0 中删除了计数器。(缺陷号 32225367)

  • InnoDB: 在 Windows 上,停顿是由SELECT COUNT(*)并行读取线程数超过机器内核数的并发查询引起的。(错误#32224707,错误#101789)

  • InnoDB:表中添加了 一个IS_STALE列,指示缓冲池页面是否陈旧 INFORMATION_SCHEMA.INNODB_BUFFER_PAGE 。(缺陷号 32194434)

  • InnoDB: 在调试版本中,log_free_check() 重做日志代码中的函数确保在脏页上持有闩锁时日志中有可用空间,现在使用当前线程打开的迷你事务列表来搜索潜在的约束违规. (缺陷号 32189367)

  • InnoDB:InnoDB在页面大小为 64k 且 innodb_max_undo_log_size 设置小于初始撤消表空间大小 的系统上缓慢关闭期间 撤消表空间截断现在仅限于大于初始撤消表空间大小和 innodb_max_undo_log_size 设置的撤消表空间。

    修改了为撤消表空间检索下一个重做回滚段的函数,以确保在找到非活动表空间时,撤消日志在两个活动撤消表空间之间平均分配。(缺陷号 32173457)

  • InnoDB:undo_001在撤消表空间被截断 时意外停止后以升级模式启动服务器当升级处理完成并启动关机时,确定是否需要撤消截断的函数找不到 undo_001撤消表空间。为了解决这个问题,在升级模式下启动服务器时不再执行撤消表空间截断。(缺陷号 32127912)

  • InnoDB: 对父表的删除操作启动了对具有索引虚拟列和索引外键约束列的子表的级联更新,导致虚拟列损坏。(缺陷号 32124113)

  • InnoDB:修改 了表共享实例(对象)和字典表实例的打开和关闭顺序,m_share以防止访问 m_share可能指向陈旧字典索引的旧对象。

    感谢姜宇翔的贡献。(缺陷号 31899685)

  • InnoDB:TRUNCATE TABLE在服务器初始化失败后成功重启服务器后 发出操作时发生调试断言 (缺陷号 31763837)

  • InnoDB: 快速关闭 (innodb_fast_shutdown=0) 引发断言失败。mysql_trx_list断言代码在停止清除操作之前检查事务列表 ( ) 中的事务检查发生在关闭 GTID 持久化后台线程之前,该线程仍在将事务插入事务列表。(缺陷号 31693627)

  • InnoDB: 改进了撤消表空间截断错误处理,并且使特定于 Windows 的InnoDB文件删除过程更加兼容 POSIX。(缺陷号 31684783)

  • InnoDB: 使用 4K InnoDB页面大小初始化服务器导致密钥太长错误被写入错误日志。(错误#31496943,错误#99892)

  • InnoDB: 使用保留名称创建的表导致失败。(缺陷号 31382599)

  • InnoDB: 在虚拟列上创建索引引发了无效的调试断言失败。(错误#31279528、错误#99421、错误#27168185)

  • InnoDB: 在调试模式下,该 buf_pool_validate_instance()函数访问该buf_page_t::io_fix字段时未与正在修改该buf_page_io_complete()函数中同一字段的线程正确同步,从而导致断言失败。除了更正该问题之外,该字段特定值buf_page_get_io_fix_unlocked() 的特定函数所取代buf_page_t::io_fix还实施了一系列其他小的相关代码更改。(缺陷号 31027553)

  • InnoDB: 在为给定会话分配由不同查询共享的内存块时,TempTable 内存分配器没有跟踪 RAM 消耗,这可能导致不遵守 temptable_max_ram限制。(漏洞#29890126)

  • 分区: 在某些情况下,语句中的无效PARTITION子句没有得到正确处理ALTER TABLE。(缺陷号 32235085)

  • 复制: 使用基于行的复制 (binlog_format=ROW),当行中的其他字段被插入或更新时,仅存在于副本上的存储生成列不会被更新。这些列现在在解包行图像时进行评估,并且在应用它们之前在行图像中更新它们的值。(错误#32292413,错误#101978)

  • 复制:BLOB如果行事件包含包含不可压缩数据的列,并且行事件的压缩大小高于其未压缩大小,则 二进制日志事务压缩无法继续该函数现在可以正确处理额外的压缩后字节。(错误#32174715,错误#101611)

  • 复制: 如果所有以前的二进制日志文件在启动时因为它们的保留期已过而被清除,则新的二进制日志文件包含一个空Previous_gtids事件,这可能导致复制错误。现在更改了初始化顺序,以便仅在将先前的 GTID 集写入启动时创建的新二进制日志文件后才清除先前的二进制日志文件。(错误#32134875,错误#101533)

  • Replication: 当MySQL Server统计一个set中的GTID个数时,返回值可能会换行,返回不正确的结果。这可能会导致错误地决定使用二进制日志的状态传输来进行组复制的分布式恢复,而远程克隆操作会更有效。该逻辑现在已得到纠正。(缺陷号 32086209)

  • 复制: 如果二进制日志文件在启动时被删除,因为它们的保留期已过期,则在调试版本中会引发与丢失 GTID 相关的断言。(缺陷 #32008512,缺陷 #101137)

  • 复制: 系统sql_slave_skip_counter 变量,用于使副本跳过指定数量的事务,忽略使用二进制日志事务压缩(使用 binlog_transaction_compression 系统变量激活)压缩的事务有效负载。只有未压缩事务有效负载中的事件才计入跳过的总数。(缺陷号 31973055)

  • 复制: 如果在不同客户端更新和读取系统变量时轮换二进制日志文件,则可能会发生死锁。(缺陷号 31774422)

  • 复制:副本的 SQL 线程 的语句输出SHOW PROCESSLIST有时会显示当前正在应用的最后一个查询,而副本实际上已被追上。(漏洞 #30521198,漏洞 #97560)

  • Microsoft Windows: 在具有超过 32 个逻辑处理器的 Windows 系统上运行 MySQL Server(64 位)并将资源组的 VCPU 属性设置为大于 30 会产生不正确的 CPU 掩码值,该值用于设置线程关联。在这些情况下,MSVC 编译器报告了警告,指出文件中的 32 位移位已隐式转换为 64 位 thread_attrs_api_win.cc。转换导致在具有超过 32 个逻辑处理器的系统上计算错误的 CPU 掩码。1此修复通过将shift 的 参数替换为 确保在计算 CPU 掩码时使用 64 位移位1LL。(缺陷号 32079726)

  • JSON:IF()当函数的第一个参数引发错误时, 该这也可能发生在类似的情况下,附加条件是函数的返回类型是 JSON. (错误#32231393,错误#32231620)

  • JSON: 许多 JSON 函数没有正确传播错误,这可能导致调试版本中的断言失败。(缺陷号 32047630)

  • JSON: JSON_TABLE()在不同会话中重新使用时,内部触发器有时处理不正确。通过确保JSON_TABLE() 在当前会话的上下文中处理它及其临时表来修复。(缺陷号 31644193)

  • JSON: 在将列转换为类型化数组的表达式上定义的多值索引未用于加速查询。这是因为服务器在用等效的索引生成列替换表达式时,并未尝试将对列的引用替换为对等效生成列的引用;对于多值索引,将列引用替换为生成列的引用是有意义的,该列支持表达式上的多值索引,该表达式将该列转换为类型化数组。

    此修复解除了服务器尝试仅用索引生成的列替换函数表达式和条件表达式的限制,方法是允许在列引用出现在可以使用多值索引的上下文中时替换它们,即,当它们用作MEMBER OF()JSON_CONTAINS()或 的参数JSON_OVERLAPS()。对于在非数组上下文中使用列引用的情况,该限制仍然有效。(缺陷号 30838807)

  • JSON:JSON_SEARCH()函数将所有搜索字符串和路径值解释为 utf8mb4字符串,而不考虑它们的实际编码,这可能会导致错误的结果。(错误#102443,错误#32443143)

  • JSON: 在某些情况下,当在左连接中使用时,一些 MySQL JSON 函数会导致优化器将其转换为内部连接,即使内部连接不等同于原始的左连接。这是因为它们返回的值不是NULL,即使它们的参数之一是NULL,并且优化器希望它们NULLNULL输入时返回。

    受此问题影响的功能包括 JSON_ARRAY()JSON_OBJECT()JSON_ARRAY_APPEND()JSON_ARRAY_INSERT()JSON_INSERT()JSON_REPLACE()JSON_SET()。有关这些函数的更多信息,请参阅 JSON函数。(缺陷 #101861,缺陷 #32248705)

  • 通用 Linux 的社区包不是用必要的 LDAP/SASL/Kerberos 依赖项构建的,也没有捆绑相关的必需库。(缺陷号 32619858)

  • 函数BIT_AND()BIT_OR()BIT_XOR()JSON_ARRAYAGG()并不总是提供正确的错误处理。(缺陷号 32594813)

  • IN当错误地与 一起使用 时,服务器并不总是提供正确的错误消息 UNION。(缺陷号 32593846)

  • DECIMAL当结果的位数多于元数据中Item_typecast_signed指示的位数时 ,可以将 from 转换为有符号整数类型以命中断言。发生这种情况是因为十进制值在转换为整数时会四舍五入,并且 Item_typecast_signed没有考虑到四舍五入可能会增加十进制值整数部分的位数,例如将 9.9 四舍五入到 10 时。

    这是通过删除试图为转换结果计算最小最大长度的逻辑,而不是使用父类设置的默认值来解决的 Item_int_func。该默认值是 64 位整数的最大宽度,无论输入值如何,它都应该是安全的。(漏洞#32591589)

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

  • my_row_id不可见列不允许使用 该名称。此限制已取消。(缺陷号 32586231)

  • 在具有许多并发连接的系统上,执行 grant 语句可能需要等待元数据锁定的时间过长,从而导致服务器变得无响应。(缺陷号 32483597)

  • Windows 二进制文件和库未正确签名。(缺陷号 32458533)

  • 表的权限检查INFORMATION_SCHEMA 可能无法考虑该 lower_case_table_names值。(缺陷号 32448364)

  • LIKE ... ESCAPE, where ESCAPEdid not reference a constant value, 在准备好的语句中没有正确处理。(缺陷号 32446728)

  • ESCAPEMySQL 传统上将子句(即ESCAPE '') 中的空值解释 LIKE无转义字符。当前两个参数中的任何LIKE一个是使用多字节字符集的字符串时,可能会出现问题,因为在这种情况下,空值被解释为意味着反斜杠 ( \) 应该用作转义字符,从而破坏了预期的行为。

    此修复导致LIKE解释 ESCAPE ''为无论字符集如何都没有转义字符,从而恢复以前的预期行为。

    此外,如果无法将指定的转义字符转换为目标字符集,我们现在会引发错误。这取代了这种情况下的原始行为,即默默地退回到使用反斜杠作为转义字符。(缺陷号 32446508)

  • Windows 软件包存在 OpenSSL 漏洞。(缺陷号 32431519)

  • 包含窗口函数或子查询的可加载函数参数可能会产生意外结果。(缺陷号 32424455)

  • 存储过程中用于游标的临时表处理不当可能会导致意外的服务器行为。(缺陷号 32416811)

  • 在源代码中使用该符号TRUE会导致某些平台上的构建失败。这被取代了 true。(错误#32406197,错误#102308)

  • 用于确定用户是否可以查看 INFORMATION_SCHEMA.VIEWS表中的视图定义的权限检查工作不正确。(缺陷号 32405811)

  • 对于递归公用表表达式,如果有必要将内存中的临时表转换为磁盘上的临时表,则可以引发断言。(缺陷号 32404597)

  • 当函数不带参数时,未正确处理使用用户创建的函数的准备好的语句。(缺陷号 32404542)

  • 克隆插件安装失败可能导致后续安装尝试失败。(错误#32402158,错误#102240)

  • 一些与时间列类型一起使用的内部函数没有提供对YEAR 值的正确处理。(缺陷号 32395335)

  • 内部常量MAX_FLOAT_STR_LENGTH= 12 和MAX_DOUBLE_STR_LENGTH= 22 分别表示表示 FLOATDOUBLE值的字符串的最大长度。转换例程 my_gcvt为确定是否使用科学记数法而采用的试探法有时会生成比这些字符串更长的字符串。

    这些长字符串导致某些字符串转换例程出现问题,因为它们的实际长度可能超过预期的最大值。每当我们在字符串上下文中获取or时,我们都会通过显式告知 my_gcvt所需的长度来解决此问题。(缺陷号 32385934)FLOATDOUBLE

  • 在触发器中,RAND() 不带参数使用可能会导致意外的服务器行为。(缺陷号 32372805)

  • Item_cache准备好的语句或存储过程中使用对象时,它可能指向 Field在先前执行中使用的对象。我们通过将缓存的字段成员替换为 来解决此问题,该成员Item_field在过程的生命周期内保持不变。(缺陷号 32367019)

  • 远程克隆操作后,在接收方 MySQL 服务器实例上报告缺少表空间错误。由于捐赠者实例上的变量被禁用,表空间未被克隆 innodb_validate_tablespace_paths ,这导致关联的表空间对象未被加载。现在在克隆操作之前执行检查以确保加载所有表空间对象。(错误#32354908,错误#102137)

  • 一些包含大量 子查询EXISTS的查询块并不总是能正确处理。(缺陷号 32343143)

  • SHOW CREATE TABLE如果语句失败, mysqlpump可能会意外退出 (缺陷号 32340208)

  • wait_timeout由于捐赠者 MySQL 服务器实例 的设置较低,长时间运行的远程克隆操作失败 。wait_timeout供体线程在侦听克隆协议命令时使用 MySQL 服务器 设置。为避免设置较低的施主实例出现超时故障 wait_timeout,克隆空闲超时现在设置为默认 wait_timeout设置,即 28800 秒(8 小时)。克隆网络读写超时值也增加了。(缺陷 #32340112,缺陷 #102097)

  • 在服务器中运行的复制线程在 Performance Schemathreads表中可见,但未能出现在 variables_by_threadstatus_by_thread表中。现在它们出现在所有三个表中。感谢 Facebook 的贡献。(错误#32335496,错误#102115)

  • 在重写之前显示查询字符串。(错误#32335263,错误#32628376)

  • libedit 对于使用该库 编译的构建,如果mysql使用该选项调用客户端--default-character-set=utf8 ,则 libedit 会拒绝输入多字节字符。(错误#32329078、错误#32583436、错误#102806)

  • 在 Windows 上,大型结果集可能导致 mysql客户端意外退出。(错误#32316323,错误#102051)

  • 如果在准备期间发生错误,则为重复执行准备查询表达式可能会引发断言。(缺陷号 32291841)

  • 功能索引创建未将列名处理为不区分大小写。(错误#32287186,错误#101994)

  • 在语句执行期间绑定到触发器的临时表可能会导致服务器意外退出。(错误#32267749,错误#32288089,错误#32299045)

  • 改进NULL了涉及十进制值的计算中的错误处理。(错误#32258228,错误#32497850)

  • 如果在模式更改为只读时模式中的表有打开的处理程序,则会引发断言。(缺陷号 32248313)

  • replication_group_members在某些情况下 ,从性能架构表中选择会 引发错误 1267非法混合排序规则...。这是由于 MySQL 8.0.22 在处理列值和系统变量之间的比较方面发生了变化。(缺陷号 32244631)

    参考资料:另请参阅:Bug #32501472、Bug #32579184。

  • MySQL 为许多返回整数值的时间函数生成了无效的元数据。这些功能包括 TO_DAYS(), PERIOD_DIFF(), PERIOD_ADD(), TO_SECONDS(), DAYOFMONTH(), DAYOFYEAR(), HOUR(), 和 MINUTE()等。(缺陷号 32239578)

  • 未正确处理仅检索不可见列的自然连接的表子查询。(缺陷号 32235285)

  • 对于调试版本,ALTER TABLE用于将列设置为具有 引发断言的DEFAULT值。TRUE(缺陷号 32235058)

  • 当评估使用索引条件下推下推到存储引擎的条件时出现错误时,存储引擎有时会忽略该错误并返回指示成功的错误代码,这可能会导致以后断言失败。

    现在在这种情况下,我们确保执行程序检测到错误已经出现,并在此时停止执行。(缺陷号 32234773)

  • 对于禁用二进制日志记录的调试构建,ALTER TABLE ... MODIFY COLUMN无效 DEFAULT值引发断言。(缺陷号 32234194)

  • 当函数将常量标量子查询作为参数并且标量子查询引发错误时,聚合函数的准备有时会在调试版本中遇到断言。(缺陷号 32231698)

  • 对于调试版本,在聚合上下文中评估的不正确字符集处理 NULLIF()引发了断言。(缺陷号 32231557)

  • CREATE TABLE具有不受支持的值 的语句KEY_BLOCK_SIZE引发断言。(缺陷号 32227101)

  • 升级具有大量表的 MySQL 实例会消耗过多的内存。分配给分析数据字典实体以进行可能升级的内存在处理完所有实体后才会释放。(错误#32226180,错误#101818)

  • ANALYZE TABLE在一个表上执行的查询与对同一表的长时间运行的查询同时执行会导致对该表的后续查询等待长时间运行的查询完成。ANALYZE TABLE现在消除了由 引起的等待 ,从而允许后续查询无需等待即可执行。(缺陷号 32224917)

  • 使用LIKE带子句的表达式的ESCAPE语句并不总是能正确处理。(缺陷号 32213959)

  • 在 ARM 平台上,可以在构建过程中使用的实用程序中提出断言。(缺陷号 32209415)

  • InnoDB并不总是正确处理表分区的一些合法名称。(缺陷号 32208630)

  • 禁用该 explicit_defaults_for_timestamp 变量后,克隆插件安装失败并出现 PFS 表创建错误。变量设置导致 TIMESTAMP克隆性能模式表中的列被错误地创建为NOT NULL列。(缺陷号 32199611)

  • SHOW CREATE VIEWROLLUP 为使用子句创建的视图生成了无效语法。这个问题也影响了mysqldump,它使用SHOW CREATE VIEW. (漏洞 #32197353,漏洞 #101740)

  • 失败CREATE TABLEALTER TABLEwith SECONDARY_ENGINE_ATTRIBUTE可能会泄漏内存。(缺陷号 32187507)

  • 连接建立失败可能导致服务器错误地计算打开的连接数。(缺陷号 32156518)

  • 在 MySQL 8.0.19 中完成的重构工作没有使用诸如 IFNULL(). (缺陷号 32141711)

    参考:这个问题是 Bug #30320525 的回归。

  • 优化器可以选择使用跳过扫描,即使是对于它不适用的反向索引扫描,也会导致不可预测的服务器行为。(缺陷号 32127290)

  • SHOW CREATE USER导致任何未决事务提交。(缺陷号 32123671)

  • 尽管窗口函数是在准备过程中很晚才设置的,但包含窗口函数的可加载函数参数在准备时进行了评估。现在对这些的评估被延迟到执行时间,类似于对包含子查询的可加载函数参数执行此操作的方式。(错误#32122078,错误#32393265)

  • 创建包含具有非常量默认表达式的列的表会导致后续ALTER TABLE语句失败。(错误#32121425,错误#101486)

  • BLOB使用较大的类似列的值 更新类似BLOB列可能会导致更新后的列大小错误,甚至为零。(缺陷号 32112403)

  • 如果使用STOP GROUP_REPLICATION语句停止组成员,而另一个客户端正在查询组复制的性能架构统计信息,则可能会出现竞争条件。Group Replication 现在可以防止STOP GROUP_REPLICATION语句和 Performance Schema 查询同时运行。(缺陷号 32100147)

  • 对内部队列的不正确锁定可能导致 mysqlpump意外退出。(缺陷号 32067013)

  • 在 MacOS 上,首选项窗格现在包含一个选项,用于my.cnf在初始化期间加载配置的文件。(缺陷号 32057159)

  • 服务器并不总是正确地准备一个使用 GROUP_CONCAT()on a SELECTwithORDER BY子句的语句。(错误#32053547,错误#31947466)

  • sys模式 create_synonym_db()过程无法创建INFORMATION_SCHEMA同义词 。(缺陷 #32050275,缺陷 #101258)

  • 窗口函数中发生的错误并不总是正确传播,这可能导致调试版本中的断言失败。(缺陷号 32028154)

  • 现在可以 在组复制停止时对通道使用START REPLICA SQL_THREADSTOP REPLICA SQL_THREAD语句 。group_replication_applier这使操作员能够在离开该组的服务器上应用任何剩余的未应用事务,而不必将该服务器重新加入该组。(错误#32027612,错误#32414767)

  • 调用XA COMMIT 由另一个线程启动的事务可能会导致 Address Sanitizer 警告。(缺陷号 32025408)

  • mysql客户端以批处理模式使用时,其解析器可能会混淆 USE其后跟 DROP DATABASEUSE数据库名称。(错误#32015466,错误#101124)

  • MySQL 8.0.17 中的一项更改导致comp_err变得更慢。已恢复正常性能。(缺陷号 32014733)

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

  • 在语句中使用CAST()on a DATEor DATETIMEvalue 会针对and INSERT引发警告,但不会针对 or 引发警告。现在,在每种情况下也会显示警告。(缺陷号 32013612)"0000-00-00""2000-02-31""2000-01-00""2000-00-01"

  • 语句MASTER_COMPRESSION_ALGORITHMS值 的最大长度 检查不正确。CHANGE MASTER TO(缺陷号 32008597)

  • 将动态参数转换为 YEAR(例如 in )时,未执行类型传播,导致使用该参数的预准备语句的执行失败。(缺陷号 32002844)PREPARE s FROM "SELECT CAST(? AS YEAR)"

  • 升级到MySQL 8.0的MySQL 5.7实例的一些系统表定义与新安装的MySQL 8.0中的系统表定义不同。(缺陷号 31989290)

  • 某些SHOW使用子查询的语句可能会导致意外的服务器行为。(缺陷号 31853180)

  • 使用返回正确结果的查询,但 添加时没有。(缺陷号 31848191)GROUP BY column HAVING column_expression IS [NOT] NULLWITH ROLLUP

  • SHOW ENGINE PERFORMANCE SCHEMA STATUS 语句报告了性能模式的不正确内存使用情况。(错误#31795132,错误#100624)

  • 尝试使用 Visual Studio 2019 生成实体数据模型时,无法使用实体框架向导导入某些表。这是由于 MySQL 8.0.21 对正交数据类型聚合所做的更改,它处理来自 UNION和来自函数或运算符(例如CASEand )的列IF()。这使得返回ENUMor 类型的值成为可能,SET在这种情况下之前不需要处理该值。(缺陷号 31750645)

    参考资料:另请参阅:Bug #29698617。

  • 在优化ORDER BY子查询的子句时,有可能清理外部引用的子查询树SELECT,这可能导致过早退出。(缺陷号 31721430)

  • 系统表中格式错误的名称mysql.func可能会导致意外的服务器行为。(缺陷号 31674599)

  • LOAD DATA如果加载许多长行,性能会下降。(缺陷号 31637142)

  • 会话可以禁用自己的审计。(缺陷号 31630954)

  • 用于将配置文件引导优化与 GCC 一起使用的编译器选项已得到改进,以 在适当的时候包括-fprofile-partial-training和 。-fprofile-update=prefer-atomic感谢 Dmitriy Philimonov 的建议。(错误#31450064,错误#99781)

  • performance_schema_max_thread_classes 使用和 系统变量设置为零 启动服务器 performance_schema_max_thread_instances 导致 MySQL Enterprise Firewall 无法创建新规则。(错误#31335080、错误#24947654、错误#83519)

  • 在从重做日志恢复期间增加了一个空指针,导致未定义行为消毒器 (UBSAN) 构建中出现运行时错误。(错误#31173032、错误#32428131、错误#32483976)

  • 启用系统变量以log_slow_extraErrno字段添加到慢查询日志输出,即使对于失败的语句,错误号也为 0。(缺陷 #30769965,缺陷 #98220)

  • 在调试版本中,某些使用 utf32字符集的转换操作可能会导致意外的服务器行为。(缺陷号 30746908)

  • SELECT ... FOR UPDATE从一个不存在的 Performance Schema 表生成 ER_TABLEACCESS_DENIED_ERROR 而不是ER_NO_SUCH_TABLE. (缺陷 #30701047,缺陷 #98068)

  • 对存储的程序局部变量的错误处理可能会导致意外的服务器行为。(缺陷号 30366310)

  • Performance Schema metadata_locks表可能会显示不正确DURATION的值,例如当某个持续时间的元数据锁TRANSACTION 后来EXPLICIT 被操作修改为持续时间RENAME TABLE 时。(错误#30065213,错误#96237)

  • 如果audit_log插件在启动时生成一个密码,它可能无法存储其加密密码。(漏洞#29559793)

  • 卸载插件可能会影响准备语句的后续执行。(缺陷号 29363867)

  • 发生截断时,将字符串值的用户定义变量或函数结果转换为双精度(例如,使用 CAST())不会发出警告。(错误#27969934,错误#21943299)

  • 当视图定义LIKEESCAPE子句一起使用时,子句的内容将 ESCAPE被忽略,从而导致错误的结果。(缺陷号 26086751)

  • 可以将非法 ASCII 值(超出 7 位范围)插入到使用 ascii字符集的字符列中。这现在是被禁止的。(缺陷号 24847620)

  • 为了在配置值中启用空格和其他特殊字符,mysql_config_editor现在用双引号字符将其写入配置文件的值括起来,并且还转义值中使用的双引号字符。(缺陷 #19953349,缺陷 #74691)

  • 当聚合迭代器找不到任何行时,它会调用其SELECT列表中的每个项目来通知它们(例如,以便 COUNT(*)可以将自己设置为零,或者SUM(foo)可以将自己设置为 NULL)。在 MySQL 8.0.22 完成内部工作后,它也可能无意中调用隐藏项。在一些带有双重嵌套子查询的查询中,一个这样的隐藏项可能成为它自己的父子查询(MySQL 中的标量子查询对这个调用有特殊的遗留处理,对于不是 的查询),导致整个子查询在它不应该ONLY_FULL_GROUP_BY返回时返回NULL这样做了。

    这是通过仅对可见项进行调用来解决的,如 MySQL 8.0.21 和更早版本。(缺陷 #102101,缺陷 #32335256)

  • 在解释访问路径的旧式计划时,缓存无效器LATERAL被延迟,直到所有外部连接都完成,因为外部连接可能产生空补行,这些行也应该使缓存无效。当外连接包含 LATERAL, 并且LATERAL 仅引用同一外连接内的表时,就会出现问题;在这种情况下,应该立即应用无效程序而不是延迟,以免我们错过发出的行,并且缓存被错误地保存。特别是,当某些信息架构表位于外部连接的右侧时,可能会发生这种情况,因为这些现在是使用LATERAL.

    我们通过延迟无效器的发射来解决这个问题,直到我们在与要无效的物化相同的(外部)连接嵌套内,但不再进一步。这也正确地处理了表中的行应该使两个或多个单独的具体化无效的情况,其中一些在连接内而一些在更高处。(错误#101460、错误#32113029、错误#32311147)

    参考:此问题是 Bug #98238、Bug #30766181 的回归。

  • 优化器跟踪最多六个字符的打印浮点数,这意味着许多值的精度可能非常低,因为符号、小数点和指数可以使用其中的许多字符。这对于大数字来说尤其成问题,因为它的精度可能小到 1,并且可以四舍五入到绝对值超过的值DBL_MAX,因此可能被 JSON 解析器拒绝。

    现在,此类数字始终打印在精度为 6 的优化器跟踪中。(错误 #101457,错误 #32113020)

    参考资料:另请参阅:Bug #94672、Bug #29493604。

  • Filesort 用于具有ORDER BY ... DESC子句的查询,即使在降序列上的索引可用和使用时也是如此。发生这种情况是因为 ORDER BY由于匹配等式谓词中的字段而没有删除子句,即使它应该删除,因此优化器没有将查询与降序索引匹配,从而导致性能不佳。(缺陷 #101220,缺陷 #32038406)

  • optimizer_search_depth小于JOIN_TAB用于连接的结构数时,调试服务器命中断言。(错误#100288,错误#31655483)

  • ALTER TABLE 操作EXCHANGE PARTITIONIMPORT TABLESPACE和之后IMPORT PARTITION TABLESPACE,留下了反映表空间先前角色的序列化数字信息。现在在这种情况下,旧的 SDI 被明确地从涉及表空间交换或导入的两个表空间中删除。(缺陷 #98501,缺陷 #30878065)

  • 由整数除法运算符 ( DIV) 执行的类型解析产生的精度比结果中的预期小 1。

    我们感谢 Kaiwang Chen 的贡献。(缺陷 #96459,缺陷 #30156563)