此版本不再可供下载。它被删除是因为一个严重的问题,该问题可能导致
InnoDB
添加了列的表中的数据被错误地解释。请改为升级到 MySQL 8.0.30。
-
重要提示: 服务器现在使用
utf8mb3
而不是utf8
在以下情况:在
SHOW
SQL 语句的输出中 (SHOW CREATE TABLE
,SHOW CREATE VIEW
,SHOW CREATE DATABASE
)报告无效字符串时。
(错误#33385252,错误#33395007)
-
当从内置字符集填充数据字典表时 ,服务器现在使用
utf8mb3
代替字符集名称的别名。utf8
这会影响此处列出的 MySQL Information Schema 表中字符集和相关信息的显示:此更改还会影响 SQL
SHOW CHARACTER SET
、SHOW COLLATION
、SHOW CREATE DATABASE
和SHOW CREATE TABLE
语句的输出。(缺陷号 30624990)
InnoDB: 解决相关问题后,重新启用了 C4100、C4127、C4245 和 C4389 MSVC++ 4 级编译器警告。(错误#33437498,错误#33571677)
GCC 11 现在是支持在 EL7 或 EL8 上构建 MySQL 的编译器。该编译器在
devtoolset-11
(EL7) 或gcc-toolset-11
(EL8) 包中可用。libmysqlclient
还建议在构建基于C API 库的第三方应用程序时使用 GCC 11 。(缺陷号 33730302)无法使用 Bison 3.8.1 或更新版本编译服务器。(缺陷号 33488047)
-
重要更改:
TIME
以前,MySQL 允许在、DATE
、DATETIME
和 中使用任意定界符和任意数量的分隔符,和TIMESTAMP
中的日期和时间值之前、之后和之间使用任意数量的空格。此行为现在已弃用,您应该期望在未来的 MySQL 版本中将其删除。在此版本中,使用任何非标准或过多的定界符或空白字符现在会触发形式为“定界符”在日期时间值“ ”的位置 中位于行 的警告是多余的并且已弃用DATETIME
TIMESTAMP
char
pos
value
rownum
,然后是Please remove,或者在可以建议合适的替换的情况下,首选标准 'replacementchar
'。仅针对文字值中遇到的第一个非标准定界符或空白字符返回弃用警告。此处显示了一个示例:
mysql> SELECT DATE"2020/02/20"; +------------------+ | DATE"2020/02/20" | +------------------+ | 2020-02-20 | +------------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 4095 Message: Delimiter '/' in position 4 in datetime value '2020/02/20' at row 1 is deprecated. Prefer the standard '-'. 1 row in set (0.00 sec)
在严格模式下,此类警告不会升级为错误。
有关详细信息和示例,请参阅 日期和时间上下文中的字符串和数字文字。
-
复制: 系统
replica_parallel_type
变量现已弃用;每当读取或设置此变量,或在中设置等效选项时my.cnf
,服务器现在都会发出弃用警告,如下所示:mysql> SELECT @@replica_parallel_type; SHOW WARNINGS\G +-------------------------+ | @@replica_parallel_type | +-------------------------+ | LOGICAL_CLOCK | +-------------------------+ 1 row in set, 1 warning (0.00 sec) *************************** 1. row *************************** Level: Warning Code: 1287 Message: '@@replica_parallel_type' is deprecated and will be removed in a future release. 1 row in set (0.00 sec)
--replica-parallel-type
您应该期望在未来的 MySQL 版本中删除 此变量和等效的服务器选项 。 -
系统
myisam_repair_threads
变量和myisamchk--parallel-recover
选项已弃用;期望在 MySQL 的未来版本中删除对两者的支持。1(默认值)以外的值
myisam_repair_threads
会产生警告。 -
服务器系统变量
query_prealloc_size
和transaction_prealloc_size
现在已弃用,设置其中一个或两个在 MySQL 服务器中不再有任何影响。预计它们会在未来的 MySQL 版本中被删除。有关详细信息,请参阅文档(服务器系统变量) 中对这些变量的描述。
参考资料:另请参阅:Bug #26940369。
mysqld 的
--abort-slave-event-count
和--disconnect-slave-event-count
选项,以前用于测试,生产设置中通常不需要,已被弃用。期望它们在 MySQL 的未来版本中被删除。
基于将值与 a
NULL
进行比较的表达式的聚合函数并未正确忽略NULL
。(错误#33624777,错误#105762)-
当在优化期间评估聚合函数时,假定
WHERE
条件已经被评估;因此,它可以被删除。在删除之前,优化器WHERE
通过调用 来验证条件是否具有任何与表无关的条件make_cond_for_table()
。当条件被认为是昂贵的(例如,它使用存储过程)时,会错误地假设存在与表无关的条件。我们通过在调用中排除昂贵的条件来解决这个问题make_cond_for_table()
。此外,评估成本高昂的常量条件(例如
f() = 1
函数f()
不使用任何表的地方)通常会导致不正确的结果。在大多数情况下,如果一个条件对于执行来说是不变的,那么在优化WHERE
条件时会对其进行评估,如果认为它太昂贵则跳过它。当前问题是由于在优化隐式分组查询时跳过条件而出现的。为避免这种情况,我们现在在聚合之前评估此类条件。(缺陷号 33305617) 函数使用的列 在修复其参数时
DEFAULT()
未在内部标记。READ
(缺陷号 33142135)
如果正在加载的表的列 在语句内使用的子查询
LOAD DATA
的WHERE
子句中使用SET
,则该列被报告为unknown
. (缺陷号 33714885)-
执行索引查找 (
eq_ref
) 的聚合查询在某些情况下可能会返回错误的结果。当执行计划使用流聚合而不是临时表中的聚合时,就会出现这种情况。我们通过禁用
eq_ref
聚合节点下的缓存来解决此问题。(漏洞#33491183)参考资料:此问题是 Bug #100614、Bug #31790217 的回归。
-
派生物化表条件下推优化现在可以与大多数联合一起使用。这意味着现在可以将外部
WHERE
条件下推到物化派生表或视图的查询表达式的每个查询块。假设我们创建表
t1
和t2
,然后创建v
基于这两个表的视图,使用如下所示的 SQL 语句:CREATE TABLE t1 ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c1 INT, KEY i1 (c1) ); CREATE TABLE t2 ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c1 INT, KEY i1 (c1) ); CREATE OR REPLACE VIEW v AS SELECT id, c1 FROM t1 UNION ALL SELECT id, c1 FROM t2;
现在,当
SELECT * FROM v WHERE c1 = 12
执行查询时,条件c1 = 12
被下推到视图的两个查询块v
,如下所示EXPLAIN
:mysql> EXPLAIN FORMAT=TREE SELECT * FROM v WHERE c1 = 12\G *************************** 1. row *************************** EXPLAIN: -> Table scan on v (cost=1.26..2.52 rows=2) -> Union materialize (cost=2.16..3.42 rows=2) -> Covering index lookup on t1 using i1 (c1=12) (cost=0.35 rows=1) -> Covering index lookup on t2 using i1 (c1=12) (cost=0.35 rows=1) 1 row in set (0.00 sec)
现在可以为大多数
UNION
查询完成此操作。有关例外情况和其他信息,请参阅 派生条件下推优化。(错误#24012、错误#36802、错误#106006、错误#11746156、错误#11748590、错误#13650627、错误#30587347、错误#33318096、错误#33738597)
-
新的 Performance Schema 工具收集有关查询是否在 引擎
PRIMARY
或SECONDARY
引擎上处理的信息,引擎所在的PRIMARY
位置InnoDB
和SECONDARY
引擎是 HeatWave。此工具旨在与带有 HeatWave 的 MySQL 数据库服务一起使用。添加了两个新的 Performance Schema 表列:
EXECUTION_ENGINE
指示查询是否在PRIMARY
或引擎上处理 的列SECONDARY
已添加到性能模式语句事件表(请参阅 性能模式语句事件表)以及performance_scema.threads
和performance_scema.processlist
表。COUNT_SECONDARY
指示在引擎上处理查询的次数的列 已SECONDARY
添加到 Performance Schema 语句汇总表(请参阅 语句汇总表)。
execution_engine
还向MySQL Schemasys.processlist
的 视图中添加了 一列。sys.x$processlist
sys
对于捆绑了 OpenSSL 库的平台,MySQL Server 的链接 OpenSSL 库已从 1.1.1l 更新到版本 1.1.1n。在https://www.openssl.org/news/cl111.txt和 http://www.openssl.org/news/vulnerabilities.html中描述了 OpenSSL 中修复的问题 。(错误#33840722,错误#33970835)
-
IF NOT EXISTS
现在支持语句CREATE FUNCTION
、CREATE PROCEDURE
和 的选项CREATE TRIGGER
。对于
CREATE FUNCTION
,当用于创建存储函数时,对于CREATE PROCEDURE
,如果已经存在同名例程,则此选项可防止发生错误。对于CREATE FUNCTION
,当用于创建可加载函数时,该选项可防止在已存在具有该名称的可加载函数的情况下发生错误。对于CREATE TRIGGER
,如果在同一个表和同一个模式中已经存在同名触发器,则该选项可防止发生错误。这是为了提高这些语句在脚本编写、快速(重新)部署、复制和其他可能重复使用的实例中的易用性。CREATE DATABASE
此增强功能使这些语句的语法与、CREATE TABLE
、CREATE USER
和 的语法更加一致CREATE EVENT
,所有这些语句都已经支持IF NOT EXISTS
。这也为、和IF EXISTS
已经支持的选项提供了补充。DROP PROCEDURE
DROP FUNCTION
DROP TRIGGER
有关详细信息,请参阅存储的对象以及函数名称解析。另请参见 CREATE TABLE ... SELECT 语句的复制。(错误 #15287,错误 #11745440)
参考资料:另请参阅:Bug #33301931。
-
在某些情况下,组复制会遇到问题,因为无法提交在另一个连接上准备的 XA 事务。为了解决这些问题,MySQL 现在支持分离的 XA 事务;一旦准备好,XA 事务就不再连接到当前会话。这是作为执行的一部分发生的
XA PREPARE
。准备好的 XA 事务可以由另一个连接提交或回滚,然后当前会话可以启动另一个 XA 或本地事务,而无需等待准备好的 XA 事务完成。xa_detach_on_prepare
通过将此版本中引入 的系统变量设置为 ,可以禁用对此功能的支持,并恢复经典行为OFF
。默认值为ON
,这是推荐的,尤其是在复制设置中。您应该知道,当启用分离的 XA 事务支持 (
xa_detach_on_prepare = ON
) 时,无法在 XA 事务中使用临时表。
经典 MySQL 协议和 X 协议的 Unix 套接字锁定文件之间的格式差异意味着如果存在其他协议的文件,则服务器无法启动。对于无法手动删除文件的实例(例如 MySQL 数据库服务实例),协议现在对文件使用相同的格式。(缺陷号 31468581)
InnoDB:
#define
为了提高代码质量和方便调试,源中的 实例InnoDB
被constexpr
说明符或内联函数取代。-
InnoDB:
InnoDB
现在支持ALTER TABLE ... DROP COLUMN
使用ALGORITHM=INSTANT
.只支持
ALGORITHM=INSTANT
修改数据字典中元数据的操作。表数据不受影响,使操作即时进行。如果未明确指定,ALGORITHM=INSTANT
则默认由支持它的 DDL 操作使用。在 MySQL 8.0.29 之前,即时添加的列只能添加为表的最后一列。从 MySQL 8.0.29 开始,即时添加的列可以添加到表中的任意位置。
即时添加或删除的列会创建一个新的行版本。最多允许 64 行版本。表中添加了一个新
TOTAL_ROW_VERSIONS
列INFORMATION_SCHEMA.INNODB_TABLES
来跟踪行版本数。有关支持的 DDL 操作的更多信息
ALGORITHM=INSTANT
,请参阅 在线 DDL 操作。 -
复制: 服务器自动清除二进制日志文件现在使用
binlog_expire_logs_auto_purge
此版本中引入的系统变量进行控制。默认情况下,启用自动清除(binlog_expire_logs_auto_purge
设置为ON
);要禁用它,请将此变量的值设置为OFF
。清除前等待的时间间隔由
binlog_expire_logs_seconds
和 控制expire_logs_days
。将这两个系统变量都设置为 0 会停止自动清除,即使binlog_expire_logs_auto_purge
设置为ON
. Microsoft Windows: 在 Windows 上添加了 jemalloc 支持,并为官方 MySQL 二进制文件启用了它。新的
WITH_WIN_JEMALLOC
CMake 选项接受一个目录,该目录包含 和/或jemalloc.dll
相同目录的目录,其用于内存管理操作。如果未找到或未导出所需函数,则使用标准内存 INFORMATION 级别的日志消息记录是否找到并使用了 jemalloc。mysqld.exe
mysqld-debug.exe
jemalloc.dll
新
clone_delay_after_data_drop
变量允许在远程克隆操作开始时删除接收方 MySQL 服务器实例上的现有数据后立即指定延迟时间。延迟旨在为接收方主机上的文件系统提供足够的时间,以便在从捐赠方 MySQL 服务器实例克隆数据之前释放空间。某些文件系统在后台进程中异步释放空间。在这些文件系统上,在删除现有数据后过早地克隆数据可能会因空间不足而导致克隆操作失败。最长延迟时间为 3600 秒(1 小时)。默认设置为 0(无延迟)。(缺陷号 32826134)-
该
group_replication_set_as_primary
函数指定指定的组成员作为新的主要成员并覆盖选举过程。以前,该函数等待现有主节点上的所有活动事务结束,包括使用该函数后的传入事务,然后才将当前主节点设置为只读并更改为新的主节点。等待时间没有上限。一个可选的
timeout
参数现在可让您设置运行事务的超时时间。您可以为使用该函数时正在运行的事务设置从 0 秒(立即)到 3600 秒(60 分钟)的超时。超时没有默认设置,因此如果您不设置它,该函数的先前行为仍然适用,等待时间没有上限。当超时到期时,对于任何尚未到达其提交阶段的事务,客户端会话将断开连接,以便事务不会继续。允许完成提交阶段的事务。当您设置超时时,它还会阻止新事务从那时起在主服务器上启动。START TRANSACTION
或BEGIN
语句)会受到超时、断开连接和传入事务阻塞的影响,即使它们不修改任何数据也是如此。为了允许在函数运行时检查主函数,允许执行不修改数据的单个语句,如 一致性规则下允许的查询中所列。 -
MySQL 服务器现在能够安全地存储包含敏感数据(如私钥或密码)的持久系统变量值,并限制对这些值的查看。目前没有 MySQL 服务器系统变量被标记为敏感,但新功能允许包含敏感数据的系统变量在未来安全地持久化。必须在 MySQL Server 实例上启用密钥环组件以支持持久化系统变量值的安全存储,而不是不支持该功能的密钥环插件。
在存储持久化系统变量的操作系统文件中,敏感系统变量的名称和值以加密格式存储,连同生成的用于解密它们的文件密钥。生成的文件密钥又使用存储在密钥环中的主密钥进行加密。升级到 MySQL 8.0.29 后,
mysqld-auto.cnf
选项文件的格式保持不变,直到第一次发出SET PERSIST
orSET PERSIST ONLY
语句,此时它被更改为新的格式,即使涉及的系统变量不敏感。在新格式中,旧版本的 MySQL 服务器无法读取选项文件。如果密钥环组件支持在用于设置值时不可用,则 新系统变量
persist_sensitive_variables_in_plaintext
控制是否允许服务器以未加密格式存储敏感系统变量的值。SET PERSIST
默认设置 ,ON
如果密钥环组件支持可用,则对值进行加密,如果不支持,则以未加密的方式(带有警告)持久保存它们。如果无法解密加密的系统变量值,此设置还允许服务器启动,在这种情况下,将使用它们的默认值。什么时候persist_sensitive_variables_in_plaintext
设置为OFF
,这是最安全的设置,如果密钥环组件支持不可用,则无法保留敏感的系统变量值,如果无法解密加密的系统变量值,则服务器不会启动。敏感系统变量的值在处理时也受到保护。如果
SET
针对敏感系统变量发出语句,则redacted
在将其记录到通用日志和审计日志之前,将重写查询以用“”替换该值。新权限允许持有者查看 Performance Schema 表、 、 和SENSITIVE_VARIABLES_OBSERVER
中敏感系统变量的值,发出 语句以返回它们的值,并在连接的会话跟踪器中跟踪它们的变化。没有此权限的用户无法查看这些系统变量值。global_variables
session_variables
variables_by_thread
persisted_variables
SELECT
使用密钥管理互操作性协议 (KMIP) 进行安全通信的密钥环
keyring_okv
插件与 MySQL 的密钥环服务一起使用,将密钥环数据存储在与 KMIP 兼容的后端密钥环存储产品中,例如 Oracle Key Vault、Gemalto SafeNet KeySecure Appliance、Townsend Alliance Key Manager 和 Entrust KeyControl。该插件现在允许您指定多个备用服务器,以便在主服务器不可用时提供到后端密钥环存储产品的备份连接。您最多可以添加 64 个备用服务器,方法是编辑该okvclient.ora
文件以在值中将服务器的 IP 地址和端口号指定为以逗号分隔的列表STANDBY_SERVER
多变的。该插件遍历备用服务器,直到它可以建立连接,每次连接尝试等待 20 秒。因此,您应该确保备用服务器列表保持简短、准确和最新,并删除不再有效的服务器,因为它们会显着影响keyring_okv
插件的连接时间,从而影响服务器启动时间。现在,在解析、解析和执行访问或更新此类变量的 SQL 语句的服务器代码中,更好地实施了对系统变量访问的隔离。
-
MySQL 服务器现在默认支持 SSL 会话重用,并通过超时设置来控制服务器维护会话缓存的时间,该会话缓存建立允许客户端请求新连接的会话重用的时间段。所有 MySQL 客户端程序都支持会话重用。有关服务器端和客户端配置信息,请参阅 重用 SSL 会话。
此外,C 应用程序现在可以使用 C API 功能为加密连接启用会话重用(请参阅 SSL 会话重用)。
InnoDB: 尝试清除具有即时添加列的表的撤消记录时发生故障。(缺陷号 33924532)
InnoDB: 不允许高优先级事务在中断时停止等待或在等待锁时超时,防止死锁被解决。在阻塞事务也是高优先级的情况下,现在允许高优先级事务在中断时停止等待或在超过锁定等待超时时间时超时。如果一个阻塞事务不是高优先级的,高优先级事务等待阻塞事务释放它的锁。(缺陷号 33856332)
InnoDB: 删除了 Windows 上使用的 AIO 同步队列。同步文件 I/O 读写函数 (
SyncFileIO::execute
) 已修改为处理为普通 I/O 和重叠 I/O 打开的文件,就像它在 Linux 上所做的那样。(缺陷号 33840645)InnoDB: 在使用立即添加的列截断表的所有分区后,表版本元数据未重置。(缺陷号 33822729)
-
InnoDB:打印有关信号量等待的警告 的
srv_error_monitor_thread()
函数未能按预期处理长信号量等待。为解决此问题,已将阻塞调用移至更合适的位置。简化和改进了相关的监控线程代码,并为多个服务器线程添加了缺少的关闭信号。InnoDB 启用和禁用标准监视器现在独立于用户可设置的
innodb_status_output
变量执行。此更改解决了InnoDB
在特定情况下启用监视器但未设置回其先前值的问题。感谢 Yuhui Wang 的贡献。(错误#33789526,错误#93878) InnoDB:
rec_convert_dtuple_to_rec_old()
Valgrind 测试发现InnoDB 源代码 中存在一个差一错误 (缺陷号 33784672)InnoDB:修改了源中函数 的
UNIV_DEBUG
变体 以改进 Valgrind 错误检测。(缺陷号 33783709)mem_heap_alloc()
InnoDB
InnoDB: 快速关闭在关闭所有文件之前没有等待所有活动的 I/O 操作完成。(缺陷号 33768584)
InnoDB: Clang 警告报告错误放置的
@return
命令。(缺陷号 33734011)InnoDB:分区切换时 新记录锁数组(
m_prebuilt->new_rec_locks[]
) 的值未正确同步,导致锁被释放或未按预期释放导致断言失败。(缺陷号 33724166)InnoDB: 当写请求完成时更新双写缓冲区的函数中的竞争条件导致长信号量等待错误。(缺陷号 33712370)
InnoDB: 函数错误地假设更改索引列中的记录总是需要在二级索引中创建新记录,导致与锁相关的断言失败。为了解决这种情况和其他类似情况,
lock_rec_convert_impl_to_expl()
现在仅当实际持有隐式记录锁时才使用将隐式记录锁转换为显式记录锁的函数。(缺陷号 33657235)InnoDB:
InnoDB
解决了 源代码中 的许多 Doxygen 问题(缺陷号 33603036)InnoDB: 缺少对索引实例的空指针检查导致失败。(缺陷号 33600109)
InnoDB: 在增量备份失败后启动服务器,错误指示页面跟踪不可用。(漏洞#33521528)
InnoDB:恢复 期间出现断言失败
InnoDB
。失败是由于在可以重置空闲列表和索引列表之前在本地微型事务中释放页面后发生服务器退出。在恢复期间遍历了跨越释放页面的空闲列表和索引列表。(缺陷号 33454557)InnoDB: B
btr_insert_into_right_sibling()
-tree函数,当游标在页面末尾时,将一个元组插入右兄弟页面,由于不正确的锁函数调用导致ACID违规。(缺陷号 33405696)InnoDB: 当使用
COMPACT
或REDUNDANT
行格式时,可能会创建一个超过最大行大小的表,这最终可能导致插入数据时出现“行大小太大”错误。BLOB 前缀未包含在操作期间执行的记录大小检查中CREATE TABLE
。(缺陷号 33399379)InnoDB: 检索主加密密钥 ( ) 的函数
get_master_key()
尝试获取master_key_id_mutex
尚未初始化的主密钥 ID 互斥量 ( )。(缺陷号 33067891)InnoDB: 从
lock_sec_rec_read_check_and_lock
锁定系统功能中删除了冗余且昂贵的检查,该功能用于在二级索引记录上放置锁。(缺陷号 33059387)InnoDB: 存储
TempTable
引擎没有正确处理文件已满错误。(缺陷号 32929392)InnoDB:操作中 遇到DDL日志错误
ALTER TABLE ... ALGORITHM=COPY
,没有处理,导致后续ALTER TABLE ... ALGORITHM=INPLACE
操作失败。(缺陷号 32716838)InnoDB: 清除线程处理了未加载表空间的加密表的撤消记录,导致失败。(缺陷号 32586721)
InnoDB: 一个线程发布了一个异步I/O操作并关闭了自己,导致操作系统文件操作错误。(缺陷号 30567295)
InnoDB:
AUTO_INCREMENT
超过最大整数列值时生成了 不正确该错误是由于未考虑最大列值造成的。AUTO_INCREMENT
在这种情况下应该返回之前的有效值(错误#87926,错误#26906787)-
InnoDB: 修改了事务锁优先级,以便持有共享锁并等待升级到独占锁的事务优先于等待同一行上的独占锁的另一个事务。也就是说,已经持有共享锁的事务先被授予排他锁。在这种情况下,在同一行上持有共享锁的其他一些事务仍然可以阻止授予排他锁。
优化了事务锁系统源中的
lock_rec_find_set_bit
和lock_rec_has_expl
函数。(错误#21356,错误#11745929) 分区:
.ibd
在某些情况下,如果分区文件丢失 ,与 MySQL 服务器建立连接可能会失败(缺陷号 33459653)分区: 在 MySQL 8.0.17 中完成的工作将所有
NOT IN
和NOT EXISTS
子查询转换为反连接后,在修剪表分区时不考虑由此转换产生的嵌套外部连接的内部部分。(缺陷号 33060953)复制: 在设置了复制组中
group_replication_consistency=AFTER
,如果选择了一个新的主节点,然后重新启动了先前的主节点,则新的主节点离开该组并显示一条错误消息。已调整延迟视图更改和事务准备的处理以防止出现这种情况。(缺陷号 33755920)复制: 组复制在自动重新加入过程中检查得太迟,重新加入的成员是唯一允许在错误状态下进入组的实例类型。该问题现已解决。(漏洞#33615493)
复制: 组复制可以在组配置操作运行时记录有关成员加入的警告消息,在没有加入成员的情况下,只有视图更改。现在只在适当的时候记录消息。(缺陷号 33378364)
复制: Group Replication 现在记录当连接到本地 XCom 实例出现问题时返回的操作系统错误,因此更容易解决防火墙阻止连接等问题。(错误#33189767,错误#104523)
复制: 为了帮助防止主选举陷入困境,组复制停止等待任何在选举期间离开组的成员的确认。如果确认等待确认的所有成员都离开了,Group Replication 声明初选成功完成。以前,如果主要成员是离开的成员之一,则主要更改会被错误地表述为在无法发生时已经发生。现在,如果主要成员在选举期间离开,Group Replication 会将主要选举声明为不成功的选举,没有主要更改。(缺陷号 33059773)
复制: 网络提供者停止时造成的死锁可能导致
STOP GROUP_REPLICATION
某些组成员无限期等待。(缺陷号 33044886)Microsoft Windows: 在 Windows 上,添加了 WinFlexBison 支持。(缺陷号 33788290)
在 EL6/EL7 上,mysql-community-server-debug 安装并未因安装商业软件包而过时。(缺陷号 33956760)
当针对由 cmake 构建系统复制的共享库(例如非系统 OpenSSL)进行构建时,MySQL 服务器不会在 ARM 上构建 EL7。现在--page-size设置为 getconf 报告的。(缺陷号 33904267)
具有特权的匿名用户
PROCESS
无法从processlist
表中选择行。(缺陷号 33869388)范围优化器没有考虑会话内存限制。(缺陷号 33869004)
在对子查询进行排序时,同一个文件排序操作可能会执行多次,输入不同,因此最长的附加列可能会在执行之间发生变化,但在必要时不会重新分配该列的缓冲区。现在,当先前分配的缓冲区足够大时,我们重新使用它,否则我们分配一个新的。(缺陷号 33865094)
-
从在多个查询块中具体化和使用的公用表表达式获得无效结果,其中,在使用 CTE 的第一个查询块中,有多个可能的键定义,这导致内部函数
JOIN::finalize_derived_keys()
移动了使用的键进入位置零,第二个查询块使用 CTE 操纵一个索引,该索引占据与为第一个查询块选择的键的原始位置相同的位置。这是 MySQL 8.0.22 中仅准备一次 DML 语句的工作的意外副作用。有关详细信息,请参阅WITH(公用表表达式)。(缺陷号 33856374)
改进了执行存储过程和存储函数时的错误处理。(漏洞#33851256)
从视图中选择的触发器并不总是产生预期的结果。(缺陷号 33847722)
加载时区信息时执行的计算需要负值
my_time_t
. 通常,该类型的最小值为零,对应于 UNIX 纪元的开始(1970-01-01 00:00:00
,没有时区偏移),这反映在常量 中MYTIME_MIN_VALUE
。这个最小值在所有情况下都无法正确设置TIME_ZONE_INFO
数据结构,因为某些时区偏移量是负数。my_time_t
此修复程序在填充时区信息数据库缓存时允许负值。(缺陷号 33837691)SET PERSIST
如果 MySQL 实例意外停止或在使用语句记录系统变量设置 后不久重新启动,则配置文件mysqld-auto.cnf
可能为空,在这种情况下,服务器无法重新启动。持久化的系统变量现在被写入一个备份文件,只有mysqld-auto.cnf
在验证写入成功后才将其重命名为,使原始mysqld-auto.cnf
文件仍然可用。重新启动时,如果找到具有有效内容的备份文件,服务器将从该文件中读取。否则将mysqld-auto.cnf
使用该文件并删除备份文件。(缺陷号 33830493)-
filesort
在计算排序键时并不总是正确检查字符串值的长度。(缺陷号 33830073)参考资料:此问题是 Bug #29739778 的回归。
包含
GROUP_ID
和MEMBER_ID
列的主键已添加到mysql.firewall_membership
表中。(缺陷号 33824544)-
在 MySQL 8.0.20 中修复了
rows matched
更新可更新视图时值不一致的问题,该视图WITH CHECK OPTION
仅针对单个表的更新处理了此问题。在此版本中,我们还修复了多表UPDATE
语句的问题。(缺陷号 33815426)参考资料:另请参阅:Bug #30158954。
MySQL Server 的链接 ProtoBuf 库已更新至版本 3.19.4。在https://github.com/protocolbuffers/protobuf/releases中描述了新 Protobuf 版本中修复的问题 。(缺陷号 33813846)
可以将无效字符插入
utf32
列中。(缺陷号 33810558)重新安装 MySQL Enterprise Firewall 插件导致失败。失败是由于在插件完全初始化之前调用更新先前持久化的防火墙系统变量。(缺陷号 33809478)
-
VARCHAR
使用或 连接列的 散列连接DECIMAL
返回过多的行。此处显示了一个使用示例VARCHAR
:# Create and populate table CREATE TABLE t(a VARCHAR(10), b VARCHAR(10)); INSERT INTO t VALUES ('x', 'xx'), ('xx', 'x'); # No indexes, so uses a hash join SELECT * FROM t AS t1, t AS t2 WHERE t1.a = t2.a AND t1.b = t2.b;
在修复之前,刚刚显示的查询返回了四行;现在它按预期返回两行。(缺陷号 33794977)
该
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
表没有列出不可见的键列。(缺陷号 33781534)服务器在访问从视图创建的视图后未执行正确的清理。(缺陷号 33777821)
在一个分组查询中
WITH ROLLUP
,使用一个窗口函数对列表中已经存在的聚合SELECT
进行排序,在解析窗口的排序子句时,一个额外的(和不必要的)聚合被添加为隐藏列。(缺陷号 33769911)对于有效的非常量值(从数据库行读取的数据而不是硬编码值) ,数据屏蔽
mask_ssn()
函数返回了“字符串参数宽度太大”错误。此外,未对零长度常量和非常量值(空字符串)或太小的常量值执行验证。这些问题已针对所有使用长度边界输入字符串的数据屏蔽函数得到解决。(缺陷号 33759276)ROLLUP
在某些情况下使用ORDER BY
窗口函数处理不正确。(缺陷号 33753245)更正了 Doxygen 评论中的一些问题。(错误#33734001、错误#33734035、错误#33734062、错误#33734075、错误#33734104、错误#33734117、错误#33734129、错误#33734143、错误#33734155、错误#33734181、错误#34138、错误#37、73)
无法解析的语句(例如,由于语法错误)不再写入慢速查询日志。(缺陷号 33732907)
描述 MySQL Enterprise Thread Pool 初始配置的消息现在作为 SYSTEM 消息而不是信息性消息发布,因此它在默认日志记录级别可见。(缺陷号 33729821)
与会话跟踪相关的预锁定优化在某些情况下导致递归锁定。(缺陷号 33728209)
当涉及
IN
子查询的联合也使用ORDER BY
子句时,并不总是能正确处理它。(缺陷号 33725507)当使用命令行选项请求密码提示时, mysqlpump客户端实用程序可能会意外停止。如果在此过程中遇到错误,则会在客户端退出之前返回适当的错误消息。(缺陷号 33688141)
实施标准包政策,为以下平台提供单独的 debuginfo RPM:SLES/openSUSE,以及社区 EL6 和 EL7。EL6 和 EL7 的商业版本现在使用 RelWithDebInfo 构建类型而不是 Debug 构建,这大大减小了它们的大小。(错误#33663811、错误#33684418、错误#33664929)
无法在
mysqld
启用跟踪日志的情况下运行。(缺陷号 33653824)当该
--fido-register-factor
选项在启动时用于 FIDO 设备注册时, mysql客户端可能会在语句中使用不正确的语法ALTER USER
,从而导致失败。该问题现已解决。(缺陷号 33650498)-
搜索
SET
列值时,作为第一个参数传递给的用户变量FIND_IN_SET()
不会产生与以相同方式使用的常量值相同的结果。示例:考虑如下所示
t1
创建和填充的表:CREATE TABLE t1 (c1 SET('a', 'b', 'c', 'd')); INSERT INTO t1 (c1) VALUES ('a, c, d'), ('c');
显示的值
var
和str
在以下查询的输出的两行中应该相同,但不是:SET @a = 'c'; SELECT FIND_IN_SET(@a, c1) AS var, FIND_IN_SET('c', c1) AS str FROM t1;
现在我们确保在这种情况下返回匹配项在用于列定义的集合中的位置,无论查找的值是常量还是列值。(缺陷号 33635637)
SET PASSWORD
使用支持它的身份验证方法 的操作会产生警告而不是预期的错误。(缺陷号 33635445)如果在 MySQL 服务器启动时未指定插件目录,并且用户尝试注册 FIDO 设备,则 mysql客户端意外停止。现在已经处理了这种情况,并报告了相应的错误。(漏洞#33631144)
-
MySQL 8.0.27 中所做的更改将
EXPLAIN
复合访问路径的输出(包括过滤和排序)从表路径内部移动到MATERIALIZE
访问路径,但未包含INDEX_RANGE_SCAN
在复合访问路径中。在某些情况下,这可能会导致未定义的行为。(漏洞#33611545)参考资料:此问题是 Bug #32788576 的回归。
无法撤销
DROP
对性能模式的特权。(缺陷号 33578113)内部
CreateIteratorFromAccessPath()
函数已被重写,不再使用递归;这有望在执行查询时显着减少堆栈使用。(缺陷号 33569770)尝试 FIDO 设备注册时出现质询-响应错误时,mysql客户端可能会意外停止。该问题现已解决。(缺陷号 33568944)
准备好的语句或存储函数执行 的
INFORMATION_SCHEMA.FILES
or 查询返回了陈旧数据。INFORMATION_SCHEMA.TABLES
数据更改后报告缓存数据。(错误#33538106,错误#105450)-
查询在满足以下所有条件时返回错误结果:
结果集包含一个具有不确定元素的列。
该列未引用表格。
有隐式分组。
查询计划使用了来自临时表的聚合。这个临时表是空的。
t
给定一个包含 column 的空表c1
,该语句INSERT INTO t SELECT MAX(t.c1), RAND(0) AS x FROM t
提供了此类查询的示例;通过插入到同一个表中,我们确保查询计划从临时表聚合。临时表有一列 forc1
,(单个)结果行c1
从临时表的第一行中选取。如果临时表为空,则没有第一行,c1
变为0;这导致插入(NULL, 0)
而不是,例如,(NULL, 0.155)
插入t
。我们通过不将此类列存储在临时表中来解决此问题。(缺陷号 33535379)
参考资料:另请参阅:Bug #32384355。
在 MySQL 8.0.27 中更改密码处理后,如果 mysql客户端被 Ctrl + C中断,则可能会发出密码提示,要求用户输入密码才能执行中断。现在,在响应提示时提供密码(以及在启动时在命令行上提供密码时)时会记录密码,因此为中断建立的新连接可以自动使用它。(缺陷号 33514253)
内部
keyread
标志指示只读取索引条目而不是完整的行。当在初始化期间为索引合并扫描设置此标志时,它随后在初始化作为索引合并扫描的一部分选择的各个范围扫描时被重置,这表明读取行而不是索引条目。我们通过在读取索引条目时将选择的索引设置为覆盖索引来解决此问题。(缺陷号 33499071)-
克隆页面压缩表时数据复制停止,其中捐赠主机上的压缩数据大小等于接收主机上的可用磁盘空间。在接收主机上打出的孔小于页面大小,导致磁盘碎片限制了可用于克隆数据的空间量。修改了在接收主机上处理页面压缩表的过程,以减少碎片并提高数据复制速度。
为了提高刷新率,克隆插件现在在
fsync
支持打孔的文件系统上刷新页面压缩表时使用 flush 方法。(缺陷号 33482747) 在创建视图时,当子查询被认为是常量时,可能会在解析期间对其进行评估。(缺陷号 33438883)
名义上,在
EXPLAIN FORMAT=TREE
输出中,我们仅将行数写为整数。对于零结果,很难确定这是 0.49 还是 0.00001,因此在这种情况下我们增加足够的精度以获得一位前导数字。(缺陷号 33426283)VALUES
在某些情况下没有按规定运行。(缺陷号 33414289)在调试版本中,当在或 的上下文中使用时 ,类型的用户变量的某些组合会
MYSQL_TYPE_DOUBLE
命中断言。(缺陷号 33406728)CAST()
CONVERT()
设置多个等式时,优化器在不需要时添加了外部引用。(缺陷号 33394701)
-
用于 MySQL 构建的 Boost 库的最低支持版本现已提高到 1.77.0。(缺陷号 33353637)
参考资料:另请参阅:Bug #33052171。
从类中删除了 冗余
init
和 功能代码。(错误#33339129,错误#104915)checkout_access_maps
Security_context
-
sys 架构视图
schema_unused_indexes
未正确更新。schema_unused_indexes
从 检索未使用的索引信息table_io_waits_summary_by_index_usage
,如果索引用于查询表中不存在的行,则不返回任何数据。从此版本开始,
schema_unused_indexes
即使未找到该行也会更新。(缺陷号 33302400) 一些使用公用表表达式的查询未被正确处理
EXPLAIN
。(缺陷号 33300271)服务器没有为某些复杂查询正确获取索引统计信息。(缺陷号 33270516)
-
在某些情况下,执行时
TRUNCATE TABLE performance_schema.status_by_thread;
可能会出现竞争条件。我们感谢 Facebook 对此修复做出的贡献。(缺陷号 33165726)
页面清理器线程在等待对大型表的全文索引创建操作所持有的索引页的独占锁时超时。(缺陷号 33101844)
-
对于
InnoDB
表,二级索引被扩展为包含表的主键;也就是说,所有属于主键的列都被标记为属于所有二级索引的一部分。一个例外是当二级索引被定义为唯一时,服务器不使用主键扩展。这可能会导致在为动态范围扫描设置读取集时出现问题。我们通过确保在唯一二级索引的情况下将所有主键部分包含在读取集中来解决此问题。(缺陷号 33101025)参考资料:此问题是 Bug #30417361 的回归。
引用不存在的表的现有外键约束可能会在创建或重命名表后导致连接错误。(缺陷号 33054071)
-
VALUES
在执行语句期间 为空创建值列表 时INSERT
,添加了一个隐藏元素,随后导致调试版本中的断言。VALUES
为了解决这个问题,我们现在在创建列表 时跳过所有隐藏元素。有关详细信息,请参阅INSERT ... ON DUPLICATE KEY UPDATE 语句。(缺陷号 32774799)
SELECT
列出作为表达式一部分的项目的 别名ORDER BY
未以与独立别名相同的方式解析,因此 已正确解析,但未正确解析 。(缺陷号 32695670)ORDER BY
alias
ORDER BY
function
(alias
)来自空的或不存在的密钥环源(由指定
keyring_file_data
)的离线密钥环迁移似乎成功完成,没有警告。密钥环迁移过程现在会在获取密钥时检查错误。如果在指定的密钥环源中未找到密钥,则会向错误日志写入一条警告消息,指示该密钥环没有密钥。(缺陷号 32327411)-
当删除一个始终为真的条件时,引用视图的子查询被删除,即使子查询本身在查询的其他地方被引用。(缺陷号 31946448)
参考资料:另请参阅:Bug #31216115。
如果mysqldump
--order-by-primary
用于带有该选项的多个表, 则会发生内存泄漏。分配给每个表的行排序的内存现在在每个表之后释放,而不是只释放一次。(错误#30042589,错误#96178)mysqld_safe日志消息文本错误已得到纠正。感谢中国移动的 Bin Wang 做出的贡献。(错误#106590,错误#33903639)
等效查询可能会返回不同的结果,因为执行路径略有不同。例如,
Item::val_int_from_string()
字符串Item_string::val_int()
到整数的转换应该使用相同的算法。(错误#106517,错误#33881339)更新了 CMake 规则以处理已弃用的
PermissionsStartOnly
systemd 选项。在 systemd 231(2016 年 7 月)中添加了备用可执行文件前缀,而在 systemd 240(2018 年 12 月)中弃用了 PermissionsStartOnly。现在在可用的地方使用首选的可执行文件前缀。(错误#106468,错误#33862323)在 MySQL 8.0.22 中完成了为物化派生表实现条件下推的工作之后,在某些情况下,带有聚合函数的隐式分组查询返回一个空集而不是
NULL
. (错误#106414,错误#33838439)-
准备好并执行的查询(例如
'SELECT ?'
使用DATE
、TIME
、DATETIME
或TIMESTAMP
作为绑定参数)可能会返回错误的列类型。通过恢复先前重新准备此类查询的逻辑来为每个动态参数提供其文字值,该问题已得到解决。(错误#106352,错误#33813951)参考资料:此问题是 Bug #32915973 的回归。
-
空安全比较 (
≪=>
) 未正确评估TIMESTAMP
触发器中的列。(错误#106286,错误#33790919)参考:这个问题是 Bug #32942327 的回归。
-
将
DECIMAL
值写入哈希连接缓冲区时,首先对值进行规范化。在某些情况下,此规范化可能会无意中更改值,从而使值落入错误的哈希桶并导致从连接返回不正确的结果。问题在于标准化以导致某些值丢失一些最低有效数字的方式删除了前导零。我们通过计算所需精度并传递计算值而不是更改原始值来解决此问题。(错误#106272,错误#33787914)
WHERE
条件为 、具有 列 、和 以及列并 创建为 的查询未返回正确结果。进一步的调查表明,在这种情况下,当 to 的第二个或第三个参数 是 时,比较结果是相反的,导致它评估 as for和 for 。(错误#106267,错误#33788832)c NOT
BETWEEN
NULL AND
COALESCE(a, b)
DATETIME
a
b
c
a
c
NOT NULL
BETWEEN
NULL
NULL
FALSE
FALSE
NULL
0
(FALSE
) 和NULL
could return 之间的 NULL 安全比较TRUE
,即使负责评估此类对象的实现永远不会产生NULL
并且应该始终返回FALSE
。(错误#105773,错误#33630225)-
构造函数使用主线程内存根来分配键,而不是使用与分配对象本身
QUICK_RANGE
相同的内存根 。QUICK_RANGE
当使用查询计划的范围检查执行多个查询时,这会导致意外的高内存使用率。(错误#105331,错误#33516707)参考资料:另请参阅:Bug #28805105、Bug #28857990。
-
SELECT DISTINCT
VARCHAR
当使用 TempTable 存储引擎 ( ) 时,当列包含一个空字符串和一个由单个空白字符组成的字符串时,在该列上返回 2 个不同的值。使用 排序规则时,此行为不正确;选择不同的值时应该忽略尾随空格。internal_tmp_mem_storage_engine
= TempTable
utf8_bin
PAD SPACE
对于使用存储引擎创建的临时表
TempTable
,这两个字符串被散列为不同的值,因为TempTable
散列函数总是将零长度数据散列为0
. (在刚才描述的情况下,空字符串被散列为,0
而来自另一个字符串的空格字符用于生成非零散列值。)现在通过删除
TempTable
存储引擎散列函数中对零长度数据的任何特殊处理来解决此问题。感谢 Brian Yue 的贡献。(错误#105316,错误#33506241)
-
测试程序因Too many connections
main.ssl-big
失败 。我们感谢 Facebook 的贡献。(错误#104377、错误#33139204、错误#33165693)
-
MySQL 支持的两种直方图,singleton 和 equi-height,之前将它们的桶集合分别存储在一个 map 和一个 set 中。此版本更改了两种直方图类型,现在它们将存储桶存储在动态数组中,这减少了空间开销并加快了选择性估计,因为在对存储桶执行二进制搜索时减少了间接性。
因为这两种类型的直方图都是通过按排序顺序插入桶来构造的,并且桶是按排序顺序序列化为 JSON 的,所以切换到动态数组时不需要额外的工作。(错误#104109,错误#33045204)
有符号变量和无符号变量之间的无效转换导致 form 查询的结果不正确
SELECT ALL t1.c1,t2.c1 FROM t1,t2 WHERE t1.c1 > t2.c1
。(错误#102025,错误#32302724)从这个版本开始,性能模式是排序规则感知的(Bug #98545,Bug #30881109)
ROLE
在 的列中 插入大于 32 字节的数据时,可能会发生断言错误setup_actors
。从此版本开始,该ROLE
列从 CHAR(32) 增加到 CHAR(96)。(错误#74678,错误#19947842)