Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.30 的变化(2022-07-26,正式发布)

MySQL 8.0.30 的变化(2022-07-26,正式发布)

字符集支持

  • 重要更改: 以前的更改已重命名字符集,已弃用的名称前缀为utf8_改为使用 utf8mb3_。在此版本中,我们utf8_也使用 utf8mb3_前缀重命名排序规则;这是为了使排序规则名称与字符集的排序规则名称一致,不再依赖已弃用的排序规则名称,并澄清 和 之间的utf8mb3区别 utf8mb4。使用 utf8mb3_前缀的名称现在专门用于SHOW 语句输出中的这些排序规则,例如SHOW CREATE TABLE,以及信息模式表列中显示的值,包括 COLLATIONSCOLUMNS表。(缺陷号 33787300)

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

  • 重要变化: 当不止一种语言具有相同的归类定义时,MySQL 只为其中一种语言实现归类。这意味着某些语言仅包含 utf8mb4在特定于其他语言的 Unicode 9.0 排序规则中。此版本通过为那些以前仅由其他语言的特定语言排序规则涵盖的语言添加特定语言排序规则来解决此类问题。此处列出了新的排序规则:

    • 挪威

      • (博克马尔语)utf8mb4_nb_0900_ai_ci

      • (博克马尔语)utf8mb4_nb_0900_as_cs

      • (挪威语)utf8mb4_nn_0900_ai_ci

      • (挪威语)utf8mb4_nn_0900_as_cs

    • 带有拉丁字符的塞尔维亚语

      • utf8mb4_sr_latn_0900_ai_ci

      • utf8mb4_sr_latn_0900_as_cs

    • 带有拉丁字符的波斯尼亚语

      • utf8mb4_bs_0900_ai_ci

      • utf8mb4_bs_0900_as_cs

    • 保加利亚语

      • utf8mb4_bg_0900_ai_ci

      • utf8mb4_bg_0900_as_cs

    • 加利西亚语

      • utf8mb4_gl_0900_ai_ci

      • utf8mb4_gl_0900_as_cs

    • 带西里尔字母的蒙古文

      • utf8mb4_mn_cyrl_0900_ai_ci

      • utf8mb4_mn_cyrl_0900_as_cs

    有关详细信息,请参阅 特定于语言的排序规则。(缺陷号 31885256)

