号外!!!MySQL 8.0.24 发布

  • 审核日志说明

  • 编译须知

  • 连接管理说明

  • 错误处理

  • keyring注意事项

  • 优化器说明

  • 包装注意事项

  • 性能架构说明

  • 可插拔身份验证

  • 安全须知

  • 空间数据支持

  • 添加或更改功能

  • 修正错误

审核日志说明

  • MySQL企业审核现在支持对JSON格式的日志文件进行审核日志文件修剪。请参阅审核日志文件的空间管理。

编译须知

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

连接管理说明

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

    在这种情况下,服务器现在会在关闭连接之前将原因写入连接,并且客户端会收到更多有用的错误消息:客户端由于不活动而被服务器断开了连接。有关配置此行为,请参见wait_timeout和interactive_timeout。 (ER_CLIENT_INTERACTION_TIMEOUT)。

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

错误处理

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

密匙注意事项

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

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

    --early-plugin-load在启动过程中不使用服务器选项加载密钥环组件,或者在启动过程中或在运行时使用系统变量配置密钥环组件 :

    如果安装了密钥环组件,则新的performace schema中keyring_component_status表将提供有关其的状态信息。请参阅 keyring_component_status表。

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

    现有的密钥环插件仍然可用,而用户可见的特征没有变化,但是对它们的实现进行了修改,以使用组件基础结构。使用名为的内置插件可简化此过程,该插件 daemon_keyring_proxy_plugin充当插件和组件服务API之间的桥梁。请参阅 “密钥环代理桥插件”。

    • 在启动过程中,服务器使用清单文件确定要加载的密钥环组件,并且在初始化时,已加载的组件将查询其自己的配置文件。请参阅“ 密钥环组件安装”。

    • 在运行时,使用newALTER INSTANCE RELOAD KEYRING语句可以在更改其配置文件后重新配置已安装的密钥环组件。请参阅ALTER INSTANCE语句。

    • component_keyring_file将密钥环数据存储在服务器主机本地的文件中。该组件在MySQL Community Edition和MySQL Enterprise Edition发行版中可用。请参阅 使用component_keyring_file基于文件的密钥环组件。

    • component_keyring_encrypted_file将密钥环数据存储在服务器主机本地的加密且受密码保护的文件中。该组件在MySQL企业版发行版中可用。请参阅 使用component_keyring_encrypted_file加密的基于文件的密钥环组件。

优化器说明

  • MySQL查询优化器现在可以将派生表优化应用于相关的标量子查询。这是通过应用额外的分组,然后对提升的谓词进行外部联接来完成的。例如,诸如的查询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如果返回则进行查询 。在评估提升的谓词之前,检查是评估重写查询中的任何WHEREorJOIN子句的一部分 。

    有关更多信息,请参见“ 相关子查询”以及“ 派生表”。

包装注意事项

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

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

性能架构说明

  • 不兼容的更改: 性能架构setup_instruments表中的工具进行了 如下修改:

    • 有新的内存工具可用来处理分配给数据字典基础结构和对象的内存:

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


    • 此外,该servers组件是的重复的,servers_cache已被删除。

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


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

可插拔身份验证

  • 通过新的 caching_sha2_password_digest_rounds 系统变量,可以配置caching_sha2_password 身份验证插件用于密码存储的哈希回合数。

安全须知

  • 对于捆绑了OpenSSL库的平台,用于MySQL Server的链接OpenSSL库已更新至1.1.1k版本。在https://www.openssl.org/news/cl111.txt和 https://www.openssl.org/news/vulnerabilities.html中描述了新OpenSSL版本中修复的问题 。(缺陷#32680637)

空间数据支持

  • 新 函数ST_LineInterpolatePoint() 和ST_LineInterpolatePoints()函数返回在LineString几何的起点和终点之间插入的单个点或多个点 。新 ST_PointAtDistance()函数将沿LineString几何图形返回给定距离的单个点 。请参见 空间运算符函数。

    新的ST_Collect()聚合函数采用多个几何参数,并从中产生单个几何集合值。请参见 空间聚合函数

    CAST()和 CONVERT()功能已经扩展到从一个空间类型支持铸造几何值到另一个。请参见强制转换函数和运算符。

