MySQL Enterprise Audit 现在支持审计日志文件修剪,用于 JSON 格式的日志文件。请参阅审计日志文件的空间管理。
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 组件基础结构,从这些密钥环组件开始:
component_keyring_file
将密钥环数据存储在服务器主机的本地文件中。该组件在 MySQL Community Edition 和 MySQL Enterprise Edition 发行版中可用。请参阅 使用 component_keyring_file 基于文件的密钥环组件。component_keyring_encrypted_file
将密钥环数据存储在服务器主机本地的加密、受密码保护的文件中。该组件在 MySQL 企业版发行版中可用。请参阅 使用 component_keyring_encrypted_file 加密的基于文件的密钥环组件。
keyring_file
新的密钥环组件与现有的和 插件 有相似之处keyring_encrypted_file
,但配置不同,使用不同的磁盘存储格式,并且对密钥类型和密钥大小的限制更少。密钥环组件不会在启动期间使用
--early-plugin-load
服务器选项加载,也不会在启动期间或运行时使用系统变量进行配置:在启动期间,服务器使用清单文件确定要加载哪个密钥环组件,并且加载的组件在初始化时会查询自己的配置文件。请参阅 密钥环组件安装。
在运行时,新
ALTER INSTANCE RELOAD KEYRING
语句允许在更改其配置文件后重新配置已安装的密钥环组件。请参见ALTER INSTANCE 语句。
如果安装了密钥环组件,新的 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
-
不兼容的更改: 性能模式
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
),从而提高了运行时仪器文档的可用性。
-
新的 系统变量可以配置 身份验证插件用于密码存储
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 TABLE
、ALTER TABLE
、CREATE TABLESPACE
和ALTER 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 TABLE
SHOW CREATE TABLE
DEFAULT CHARSET
utf8
utf8mb4
utf8mb3
CREATE TABLE
collation_name
参考资料:另请参阅:Bug #30624990。
InnoDB: 该函数遇到的陈旧页面
buf_page_create()
被释放,然后再次从磁盘读取而无需重新初始化。(缺陷号 32622548)-
InnoDB:在 MySQL 8.0.23 中,源代码
enum
中缓冲池页面和缓冲池块数据结构中的 C++为,导致数据 表 字符而不是整数InnoDB
int
uint8_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:
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 TABLE
和ALTER TABLE
操作引发断言失败。该SHOW CREATE TABLE
线程引用了一个已因ALTER TABLE
操作而变得陈旧的表空间对象。(缺陷号 32235621)InnoDB: MySQL 5.7 中分片计数器的引入
rw_lock_stats
导致 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
撤消表空间。为了解决这个问题,在升级模式下启动服务器时不再执行撤消表空间截断。(缺陷号 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
,并且优化器希望它们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)-
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
, whereESCAPE
did not reference a constant value, 在准备好的语句中没有正确处理。(缺陷号 32446728)-
ESCAPE
MySQL 传统上将子句(即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
为确定是否使用科学记数法而采用的试探法有时会生成比这些字符串更长的字符串。这些长字符串导致某些字符串转换例程出现问题,因为它们的实际长度可能超过预期的最大值。每当我们在字符串上下文中获取or时,我们都会通过显式告知
my_gcvt
所需的长度来解决此问题。(缺陷号 32385934)FLOAT
DOUBLE
在触发器中,
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 Schema
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)
-
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 VIEW
ROLLUP
为使用子句创建的视图生成了无效语法。这个问题也影响了mysqldump,它使用SHOW CREATE VIEW
. (漏洞 #32197353,漏洞 #101740)失败
CREATE TABLE
或ALTER TABLE
withSECONDARY_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 aSELECT
withORDER 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)
参考资料:此问题是 Bug #29781631、Bug #95377 的回归。
在语句中使用
CAST()
on aDATE
orDATETIME
value 会针对andINSERT
引发警告,但不会针对 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
HAVINGcolumn_expression
IS [NOT] NULLWITH ROLLUP
该
SHOW ENGINE PERFORMANCE SCHEMA STATUS
语句报告了性能模式的不正确内存使用情况。(错误#31795132,错误#100624)-
尝试使用 Visual Studio 2019 生成实体数据模型时,无法使用实体框架向导导入某些表。这是由于 MySQL 8.0.21 对正交数据类型聚合所做的更改,它处理来自
UNION
和来自函数或运算符(例如CASE
and )的列IF()
。这使得返回ENUM
or 类型的值成为可能,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_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 值(超出 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 PARTITION
、IMPORT TABLESPACE
和之后IMPORT PARTITION TABLESPACE
,留下了反映表空间先前角色的序列化数字信息。现在在这种情况下,旧的 SDI 被明确地从涉及表空间交换或导入的两个表空间中删除。(缺陷 #98501,缺陷 #30878065)-
由整数除法运算符 (
DIV
) 执行的类型解析产生的精度比结果中的预期小 1。我们感谢 Kaiwang Chen 的贡献。(缺陷 #96459,缺陷 #30156563)