编译笔记

  • 在 Enterprise Linux 上,修复了 ADD_LINUX_RPM_FLAGS,以便在修改它们之前使用 CMAKE_C_FLAGS 和 CMAKE_CXX_FLAGS 的初始值。(漏洞#34131794)

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

  • 添加了一个新的 SHOW_SUPPRESSED_COMPILER_WARNINGS CMake 选项。启用它以显示抑制的编译器警告,并且这样做不会因 -Werror 而失败。它默认为关闭。(缺陷号 34046748)

  • 添加了 macOS/ARM 支持。(缺陷号 34017614)

  • 在 Windows 上,使用 /wd4996 命令行选项全局禁用弃用警告 (C4996);现在在适当的地方禁用弃用警告。(缺陷号 33975638)

  • 在 Windows 上,改进了生成的 INFO_BIN 和 INFO_SRC 文件。(错误#33972317,错误#34052301)

  • 改进了 GCC 8 支持以包括 -lstdc++fs 以便使用 std::filesystem。(缺陷号 33939798)

弃用和移除说明

  • 复制:现在已弃用 将 replica_parallel_workers系统变量(或等效的服务器选项 --replica-parallel-workers)设置为 0,现在这样做会引发警告。

    要在没有警告的情况下获得相同的结果(即使用单线程),请 replica_parallel_workers=1改为设置。

  • --skip-host-cache服务器选项现已弃用,并可能在未来的版本中删除 。

    请改为在 文件 中使用SET GLOBAL host_cache_size = 0, 或 set 等语句 。host_cache_sizemy.cnf

  • --old-style-user-limits 选项使服务器强制执行用户限制,因为它们在 MySQL 5.0.3 之前,并且旨在与非常旧的版本向后兼容。此选项现已弃用,现在使用它会引发警告。您应该期望在未来的 MySQL 版本中删除此选项,因此建议您现在开始删除您的 MySQL 应用程序可能对此选项的任何依赖性。

生成的隐形主键 (GIPK)

  • MySQL 8.0.30 现在支持 GIPK 模式,这会导致生成的不可见主键 (GIPK) 被添加到 InnoDB没有显式主键创建的任何表中。此增强功能仅适用于 InnoDB表格。

    GIPK 模式添加到 InnoDB表中的生成键列的定义如下所示:

    my_row_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT INVISIBLE PRIMARY KEY

    生成的主键的名称总是 my_row_id; 在 GIPK 模式生效时,您不能在 CREATE TABLE创建新InnoDB表的语句中将其用作列名,除非它包含显式主键。

    默认情况下不启用 GIPK。要启用它们,请将 sql_generate_invisible_primary_key 服务器系统变量(也在本版本中引入)设置为 ON. 此设置对复制应用程序线程没有影响;这意味着副本永远不会为不是在源上使用主键创建的复制表生成主键。

    当 GIPK 生效时,您不能更改生成的不可见主键,但有一个例外:您可以使用和切换 GIPK 的可见性。 ALTER TABLE tbl CHANGE COLUMN my_row_id SET VISIBLEALTER TABLE tbl CHANGE COLUMN my_row_id SET INVISIBLE

    默认情况下,生成的不可见主键可以在 and 的输出中SHOW CREATE TABLE看到 SHOW INDEX;它们在 MySQL Information Schema 表中也可见,例如 COLUMNSSTATISTICS表。您可以通过设置 show_gipk_in_create_table_and_information_schema 为隐藏它们OFF

    您可以使用 此版本中添加的选项从mysqldump 的输出中排除生成的不可见主键。mysqlpump现在还支持 从其输出中排除 GIPK 的选项。 --skip-generated-invisible-primary-key--skip-generated-invisible-primary-key

    有关更多信息和示例,请参阅 生成的不可见主键。有关 MySQL 中不可见列支持的一般信息,请参阅 不可见列。(缺陷号 34092605)

钥匙圈笔记

  • keyring_aws插件已更新为使用最新的 AWS Encryption SDK for C(版本 1.9.186)。

    keyring_aws_region变量支持新 SDK 支持的其他 AWS 区域。有关支持的 AWS 区域列表,请参阅变量描述。

性能模式注释

可插拔认证

  • SASL LDAP 插件无法正确解析从 Kerberos 配置文件读取的 Kerberos 密钥分发中心 (KDC) 主机信息,导致 SASL 身份验证错误。(缺陷号 31862170)

安全说明

  • 现在可以在支持的平台上使用 OpenSSL 3.0 编译 MySQL 服务器包(mysqld + libmysql+ 客户端工具),这不应改变服务器或客户端程序的行为。有关其他信息,请参阅 https://wiki.openssl.org/index.php/OpenSSL_3.0

空间数据支持

  • 此前,ST_TRANSFORM() MySQL 8.0.13 新增的功能不支持笛卡尔空间参考系。从此版本开始,此函数支持流行可视化伪墨卡托 (EPSG 1024) 投影方法,用于 WGS 84 伪墨卡托 (SRID 3857)。

SQL 语法说明

  • 现在可以确定 REVOKE无法执行的语句是否引发错误或警告。这是通过添加两个新的语句选项来实现的,此处列出并附有简要说明:

    • IF EXISTSREVOKE只要目标用户或角色不存在,就会引发警告而不是错误 。

    • IGNORE UNKNOWN USERREVOKE如果目标用户或角色未知,则会引发警告而不是错误,否则该语句会成功 。

    对于单个目标用户或角色以及要删除的给定权限或角色,在同一语句中同时使用IF EXISTS和 选项意味着该语句成功(尽管什么都不做,并带有警告),即使目标用户或角色都是并且要删除的特权或角色是未知的,只要该语句在其他方面有效。在多个目标、多个特权或角色被删除或两者兼而有之的情况下,语句成功,执行有效的删除,并对无效的删除发出警告。 IGNORE UNKNOWN USERREVOKE

    有关详细信息,请参阅REVOKE 语句。(缺陷 #102232,缺陷 #32495441)

XA 交易单据

  • 复制: 以前,当复制拓扑中的服务器节点在执行 、 或 时意外停止时,无法 XA PREPARE保证XA COMMIT恢复XA ROLLBACK。为了解决这个问题,当服务器节点从拓扑中丢失然后重新获得时,MySQL 现在使用 MySQL经典”复制或 MySQL 组复制在整个拓扑中保持一致的 XA 事务状态。这也意味着现在传播 XA 事务状态,以便在服务器节点停止、恢复和重新加入拓扑的情况下,节点在给定事务内工作时不会发生分歧。

    对于任何多服务器复制拓扑(包括使用组复制的拓扑),XA 事务状态会一致传播,因此所有服务器始终保持相同状态。对于任何大小的任何此类拓扑(包括单个服务器,只要启用了二进制日志记录),现在可以将任何服务器在意外停止并在退出后重新加入拓扑后恢复到一致状态。

    通过在存储引擎和服务器的内部事务协调器 (ITC) 之间添加对两阶段 XA 准备的支持,并由两者保留准备状态,针对单个服务器的情况实现了此增强。这意味着如果服务器在清除后停止,ITC 可以安全地清除其内部日志,而不会有丢失状态的风险。在单节点情况下,在存储引擎和二进制日志之间强加执行顺序可以防止 GTID 在相应的更改对存储引擎可见之前外化;在包含多个服务器的拓扑中,这可以防止事务状态在保证本地一致和持久之前被广播到拓扑。在所有情况下,XA 事务的状态都是从最后一个要写入的二进制日志文件中提取的,并与从存储引擎获得的事务状态同步。

    当使用相同的事务 XID 顺序执行 XA 事务时,可能会遇到此版本中的一个已知问题。如果在服务器使用相同的 XID 进行处理时发生操作中断,则XA COMMIT ... ONE PHASE在存储引擎中准备好事务后,二进制日志和存储引擎之间的状态将无法再可靠地同步。

    有关详细信息,请参阅XA 事务

添加或更改的功能

  • 重要更改: 包含 curl 而不是链接到系统 curl 库的二进制包已升级为使用 curl 7.83.1。(缺陷号 34138733)

  • 重要变化: 对于捆绑了 OpenSSL 库的平台,用于 MySQL Server 的链接 OpenSSL 库已更新到版本 1.1.1o。OpenSSL 版本 1.1.1o 中修复的问题在 https://www.openssl.org/news/cl111.txthttps://www.openssl.org/news/vulnerabilities.html中进行了描述。(缺陷号 34133985)

  • 重要变化:fido2与插件一起使用的 MySQL 附带 的authentication_fido已升级到 1.8.0 版。(以前,版本 1.5.0 包含在 MySQL 中。)

    有关详细信息,请参阅 FIDO 可插入身份验证

  • InnoDB:启用或禁用双写缓冲区 的innodb_doublewrite系统变量有两个新设置,DETECT_ONLYDETECT_AND_RECOVER. 使用该 DETECT_ONLY设置,数据库页面内容不会写入双写缓冲区,并且恢复不会使用双写缓冲区来修复不完整的页面写入。此轻量级设置仅用于检测不完整的页面写入。该DETECT_AND_RECOVER设置等同于现有ON设置。有关详细信息,请参阅 双写缓冲区

    感谢 Facebook 的贡献。(错误#32727919,错误#103211)

  • InnoDB: InnoDB现在支持动态配置重做日志容量。可以在 innodb_redo_log_capacity运行时设置系统变量来增加或减少重做日志文件占用的磁盘空间总量。

    通过此更改,重做日志文件的数量及其默认位置也发生了变化。从MySQL 8.0.30开始, 在data目录InnoDB下的目录下维护了32个redo log文件 。#innodb_redo之前InnoDB默认在data目录下创建了两个redo log文件,redo log文件的数量和大小由 innodb_log_files_in_groupinnodb_log_file_size变量控制。这两个变量现在已弃用。

    innodb_redo_log_capacity定义设置 时innodb_log_files_in_groupinnodb_log_file_size忽略设置;否则,这些设置用于计算 innodb_redo_log_capacity设置 ( innodb_log_files_in_group* innodb_log_file_size= innodb_redo_log_capacity)。如果没有设置这些变量,重做日志容量将设置为 innodb_redo_log_capacity默认值,即 104857600 字节 (100MB)。

    提供了几个状态变量来监视重做日志和重做日志容量调整操作。

    正如任何升级通常需要的那样,此更改需要在升级前干净关闭。

    有关此功能的更多信息,请参阅 重做日志

  • 添加了 Ubuntu 22.04 支持。(缺陷号 34123545)

  • 模式中一些表的主键定义中列的顺序mysql已更改,因此包含主机名和用户名的列在主键的​​开头按顺序排列在一起。仅使用主机名和用户名对这些表执行 ACL 查询,如果这些列没有按顺序排列在一起,则必须执行全表扫描以识别相关记录。将主机名和用户名放在一起意味着可以使用索引查找,这可以提高、 和语句的性能CREATE USER,以及对具有多个权限的多个用户进行 ACL 检查的性能。 DROP USERRENAME USER

    更改的 表是mysql.dbmysql.tables_priv和 。当您升级到 MySQL 8.0.30 或更高版本时,这些表在 MySQL 升级过程的第二步被修改。使用备份或导出实用程序(例如 mysqldumpmysqlpump )执行逻辑升级时使用该 选项,以确保检查表结构并使用新的列顺序重建。(错误#33644645,错误#33637244)mysql.columns_privmysql.procs_priv--upgrade=FORCE

  • 删除 了myisam_repair_threads 系统变量和myisamchk选项。 --parallel-recover(缺陷号 31052408)

  • 一个新的mysqldump选项 允许您为mysqldump的会话设置系统变量--mysqld-long-query-time的自定义值。使用新选项增加mysqldump的查询在写入慢速查询日志文件之前允许的运行时间 ,以避免不必要的日志记录。感谢 Facebook 的贡献。(漏洞 #96369、漏洞 #96369、漏洞 #30110717)long_query_time

  • 现在可以在InnoDB存储引擎可用之前在启动时隐式加载错误日志组件。这种加载错误日志组件的新方法加载并启用由 log_error_services变量定义的组件。

    以前,错误日志组件必须先使用安装 ,并且只有在完全可用 INSTALL COMPONENT后才加载,因为要加载的组件列表是从表中读取的,这是一个 表。 InnoDBmysql.componentsInnoDB

    错误日志组件的隐式加载具有以下优点:

    • 日志组件在启动序列的早期加载,使记录的信息更快可用。

    • 如果在启动期间发生故障,它有助于避免丢失缓冲日志信息。

    • INSTALL COMPONENT不需要 使用加载日志组件,简化错误日志配置。

    有关此功能的更多信息,请参阅 错误日志配置

    如果您之前使用安装了可加载日志组件, INSTALL COMPONENT并且在启动时读取的设置中列出了这些组件 log_error_services(例如,从选项文件),则应更新您的配置以避免启动警告。有关详细信息,请参阅 错误日志配置方法

  • MySQL Enterprise Audit 的审计日志文件现在可以使用可选的数据字段进行扩展,以显示查询时间、发送和接收的字节数、返回给客户端的行数以及检查的行数。此数据在慢速查询日志中可用于符合条件的查询,在审计日志的上下文中,它同样有助于检测异常值以进行活动分析。它通过您设置为审核日志过滤功能的新组件服务传送到审核日志。只有当审计日志是JSON格式( )时才可以添加扩展数据字段audit_log_format=JSON,这不是默认设置。

  • MySQL 服务器的AES_ENCRYPT()AES_DECRYPT()函数现在支持使用密钥派生函数 (KDF) 从您传递给函数的密码或密码等信息创建加密强度高的密钥。派生密钥用于加密和解密数据,它保留在 MySQL Server 实例中,用户无法访问。强烈建议使用 KDF,因为它比指定您自己的预制密钥或在您使用函数时通过更简单的方法派生它提供更好的安全性。这些函数支持 HKDF(可从 OpenSSL 1.1.0 获得),您可以为其指定可选的盐和上下文特定信息以包含在密钥材料中,以及 PBKDF2(可从 OpenSSL 1.0.2 获得),

  • 一个新的系统状态变量 Tls_library_version显示了用于 MySQL 实例的 OpenSSL 库的运行时版本。OpenSSL 的版本会影响对 TLSv1.3 的支持等功能。

  • 从 MySQL 8.0.30 开始,MySQL Enterprise Encryption 的功能由组件提供,而不是从 openssl_udf共享库安装。该组件提供的新功能仅使用通常首选的 RSA 算法,而不是 DSA 算法或 Diffie-Hellman 密钥交换方法,并且它们遵循当前关于最小密钥大小的最佳实践。组件函数还添加了对 SHA3 摘要的支持(假设正在使用 OpenSSL 1.1.1),并且不需要签名的摘要,尽管它们支持它们。

    如果您从较早版本升级到 MySQL 8.0.30,其中功能是从 openssl_udf共享库文件手动安装的,您创建的功能仍然可用并受支持。但是,此版本已弃用这些遗留功能,建议您改为安装该组件。组件函数是向后兼容的,因此由遗留函数生成的 RSA 公钥和私钥、加密数据和签名可以与组件函数一起使用。对于支持对遗留功能产生的内容进行解密和验证的组件功能,您必须将新系统变量设置 enterprise_encryption.rsa_support_legacy_paddingON(默认为 OFF).

    组件函数生成 PKCS #8 格式的 RSA 公钥和私钥。它们允许的最小密钥大小为 2048 位,这是适合当前最佳实践的最小 RSA 密钥长度。您可以使用系统变量将最大密钥大小设置为 16384 位 enterprise_encryption.maximum_rsa_key_size,默认为最大密钥大小为 4096 位。

  • 当 MySQL 服务器设置为离线模式时,具有特权的用户的连接 CONNECTION_ADMIN不会终止,这是通过将 offline_mode系统变量 的值更改为 来完成的ON。以前,检查具有CONNECTION_ADMIN 特权的连接可能会导致竞争条件,因为它涉及访问其他线程。现在,每个线程的标志都会缓存该线程的用户是否具有 CONNECTION_ADMIN特权。如果用户权限更改,则更新该标志。当为服务器激活离线模式时,会为每个线程检查此标志,而不是另一个线程的安全上下文。此更改使操作线程安全。

    此外,当激活离线模式时,SYSTEM_USER 只有在运行该操作的用户也有权限时,其用户有权限的连接才会被终止 SYSTEM_USER。只有 SYSTEM_VARIABLES_ADMIN权限的用户,没有SYSTEM_USER 权限的用户,可以通过设置 offline_mode系统变量 ON来激活离线模式。但是,当他们运行该操作时, SYSTEM_USER除了其用户具有特权的任何会话之外,其用户具有 CONNECTION_ADMIN特权的任何会话都保持连接。这仅适用于操作时的现有连接;用户与 SYSTEM_USER特权但没有CONNECTION_ADMIN特权不能在离线模式下与系统建立新连接。

修正错误

  • InnoDB: 操作TRUNCATE TABLE无法删除使用删除的列的数据字典条目ALGORITHM=INSTANT

    感谢 Marcelo Altmann 的贡献。(缺陷号 34302445)

  • InnoDB: 对具有即时添加列的表进行不正确的可空列计算导致数据被错误解释。(缺陷号 34243694)

  • InnoDB: 升级到MySQL 8.0.29后,尝试访问即时添加列的表失败。(漏洞#34233264)

  • InnoDB: 只记录了即时添加的列的物理位置,这不足以进行索引恢复。列的逻辑位置也是必需的。(缺陷号 34181432)

  • InnoDB:在级联更新操作期间,未为子表更新源中 的field_phy_pos调试变量 InnoDB(缺陷号 34181419)

  • InnoDB: InnoDB 源中的 某些 rec_get_instant_row_version_old()函数实例未检查行版本控制。(漏洞#34173616)

  • InnoDB: InnoDB 源中 的read_2_bytes()函数从日志缓冲区读取字节,返回空指针。(缺陷号 34173425)

  • InnoDB: 在 InnoDB 读写锁的性能模式检测中,TRY(无等待)操作的锁获取失败和成功检测不正确。(缺陷号 34131395)

  • InnoDB: 在特定的锁定场景中,隐式锁没有按预期转换为显式锁,触发 a lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP, block, heap_no, trx) 调试断言失败。(缺陷号 34123159)

  • InnoDB: 对每列都执行了一个表是否有即时添加列的检查,这影响了多列表的性能 ADDDROP COLUMN 操作。现在每个表执行一次检查。(漏洞#34112147)

  • InnoDB: 产生大量锁请求和多次超时的工作负载导致长时间信号量等待失败。为了解决这个问题,实施了优化以减少独占全局锁系统闩锁的数量。(缺陷号 34097862)

  • InnoDB:m_flush_bit重做日志块头中,为单个日志写入调用中写入的多个块的第一个块设置的,没有任何好处,已被删除。(缺陷号 34091444)

  • InnoDB: 修复了 clang-tidy 和 cppcheck 警告,其中包括删除未使用的代码和不必要的检查。(缺陷号 33957087)

  • InnoDB: 重做日志文件迷你事务 (mtr) 的恢复导致具有小 innodb_log_buffer_size设置的 MySQL 服务器实例上的调试断言失败。

    感谢 Mengchu Shi 的贡献。(缺陷号 33945602)

  • InnoDB:WITH_VALGRIND使用 源配置选项 编译Wunused-variable警告。(缺陷号 33899862)

  • InnoDB: 解决了无锁哈希表 (ut_lock_free_hash_t) 的多个问题。(缺陷号 33830934)

  • InnoDB: 对具有二级索引的生成列的查询导致失败。表示生成列位置的字段编号无效。(缺陷号 33825077)

  • InnoDB: 更新和插入具有多值索引列的行时,内存消耗大于预期。为每个行更新分配给多值列的内存一直保留到文件句柄被释放。(缺陷号 33766482)

  • InnoDB:源代码中 的UT_LOCATION_HERE结构 InnoDB使用不一致。(缺陷号 33436161)

  • InnoDB: 当计算生成列的值不可用时,需要从多值索引列中检索值数组的表对象。(缺陷号 32725063)

  • InnoDB: Windows 32 位系统上的 4GB 表空间文件大小限制已被删除。该限制是由于在扩展表空间时执行的计算不正确造成的。(漏洞#28934351)

  • InnoDB:InnoDB改进了源中 的哈希和随机生成器函数 (错误#16739204,错误#23584861)

  • InnoDB:DROP TABLE对具有废弃表空间的表 的(错误#107207,错误#34135187)

  • InnoDB:JSON在添加多值索引后 ,对具有列的表的查询(错误#106621,错误#33917625)

  • InnoDB: 由于小型事务 (mtr) 冲突,清除具有多个二进制大对象值的记录引发了插入失败。(错误#105592,错误#33574272)

  • InnoDB: 在构建哈希索引时,在高并发实例上启用自适应哈希索引 (AHI) 会导致临时 AHI 搜索闩锁争用。

    感谢腾讯 CDB 团队的 Zhou Xinjing 提供补丁。(缺陷 #100512,缺陷 #31750840)

  • 打包: Windows 的 MySQL 社区包中缺少 SASL LDAP 客户端插件。

  • 复制: 当表定义在源和副本之间发生分歧时,因为副本有一个额外的主键,如果该表的索引同时存在于源和副本上,则副本上的更新和删除将失败。InnoDB 表的主键自动包含在所有索引中,复制应用程序需要将键的所有部分的值包含在事件中以便搜索索引。之前,应用程序检查所有用户定义的键部分是否存在,但检查不包括自动包含的隐藏主键。应用程序现在在使用索引搜索数据之前验证事件中是否存在用户定义的和自动包含的关键部分。(缺陷号 34122738)

  • Replication:transaction_write_set_extraction 启用系统变量(默认) 时,MySQL Replication 从事务中提取的写入集它们用于检测事务之间的依赖关系和冲突。以前,涉及多列外键的写入集错误地将每一列识别为单独的外键。该问题现已修复,外键写入集包括所有引用的键列。(错误#34095747,错误#34144531)

  • 复制: 当使用基于行的复制时,副本有时会覆盖源发送的 SQL 模式值,以避免从属服务器上的其他列出现问题。在极端情况下,这可能会导致数据差异。该问题已得到纠正,因此副本现在尽可能保留源的 SQL 模式。(缺陷号 33945038)

  • 复制:COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE Performance Schema 表中 的 已应用replication_group_member_stats的视图更改事件 () 相关的事务View_change_log_event这些事件在 Group Replication applier 通道中排队,但在 Group Replication 恢复通道中应用,导致竞争条件,可能导致计数器递减丢失。计数的增加现在发生在一个更合适的点,并且 COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE当应用程序不忙时计数器现在也被设置为零。(错误#33602354,错误#33674059)

  • 复制: 当同一服务器的旧化身仍然存在时,当成员尝试重新加入组复制拓扑时记录的消息已从信息性说明升级为警告消息。(缺陷号 32651024)

  • 复制: MySQL 的半同步复制不考虑net_read_timeout系统变量的值并强制读取超时一毫秒。这可能会导致函数出现部分读取确认消息和数据包乱序到达,而 MySQL 系统中的其他连接正常运行。系统变量的值net_read_timeout现在应用于半同步复制的连接。(缺陷 #101056,缺陷 #31976209)

  • 复制: 当该--replicate-same-server-id选项用于使副本不跳过具有自己的服务器 ID 的事件时,如果日志文件被轮换,复制会因错误而停止。日志轮换事件现在检查并应用选项的当前值。(缺陷 #89375,缺陷 #27492990)

  • API: 以前使用 MySQL 客户端库执行与服务器的自动重新连接的应用程序在服务器升级后收到以下 mysql_query 错误:

    [4031] 由于不活动,客户端被服务器断开连接。请参阅 wait_timeout 和 interactive_timeout 以配置此行为。(缺陷 #105229,缺陷 #34007830)

  • 在所有情况下,将条件下推到派生表都没有得到正确处理。(漏洞#34311090)

  • 在将条件下推到具有设置操作的派生表后,同时折叠始终为真的布尔条件,重写不正确,因为 abort_on_null在条件下推到具有设置操作。(缺陷号 34298238)

  • 处理视图定义中的无效ORDER BY表达式时缺少错误返回导致调试版本中出现断言。(缺陷号 34239456)

  • MySQL 服务器无法使用最新版本的 Visual Studio 2022 进行编译。(缺陷号 34231639)

  • 在条件下推期间尝试克隆系统变量时,服务器有时无法确定克隆表达式的正确上下文。

    为防止这种情况,当派生表使用系统变量时,或者派生表中的基础表达式包含系统变量时,我们不允许条件下推到派生表。(缺陷号 34205559)

  • 添加了 Enterprise Linux 9 (EL9) 支持。(缺陷号 34190004)

  • 在 macOS 11 上,MySQL 服务器没有正确的授权,无法在服务器意外停机时生成核心转储。添加了构建选项 WITH_DEVELOPER_ENTITLEMENTS 以允许构建生成核心转储。(缺陷号 34163987)

  • 在缺少 libevent-devel 或 libedit-devel 的系统上改进了“-DWITH_LIBEVENT=system”和“-DWITH_EDITLINE=system”的错误处理。(错误#34131334,错误#34123545)

  • MySQL 8.0.29 中 Bug #33830493 的修复解决了如果 MySQL 实例意外停止或在使用SET PERSIST 语句记录系统变量设置后不久重新启动,配置文件mysqld-auto.cnf可能留空,在这种情况下服务器重新启动的情况无法继续。持久化的系统变量现在被写入一个备份文件,只有mysqld-auto.cnf 在验证写入成功后才将其重命名为,使原始mysqld-auto.cnf文件仍然可用。重新启动时,如果找到具有有效内容的备份文件,服务器将从该文件中读取。否则 mysqld-auto.cnf文件被使用,备份文件被删除。此修复未将文件刷新到磁盘,因此仍有可能出现该问题。此补丁添加了这些操作。(缺陷号 34122866)

  • 修复了 -DENABLE_GCOV CMake 选项。(漏洞#34113243)

  • SENSITIVE_VARIABLES_OBSERVER 权限在 MySQL 8.0.29 中引入,现在SYSTEM_VARIABLES_ADMIN 在升级期间授予具有该权限的用户。以前,在升级过程中不会将权限授予任何数据库用户。(缺陷号 34068378)

  • 从使用左联接的视图中选择未返回任何结果。(缺陷号 34060289)

  • 在某些情况下TRUNCATE performance_schema.accounts会导致global_status.

    如果某些主机未检测到,就会发生这种情况。例如,如果 performance_schema_hosts_size 设置为较低的值。

    感谢 Yuxiang Jiang 和腾讯团队的贡献。(错误#34057013,错误#106939)

  • 在某些情况下,可能 EXPLAIN ANALYZE会尝试访问不存在的迭代器。(缺陷号 34051681)

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

  • 添加了对使用 OpenSSL 3 编译 keyring_oci插件的支持。(缺陷号 34043013)

  • Performance Schema 表中记录的线程创建和删除事件一直保留到服务器关闭,而不是在客户端连接结束时被删除。线程创建和删除现在发生在为用户会话创建性能模式检测之后,因此在会话结束时会被清除。(缺陷号 34019988)

  • 将捆绑的 zlib 库升级到 zlib 1.2.12。还使 zlib 1.2.12 成为受支持的最低 zlib 版本,并从 WITH_SYSTEM_LIBS CMake 选项中删除了 WITH_ZLIB。(错误号 34015600)

  • 由于该CONNECTION_ID()函数返回一个会话 ID,该会话 ID 在会话的生命周期内保持不变,因此被视为常量函数。CONNECTION_ID()当在附加到可能被其他会话重用的表的触发器中使用时,这会导致问题。我们通过创建 const执行函数并在计算函数时返回实际会话 ID 来解决此问题。(缺陷号 34009876)

  • 在源代码上执行codespell并修复代码注释中报告的拼写错误。(缺陷号 34006439)

  • 重新实现了MySQL Enterprise Encryptionopenssl_udf函数库插件以使用 OpenSSL 3 API。(漏洞#33992115)

  • FEDERATED修改了存储引擎代码以解决 NULL 指针和变量访问问题。(缺陷号 33962357)

  • 0MySQL 中的直方图返回了对桶外值 的选择性估计 。这意味着直方图中的值可能会丢失,因为它们在采样过程中被遗漏了,或者因为直方图已经过时了。0.001为了防止这种情况,我们引入了直方图产生的选择性估计的常数下限 。这种下限选择对应于我们在采样期间可能会错过的值或范围的选择性。

    使用常数下限而不是缺失值选择性的统计估计具有简单性和可预测性的优点,并且提供一些保护以防止由于陈旧的直方图和桶内试探法而低估选择性。

    有关 MySQL 中直方图的更多信息,请参阅 优化器统计信息。(缺陷号 33935417)

  • 对于使用公用表表达式 (CTE) 的某些查询, EXPLAIN ANALYZE即使已知要执行 CTE,也不会为 CTE 提供任何分析数据。当满足以下条件时会发生这种情况:

    • CTE 在查询计划中被多次引用。

    • 对 CTE 的第一次引用(按照 的输出顺序EXPLAIN FORMAT=TREE)从未执行过。

    • 至少有一个后续引用被执行了至少一次。

    问题是 CTE 计划总是在遇到第一次引用 CTE 时打印出来;如果从未执行过该引用,则 CTE 不会在那里实现;因此没有要打印的分析数据。

    此问题的修复可确保我们在 CTE 计划首次执行时打印它,即它具体化的时间点。然后输出包括分析数据。如果 CTE 从未执行过,我们会在没有分析数据的情况下在最后一次引用时打印计划。(缺陷号 33905399)

  • 先前命令的输出mysqld --verbose --help显示插件加载选项, ON即使它们默认关闭,或使用选项关闭。输出现在显示插件的当前值。(缺陷号 33870892)

  • 服务器现在捆绑了 curl (7.83.1),并且仅在使用替代 SSL 系统时才使用它,例如 EL7 上的 openssl11。(错误#33859507,错误#34154806)

  • 现在可以使用-0g 和构建调试 MySQL 二进制文件-fno-inline。(缺陷号 33855533)

  • 在 MySQL 8.0.27 中引入的FIREWALL_EXEMPT权限现在授予 SYSTEM_USER升级期间的用户。以前,在升级过程中不会将权限授予任何数据库用户。(缺陷号 33854409)

  • 相关子查询没有按预期使用功能索引。当子查询内部使用的外部列引用未被视为子查询执行的常量时,就会发生这种情况,这允许考虑跳过功能索引。

    我们通过确保在执行子查询时将外部列引用视为常量来解决此问题。(缺陷号 33851055)

  • 通过将 EL7 上的 openssl11 或 EL8 上的 openssl3 传递给 WITH_SSL Cmake 选项,添加了备用 OpenSSL 系统包支持。身份验证插件(例如 LDAP 和 Kerberos)被禁用,因为它们不支持这些替代版本的 OpenSSL。(缺陷号 33835934)

  • 带有未访问任何表的子查询的准备语句,但子查询评估引发错误,在调试版本中触发断言失败。(漏洞#33773799)

  • 某些存储函数在第一次调用后未正确执行。(缺陷号 33754993)

  • 当使用递归公用表表达式 (CTE) 执行查询并在常量谓词消除后删除查询表达式时,预计当 CTE 临时表的表对象引用计数达到零时,应该可以再次重新创建表,但在某些情况下,其中一个表引用未正确记录为附加到 CTE。(缺陷号 33725503)

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

  • 向解析器添加了一个丢失的错误返回。(漏洞#33725502)

  • 使用外部引用的条件下推的许多问题,与 MySQL 8.0.22 中为实现物化派生表的条件下推所做的工作有关,已被识别并解决。(错误#33725403、错误#33725500、错误#33725508、错误#33725534、错误#33725545)

  • 为使用公用表表达式生成的计划SELECT 涉及表具体化和对具体化表的索引扫描。由于 temptable引擎尚不支持所有索引扫描方法,因此此类查询可能无法始终正确执行。

    对于其他 MySQL 引擎,当访问路径不被视为基本时,物化访问路径有特殊处理;对于temptable,索引扫描不被认为是基本的,这导致了未定义的行为。

    我们通过考虑基本的索引扫描访问路径来解决此问题,从而避免在 temptable表上使用任何索引扫描访问方法。(缺陷号 33700735)

  • 将新数据文件添加到系统表空间后,表中 的Data_freeINFORMATION_SCHEMA.FILES未更新 。InnoDB(缺陷号 33508534)

  • 如果插件尝试使用与现有系统变量重复的名称注册系统变量,则可能会覆盖现有的静态系统变量,并且卸载插件可能会留下指向已释放内存的指针。这些问题现已得到解决。(漏洞#33451101)

  • SHOW TABLESSELECT * FROM INFORMATION_SCHEMA.TABLES如果用户仅对单个性能模式表具有访问权限,则不会从性能模式返回任何结果。(缺陷号 33283709)

  • 在没有先安装插件的情况下调用与 data_masking插件相关的功能会导致服务器意外关闭。与此插件相关的函数通过调用初始化函数来初始化,该函数依次访问 UDF 元数据服务,但这仅在安装数据屏蔽插件时有效。我们通过添加检查来解决此问题,以在初始化此类功能之前验证插件是否已安装,如果未安装提供它们的插件,则返回适当的错误消息。(缺陷号 33234046)

  • 在某些情况下,服务器没有正确处理 语句的过期max_execution_time或执行。KILL(缺陷号 33218625)

  • 使用多线程连接到服务器的mysqlslap无法使用使用 FIDO 身份验证的用户帐户运行。该问题已通过更新 FIDO 库得到修复,允许在多个线程上执行身份验证。(缺陷号 33067183)

  • 当成员与服务基础设施交互时,组复制中可能会发生死锁,例如加入成员检查不兼容的配置,然后因此离开组。该问题现已解决。(缺陷号 32688091)

  • 如果 binlog_checksum在会话期间为系统变量设置了不正确的值,则在同一会话中发出的用于从源请求二进制日志流的COM_BINLOG_DUMP命令失败。服务器现在在开始校验和算法设置过程之前验证指定的校验和值。(缺陷号 32442749)

  • 对于慢速查询日志记录, Slow_queries除非启用慢速查询日志,否则不会实现状态变量,这与文档相反。(漏洞 #28268680,漏洞 #91496)

  • 准备好的语句可以接受空字符串作为有效的浮点值,这表示从 8.0.27 行为回归。此修复明确检查解释字符串的长度是否为非空且完全解释为(浮点数)数字。此外,新的验证现在可确保:

    • 所有数值都支持空字符串和全是空格的字符串。

    • 支持常规数值,以及带有前导和尾随空格的数值。

    (错误#107399,错误#34213338)

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

  • 升级到 MySQL 8.0.29 导致现有空间索引出现问题(请参阅创建空间索引)。问题的根本原因是包含的 Boost 库执行地理区域计算的方式发生了变化,该库在 MySQL 8.0.29 中升级到版本 1.77.0。我们通过确保在执行此类计算时采用新方法来解决此问题。(错误#107320,错误#34184111)

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

  • 当将条件下推到准备好的语句的派生表时,我们克隆一个条件,当派生表包含联合时,该条件也包括参数。当语句在执行期间需要重新准备时——例如,当指定值的符号与实际数据类型的符号不匹配时——参数未正确克隆,从而导致错误。发生这种情况是因为为参数指定的值用于打印要重新分析的字符串,而不是文字?占位符。

    现在在这种情况下,我们设置了一个标志 QT_NO_DATA_EXPANSION来打印重新解析的参数,当启用时,会导致 ?打印占位符,而不是实际值。(缺陷 #107230,缺陷 #34148712)

  • 在 MacOS 上,改进了 Homebrew 的 Boost 库检测逻辑,因为潜在不兼容的系统的 Boost 版本甚至可以与-DWITH_BOOSTset 一起使用。(错误#107151,错误#34121866)

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

  • 在 RHEL 7.x 上,获取 CPU 缓存行大小在 s390x RHEL 7.x 上返回 0,这导致 rpl_commit_order_queue 和 integrals_lockfree_queue 失败。

    感谢 Namrata Bhave 的贡献。(错误#107081,错误#34095278)

  • mysql客户端在服务器意外停止后无法重新连接到服务器时,构建完成哈希的过程分配了未释放的内存。如果客户端重新连接失败,重新连接操作现在不会构建完成哈希,如果客户端断开连接,相关内存将被释放。(错误#106864,错误#34019571)

  • 为 s390x 架构添加了一个循环定时器。

    感谢 Namrata Bhave 的贡献。(错误#106824,错误#33997819)

  • WHERE在某些情况下,当子查询的子句包含相等性 时,执行具有物化的半连接可能会导致不正确的结果 。在某些情况下,例如当此类等式的一侧是INorNOT IN子查询时,该等式既不会下推到物化子查询,也不会作为半连接的一部分进行评估。这也导致了一些内部散列连接的问题。(错误#106710、错误#106718、错误#33952115、错误#33957233)

    参考资料:另请参阅:Bug #84705、Bug #25466100。

  • 类似查询的比较器函数(<date column> <non-date column>) IN ((val1, val2), (val3, val4), …)可能会返回错误的结果。(错误#106567,错误#33897969)

  • 修复了 SetOsLimitMaxOpenFiles 中的断言定义;感谢 hongyuan li 的贡献。(错误#106555,错误#33893197)

  • 以前,假定当同一个不可为 null 的表达式同时用作 的第一个和第二个参数时 LIKE,结果始终为真,因此可以被优化掉。这个假设被证明是无效的,因为LIKE将反斜杠 ( \) 视为转义字符,即使ESCAPE未指定也是如此。SELECT当在列表中使用条件而不是 WHERE子句时,这会导致不同的结果 。为了解决这个问题,我们不再使用LIKE、有或没有ESCAPE子句来执行此优化。(错误#106444,错误#33852756)

  • 在某些情况下,当将全局事务 ID 以外的参数(例如列值)传递给 时 GTID_SUBSET(),该函数会返回预期值以外的值NULL。(错误#106298,错误#33793942)

  • 当谓词的左侧是 时,一般量化比较谓词的评估会出现问题 NULL。在这种情况下,保存最后一个当前行的子查询评估值,因此不需要重新评估,但缓存值(result_for_null_param)在执行之间没有被清除,以便下一次执行可以重新使用上次执行的结果。这样做的一个结果是,当子查询执行首先导致零行从子查询中匹配时(对于ALL 谓词应该返回) TRUE,导致至少一行匹配的后续执行也返回了TRUE,尽管这 FALSE是预期的。

    为了解决这个问题,我们现在确保在 result_for_null_param执行后清理子查询谓词时清除。(错误#106164,错误#37755139)

  • --async-client 使用option 和 shutdown 命令 执行的测试用例导致mysqltest 意外停止。(错误#105797,错误#33643149)

  • MySQL 支持使用等高直方图来改进选择性估计。列的等高直方图中的每个桶应包含大致相同数量的值(行);保持桶小有助于减少任何错误。

    在构建等高直方图时,有时会将太多值放在同一个桶中,这可能会导致选择性估计出现重大错误。我们通过引入一种新的等高构造算法来解决此问题,该算法可保证低错误并适应数据分布以有效利用其存储桶。此外,直方图桶中不同值数量的新估计器提供了改进的最坏情况错误保证。

    有关详细信息,请参阅 INFORMATION_SCHEMA COLUMN_STATISTICS TableOptimizer Statistics。(错误#104789,错误#33302021)

  • 返回给客户端程序的弃用警告被发送到 stdout而不是stderr,在mysqldump的情况下,这可能意味着转储文件不再有效,因为警告包含在其中。该问题现已解决,警告已发送至stderr。(错误#104769,错误#33733529)

  • 扩展了对链式 SSL 证书的支持。(错误#54158,错误#27491518)