添加或更改功能

  • InnoDB的: 将AUTOEXTEND_SIZE最大设置从64M提高到4GB。该 AUTOEXTEND_SIZE选项在MySQL 8.0.23中引入,它定义了InnoDB 当表空间变满时扩展表空间大小的数量。支持该选项与CREATE TABLEALTER TABLE, CREATE TABLESPACE,和 ALTER TABLESPACE语句。有关更多信息,请参见表 空间AUTOEXTEND_SIZE配置。(缺陷#32438606)

  • 微软的Windows: 将/RTC1编译器标志从调试的编译器标志去掉,以减少运行由调用的所有测试所需的时间,mysql-test-run.pl在Windows上使用MSVC时脚本。最初,此编译器标志是随CMake 程序一起引入的(默认为调试版本),它生成代码以测试函数调用周围的堆栈损坏以及在运行时使用未初始化的变量。删除该错误不会导致发现错误的损失/RTC1 编译器标志。地址清理(ASAN)测试很可能会发现内存错误,例如堆栈损坏,并且编译器警告会检测到未初始化变量的使用。(错误#32525732)

  • 微软Windows系统: 该 named_pipe_full_access_group 系统变量现在默认为空字符串(''),使得命名的管道连接固定。以前'*everyone*'是默认值。有效的Windows本地组名称可能会被替换。

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

    感谢Daniëlvan 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在指定整理 CREATE TABLE声明SHOW CREATE TABLEDEFAULT CHARSET包含字符集名系统变量,和二进制日志的所有值随后显示的字符集为 utf8它正在成为一个代名词 utf8mb4。现在,在这种情况下, utf8mb3将显示,并CREATE TABLE发出警告 ' collation_name'是已弃用的字符集UTF8MB3的排序规则。请考虑改用带有适当排序规则的UTF8MB4。(错误#27225287,错误#32085357,错误#32122844)

    参考:另请参见:错误#30624990。

  • InnoDB:buf_page_create()释放 该函数遇到的过时页面 ,然后再次从磁盘读取而无需重新初始化。错误#32622548)

  • InnoDB:在MySQL 8.0.23中,源代码enum中缓冲池页面和缓冲池块数据结构中的 C ++类型值 InnoDB已从更改 intuint8_t,从而导致数据ascii在不同的输出(包括消息和INFORMATION_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: 在Windows上,使用COMPRESSION选项创建表时 ,InnoDB 在检查由同一系统调用设置的打孔支持标志之前,无法检查系统调用的错误状态,从而导致读取未初始化的标志。(缺陷号32322645)

  • InnoDB: 从MySQL 5.7升级到MySQL 8.0后,由于MySQL 5.7中引入的几何类型更改,在MySQL 5.6中创建的Geometry列在重新启动服务器时导致失败。(缺陷#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:rw_lock_stats MySQL 5.7 中分片计数器的引入导致CPU缓存效率下降。为了解决MySQL 5.7中的此问题,更改了分片方法。为了获得最佳性能,rw_lock_stats在MySQL 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撤消表空间。为了解决此问题,在升级模式下启动服务器时,不再执行undo表空间截断。(缺陷#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: 使用4KInnoDB页大小的初始化服务器会 导致“密钥过长”错误被写入错误日志。(缺陷#31496943,缺陷#99892)

  • InnoDB: 在虚拟列上创建索引会引发无效的调试断言失败。(缺陷#31279528,缺陷#99421)

  • 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)

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

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

  • 复制: 当MySQL Server计算集合中GTID的数量时,返回值可能会自动换行,并返回错误的结果。当远程克隆操作更加有效时,这可能导致错误的决定,即使用二进制日志中的状态传输进行组复制的分布式恢复。现在,该逻辑已得到纠正。(错误#32086209)

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

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

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

  • 复制:SHOW PROCESSLIST副本的SQL线程 的语句输出有时会在实际捕获副本时显示当前正在应用的最后一个查询。(缺陷#30521198,缺陷#97560)

  • Microsoft Windows: 在具有32个以上逻辑处理器的Windows系统上运行MySQL Server(64位)并将资源组的VCPU属性设置为大于30会产生不正确的CPU掩码值,该值用于设置线程亲和力。在这种情况下,MSVC编译器报告警告,该文件中32位移位已隐式转换为64位 thread_attrs_api_win.cc。转换导致在具有32个以上逻辑处理器的系统上错误的CPU掩码计算。此修复程序通过将1shift的 参数替换为来确保在计算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,它们也返回not,并且优化程序希望它们NULL在 NULL输入时返回。

    受此问题影响的功能包括 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指示的元数据多时 ,有可能将强制转换 为带符号整数类型以命中一个断言。发生这种情况的原因是,十进制值在转换为整数时会四舍五入,并且 Item_typecast_signed没有考虑到四舍五入可能会增加十进制值的整数部分中的位数,例如将9.9舍入为10时。

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

    参考:此问题是对以下内容的回归:错误#32371039。

  • 该名称my_row_id不允许用于不可见的列。此限制已解除。(缺陷#32586231)

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

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

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

  • LIKE ... ESCAPE,其中 ESCAPE并没有提及一个恒定值,未正确一份声明中进行处理。(错误#32446728)

  • MySQL传统上将ESCAPE子句(即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分别代表表示FLOAT和 的字符串的最大长度 DOUBLE。转换例程my_gcvt用于确定是否使用科学计数法的启发式方法 有时会生成比这些更长的字符串。

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

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

  • 远程克隆操作后,在收件人MySQL服务器实例上报告缺少表空间错误。由于innodb_validate_tablespace_paths 在施主实例上禁用了变量,因此未克隆表空间 ,这导致未加载关联的表空间对象。现在在克隆操作之前执行检查以确保所有表空间对象都已加载。(缺陷#32354908,缺陷#102137)

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

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

  • 由于wait_timeout施主MySQL Server实例的设置较低,长时间运行的远程克隆操作失败 。wait_timeout侦听克隆协议命令时,施主线程使用MySQL Server 设置。为避免wait_timeout设置较低的施主实例发生超时失败, 现在将“克隆空闲超时”设置为默认 wait_timeout设置,即28800秒(8小时)。克隆网络的读写超时值也有所增加。(缺陷#32340112,错误#102097)

  • “性能模式”threads表中可见服务器中运行的复制线程,但未能显示在“ variables_by_thread或” status_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)

  • 从Performance模式选择 replication_group_members中提出错误1267某些情况下,表排序规则的非法组合...。这是由于MySQL 8.0.22中对列值和系统变量之间的比较处理进行了更改。(错误#32244631)

    参考:另请参见:错误#32501472,错误#32579184。

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

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

  • 对于调试版本,ALTER TABLE用于将列设置为具有 引发断言的 DEFAULTTRUE。(缺陷#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 VIEW为使用ROLLUP 子句创建的视图产生了无效的语法。这个问题也影响了使用的mysqldumpSHOW CREATE VIEW。(缺陷号32197353,错误#101740)

  • 发生故障CREATE TABLE或 ALTER TABLE与之 SECONDARY_ENGINE_ATTRIBUTE可能会泄漏内存。(缺陷号32187507)

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

  • 在MySQL 8.0.19中完成的重构工作无法使用诸如的功能正确处理列的左联接 IFNULL()。(缺陷#32141711)

    参考:此问题是对以下内容的回归:错误#30320525。

  • 优化器甚至可以选择对不适用的向后索引扫描使用“跳过扫描”,从而导致服务器行为无法预测。(缺陷#32127290)

  • 尽管在准备过程中很晚才设置了窗口函数,但在准备时仍对包含窗口函数的UDF函数参数进行了评估。现在,将对它们的求值延迟到执行时间为止,这与针对包含子查询的UDF自变量的执行方式类似。(缺陷#32122078,错误#32393265)

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

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

  • 如果使用STOP GROUP_REPLICATION语句停止组成员,而另一个客户端正在查询组复制的性能模式统计信息,则可能会发生争用情况。现在,组复制可防止STOP GROUP_REPLICATION语句和性能架构查询同时运行。(缺陷号32100147)

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

  • 服务器并不总是正确准备使用如下语句 GROUP_CONCAT()上 SELECTORDER BY条款。(缺陷#32053547,错误#31947466)

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

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

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

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

  • 当MySQL的在批处理模式下使用客户端,它的解析器可以通过混淆 USE之后 DROP DATABASE,当 USE数据库名称被引述。(缺陷号32015466,缺陷号101124)

  • MySQL 8.0.17中的更改导致comp_err变慢得多。恢复了正常性能。错误32014733)

    参考:此问题是对以下内容的回归:错误#29781631,错误#95377。

  • 在语句中CAST()对 DATE或 DATETIME值 使用会INSERT"0000-00-00"和 发出警告"2000-02-31",但不会为 "2000-01-00"或 发出警告"2000-00-01"。现在,在每种情况下都将显示警告。(缺陷号32013612)

  • 语句MASTER_COMPRESSION_ALGORITHMS值 的最大长度 CHANGE MASTER TO未正确检查。错误32008597)

  • 将动态参数强制转换为时 YEAR(例如中的 ),未进行类型传播,从而导致执行了其中参数被使用失败的Prepared语句。错误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来自函数或运算符(例如CASE和)的列 IF()。这样就可以返回类型为ENUM或 的值,SET在这种情况下,该值以前不需要处理。(缺陷#31750645)

    参考:另请参见:错误#29698617。

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

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

  • 会话可以禁用自己的审核。错误#31630954)

  • 改进了将配置文件引导的优化与GCC结合使用的编译器选项,以在适当的时候添加-fprofile-partial-training并 包括在内 -fprofile-update=prefer-atomic。感谢Dmitriy Philimonov的建议。错误#31450064,错误#99781)

  • 使用performance_schema_max_thread_classes 和 performance_schema_max_thread_instances 系统变量设置为零启动服务器会 导致MySQL企业防火墙无法创建新规则。(缺陷#31335080,错误#24947654,错误#83519)

  • 从重做日志恢复期间,空指针增加了,从而导致未定义行为清理器(UBSAN)构建中出现运行时错误。(缺陷#31173032,缺陷#32428131)

  • 随着log_slow_extra系统变量启用了加Errno场到慢查询日志输出,错误号即使是失败的语句为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)

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

  • 可以在使用ascii字符集的字符列中插入非法的ASCII值(超出7位范围) 。现在禁止这样做。(缺陷#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 仅引用同一外部联接中的表时,就会出现问题 。在这种情况下,应该立即应用无效器,而不要延迟,以免我们遗漏发出的行,并且错误地保留了缓存。特别是,当某些Information Schema表位于外部联接的右侧时,可能会发生这种情况,因为这些表现在是使用定义的视图LATERAL

    我们通过延迟失效器的发出来解决此问题,直到我们进入与要实现的实现相同(外部)联接嵌套的位置为止,但不再进一步。这也可以正确地处理表中的行应使两个或多个单独的实现无效的情况,其中一些在连接内,而某些更高。(缺陷#101460,缺陷#32113029,缺陷#32311147)

    参考:此问题是对以下内容的回归:错误#98238,错误#30766181。

  • 一个优化程序跟踪打印的浮点数最多包含六个字符,这意味着对于给定的符号,小数点和指数可以使用许多这样的字符,许多值的精度可能会很低。这对于大数尤其成问题,因为大数的精度因此可以小到1,并且可以四舍五入为绝对值超出的值DBL_MAX,因此可以被JSON解析器拒绝。

    现在,这样的数字始终以6的精度打印在优化程序跟踪中。(错误#101457,错误#32113020)

    参考:另请参见:错误#94672,错误#29493604。

  • Filesort用于具有ORDER BY ... DESC子句的查询,即使降序列上的索引可用并已使用也是如此。之所以发生这种情况,是因为 ORDER BY即使匹配了相等谓词中的字段也没有删除子句,因此优化程序无法将查询与降序索引进行匹配,从而导致性能欠佳。(缺陷#101220,错误#32038406)

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

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

  • 由整数除法运算符(DIV)执行的类型解析产生的精度比结果期望的精度低一。感谢陈开旺的贡献。(缺陷#96459,缺陷#30156563)


你可能感兴趣的:(号外!!!MySQL 8.0.24 发布)