有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/。
-
以前,每个 MySQL 用户帐户都被允许拥有一个密码。MySQL 现在允许一个帐户拥有双重密码,指定为主要密码和次要密码。此功能支持在复杂的多服务器系统中无缝执行分阶段密码更改,而无需停机。为了支持双密码功能,
ALTER USER
andSET PASSWORD
语句现在有一个RETAIN CURRENT PASSWORD
子句,当您为帐户分配新的主密码时,将当前密码保存为辅助密码。ALTER USER
还有一个DISCARD OLD PASSWORD
子句可以丢弃不再需要的辅助密码。请参阅密码管理。重要的双密码能力的实现涉及
mysql.user
系统表结构的改变。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade (并重新启动服务器)以合并此系统数据库更改。在此之前,无法更改密码。
审计 API 现在使应用程序能够使用新组件将自己的消息事件添加到审计日志中
audit_api_message_emit
,该组件包括一个audit_api_message_emit_udf()
可加载函数。请参阅审计消息组件。
以前, 服务器(例如,设置 系统变量)和其他程序使用CMake选项。但是,当该值包含单词“ server ”时,它不适合被其他程序使用。服务器现在使用新 选项。其他程序继续使用 。(漏洞#28888510)
COMPILATION_COMMENT
version_comment
COMPILATION_COMMENT_SERVER
COMPILATION_COMMENT
该
.gitignore
文件的内容已被清理。该文件的大部分内容是从其.bzrignore
前身继承而来的,并不相关。此清理的一个含义是不允许源内构建。(缺陷 #28341794,缺陷 #91626)-
MySQL 服务器现在允许专门为管理连接配置 TCP/IP 端口。这为用于普通连接的网络接口上允许的单一管理连接提供了一种替代方法,即使
max_connections
连接已经建立。管理网络接口具有以下特征:仅当
admin_address
系统变量在启动时设置为指示其 IP 地址时才启用该接口。如果admin_address
未设置,则服务器不维护任何管理界面。系统
admin_port
变量指定接口 TCP/IP 端口号(默认 33062)。管理连接的数量没有限制,但只允许有
SERVICE_CONNECTION_ADMIN
权限的用户连接。系统
create_admin_listener_thread
变量使 DBA 能够在启动时选择管理界面是否有自己的独立线程。默认是OFF
; 也就是说,主界面上普通连接的管理器线程也处理管理界面的连接。
感谢 Facebook 提出这个想法(并贡献代码,尽管没有使用)。(缺陷 #27847672,缺陷 #90395)
已弃用的resolveip和 resolve_stack_dump实用程序已被删除,不再包含在 MySQL 发行版中。 可以使用 nslookup、host或 dig代替resolveip。来自官方 MySQL 构建的堆栈跟踪始终是符号化的,因此无需使用 resolve_stack_dump。
如果存在子句
JSON_ARRAYAGG()
,JSON_OBJECTAGG()
则聚合函数现在可以用作窗口函数 。OVER
请参阅 聚合函数说明。
一个新的系统变量,
log_slow_extra
如果启用,会导致服务器将其他字段写入慢速查询日志行,这些日志行提供有关慢速语句的信息。此外,SET
写入日志以指示语句时间戳的行现在使用从语句执行开始的时间,而不是执行结束时的时间。请参阅 慢速查询日志。感谢 Facebook 对此功能所基于的贡献。(漏洞 #27535580,漏洞 #89637)-
二进制日志文件和中继日志文件现在可以加密,有助于保护这些文件和其中包含的潜在敏感数据不被外部攻击者滥用,也不会被存储它们的操作系统的用户未经授权查看。
binlog_encryption
您可以通过将新系统变量设置为 来 在 MySQL 服务器上启用加密ON
。OFF
是默认值。系统变量为二进制日志文件和中继日志文件设置加密。当您首次启动启用加密的服务器时,会在初始化二进制日志和中继日志之前生成一个新的二进制日志加密密钥。此密钥用于为每个二进制日志文件(如果服务器启用了二进制日志记录)和中继日志文件(如果服务器具有复制通道)加密文件密码,并且从文件密码生成的进一步密钥用于加密数据在文件中。如果在服务器运行时激活加密,则此时会生成一个新的二进制日志加密密钥,并轮换二进制日志文件和中继日志文件,以便对新文件和后续文件进行加密。如果通过将
binlog_encryption
系统变量更改为 来停用加密OFF
,则二进制日志文件和中继日志文件会立即轮换,并且所有后续日志记录都是未加密的。以前加密的文件不会自动解密,但服务器仍然可以读取它们。(该SHOW BINARY LOGS
语句现在显示每个二进制日志文件是加密的还是未加密的。)SUPER
特权或新的BINLOG_ENCRYPTION_ADMIN
在服务器运行时激活或停用加密需要特权。用于文件的加密算法,即 AES(高级加密标准)密码算法,内置于 MySQL 服务器中,无法配置。用于加密日志文件的文件密码的二进制日志加密密钥是 256 位密钥,使用 MySQL 服务器的内置密钥环服务专门为每个 MySQL 服务器实例生成。当前在服务器上使用的二进制日志加密密钥称为二进制日志主密钥。
新
binlog_rotate_encryption_master_key_at_startup
系统变量控制二进制日志主密钥是否在服务器重新启动时自动轮换。如果此系统变量设置为ON
,则每当服务器重新启动时,都会生成一个新的二进制日志加密密钥并将其用作新的二进制日志主密钥。如果设置为OFF
默认值,则重启后将再次使用现有的二进制日志主密钥。请注意,当 MySQL 服务器实例的加密处于活动状态时,只有写入二进制日志文件和中继日志文件的静态数据会被加密。复制事件流中的动态数据,发送到 MySQL 客户端,包括mysqlbinlog, 始终采用未加密格式,因此必须通过使用连接加密在传输过程中对其进行保护。在事务期间保存在二进制日志事务和语句缓存中的正在使用的数据,以及超出这些缓存中可用空间并因此存储在磁盘临时文件中的任何数据,也是未加密格式。当处理事务的线程结束时,临时文件和缓存将被删除。
-
服务器日志记录行为已针对在处理指定日志记录配置的启动选项之前生成的错误日志消息进行了更改。以前,服务器生成的消息具有默认的时间戳、格式和详细级别;缓冲它们;然后在错误日志配置已知后刷新它们。由于这些早期消息使用默认日志记录配置,因此它们可能与启动选项指定的内容不同。
现在,服务器缓冲日志事件而不是格式化的日志消息。这使它能够在已知设置后将配置设置追溯应用到这些事件,结果是刷新的消息使用配置的设置,而不是默认设置。有关详细信息,请参阅 错误日志输出格式。
Ubuntu 18.10 和 Fedora 29 默认安装 OpenSSL 1.1.1,但 MySQL 并不完全支持 OpenSSL 1.1.1。要安装 MySQL,必须安装 OpenSSL 1.0.2 兼容包。(漏洞#28981868)
Performance Schema 语句事件表(
events_statements_current
、events_statements_history
和events_statements_history_long
)现在有一STATEMENT_ID
列指示服务器在 SQL 级别维护的查询 ID。列值对于服务器实例是唯一的,因为它们是使用自动递增的全局计数器生成的。
如果 LDAP 端口号配置为 636 或 3269,插件现在使用 LDAPS(LDAP over SSL)而不是 LDAP。
authentication_ldap_sasl_server_port
可以使用或authentication_ldap_simple_server_port
系统变量设置端口号 。(LDAPS 不同于startTLS
.)(漏洞 #28743563)以前,对于带代理的 LDAP 身份验证,LDAP 身份验证插件使用 LDAP 服务器返回的第一个组名作为 MySQL 代理用户帐户名。MySQL 帐户的身份验证字符串现在可以按优先顺序指定要匹配的组列表,并且可以选择将匹配的组名映射到指定的 MySQL 代理用户名。请参阅LDAP 可插入身份验证。
在某些平台(Windows、macOS 和 Generic Linux)上与 MySQL 捆绑的 OpenSSL 库已升级到版本 1.0.2q。在所有其他平台上,MySQL 使用系统安装的 OpenSSL。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。(漏洞 #28988091)
-
为了影响后续的服务器重启,
SET PERSIST
andSET PERSIST_ONLY
语句使系统变量能够持久保存到mysqld-auto.cnf
数据目录中的选项文件中。但是,某些系统变量无法持久化(例如,因为它们涉及敏感数据)。因此,它们不能在运行时从远程管理员进行的会话中设置,因此需要管理员登录到服务器主机并直接修改my.cnf
选项文件。MySQL 现在允许用户对许多以前不可持久化的系统变量执行运行时管理,以便它们可以在某些限制条件下持久化。要启用此功能,请指定一个 SSL 证书 X.509 Subject 值,表示能够保留这些受限系统变量,并将新
persist_only_admin_x509_subject
系统变量设置为该 Subject 值。使用加密连接连接到服务器并提供具有指定 Subject 值的 SSL 证书的用户然后可以使用SET PERSIST_ONLY
来持久化持久受限的系统变量。有关详细信息,请参阅 非持久性和持久性受限系统变量。 -
对于大多数系统变量,设置会话值不需要特殊权限,任何用户都可以影响当前会话。对于某些系统变量,设置会话值可能会在当前会话之外产生影响,因此是一种受限操作,只能由具有特殊权限的用户完成。以前,either
SYSTEM_VARIABLES_ADMIN
或SUPER
限定为这样的权限,但这两种权限还允许设置会话变量以外的操作。新SESSION_VARIABLES_ADMIN
权限可以授予用户仅设置受限会话变量的能力,而无需同时启用其他操作。允许的任何操作
SESSION_VARIABLES_ADMIN
也被SYSTEM_VARIABLES_ADMIN
or 允许SUPER
,因此任何已经拥有后一种特权的用户实际上都具有SESSION_VARIABLES_ADMIN
暗示并且不需要SESSION_VARIABLES_ADMIN
明确授予。但是,如果已授予用户权限SYSTEM_VARIABLES_ADMIN
或SUPER
仅出于使该用户能够修改受限会话系统变量的目的,则管理员可以通过撤销SYSTEM_VARIABLES_ADMIN
和SUPER
授予 权限来减少用户的权限占用SESSION_VARIABLES_ADMIN
。有关说明,请参阅 系统变量权限。这些以前受限的会话变量需要
SYSTEM_VARIABLES_ADMIN
或SUPER
但现在也可以设置为SESSION_VARIABLES_ADMIN
:binlog_format binlog_row_image binlog_row_value_options binlog_rows_query_log_events debug debug_sync default_collation_for_utf8mb4 explicit_defaults_for_timestamp gtid_next histogram_generation_max_mem_size original_commit_timestamp sql_log_bin sql_log_off sql_require_primary_key
这些以前不受限制的会话变量现在受到限制并且设置它们至少需要
SESSION_VARIABLES_ADMIN
(它们也可以由具有SYSTEM_VARIABLES_ADMIN
或 的用户设置SUPER
):auto_increment_increment auto_increment_offset binlog_direct_non_transactional_updates bulk_insert_buffer_size character_set_filesystem character_set_database collation_database pseudo_slave_mode pseudo_thread_id rbr_exec_mode transaction_write_set_extraction
该
ST_Distance()
函数现在采用可选的第三个参数,允许指定返回值的单位。允许的单位是新INFORMATION_SCHEMA
ST_UNITS_OF_MEASURE
表中列出的单位。请参阅 使用对象形状的空间关系函数和 INFORMATION_SCHEMA ST_UNITS_OF_MEASURE 表。
-
派生表现在可以在
LATERAL
关键字前面指定允许在同一FROM
子句中引用(依赖于)前面表的列。用 指定的派生表LATERAL
只能出现在一个FROM
子句中,可以出现在用逗号分隔的表列表中,也可以出现在连接规范(JOIN
,INNER JOIN
,CROSS JOIN
,LEFT [OUTER] JOIN
, 或RIGHT [OUTER] JOIN
)中。横向派生表使某些 SQL 操作成为可能,而这些操作无法使用非横向派生表完成,或者需要低效的变通方法。请参阅 横向派生表。笔记LATERAL
now 是一个保留字,不能在没有标识符引用的情况下用作标识符。
-
线程池插件附带的
INFORMATION_SCHEMA
表已迁移为可用作性能模式表。这些INFORMATION_SCHEMA
表现在已弃用,并将在未来的 MySQL 版本中删除。应用程序应该从旧表过渡到新表。例如,如果应用程序使用此查询:SELECT * FROM INFORMATION_SCHEMA.TP_THREAD_STATE;
应用程序应改用此查询:
SELECT * FROM performance_schema.tp_thread_state;
有关详细信息,请参阅 性能模式线程池表。
X 插件现在在其错误处理类中包含 5 位 SQLSTATE 错误代码。以前,SQL 错误会向客户端返回 SQLSTATE 错误代码,但只会公开 MySQL 特定的错误编号。(缺陷号 28735058)
查询文档集合时,如果将布尔值用作 SQL 查询中占位符的参数,则会返回意外结果。现在为布尔值添加了新的翻译专业化,以便在这种情况下可以正确处理它们。(缺陷号 28227037)
X 协议现在总是在返回之前 将检索到的数据转换为
utf8mb4
字符集(使用 排序规则)。utf8mb4_general_ci
(漏洞 #28180155)X 协议现在支持 SQL 准备功能。
-
InnoDB: 禁用该缓冲池页面
innodb_buffer_pool_in_core_file
来减少核心文件的大小InnoDB
要使用此变量,core_file
必须启用该变量并且操作系统必须支持对 的MADV_DONTDUMP
非 POSIX 扩展madvise()
,Linux 3.4 及更高版本支持该扩展。有关详细信息,请参阅 从核心文件中排除缓冲池页面。感谢 Facebook 的贡献。(缺陷 #27724476,缺陷 #90144)
-
InnoDB: 默认情况下,撤销日志驻留在两个撤销表空间中,这两个表空间是在初始化 MySQL 实例时创建的。
可以在运行时使用
CREATE UNDO TABLESPACE
语法在选定位置创建其他撤消表空间。CREATE UNDO TABLESPACE tablespace_name ADD DATAFILE 'file_name.ibu';
使用语法创建的撤消表空间
CREATE UNDO TABLESPACE
可以在运行时使用DROP UNDO TABLESPACE
语法删除。DROP UNDO TABLESPACE tablespace_name;
ALTER UNDO TABLESPACE
语法可用于将撤消表空间标记为活动或非活动。ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE};
显示表空间状态的
STATE
列已添加到INFORMATION_SCHEMA.INNODB_TABLESPACES
表中。撤消表空间必须处于empty
可以删除之前的状态。以前弃用的
innodb_undo_tablespaces
变量不再可配置,将在未来的 MySQL 版本中删除。有关详细信息,请参阅 撤消表空间。
InnoDB:
InnoDB
现在支持并行聚集索引读取,可以提高CHECK TABLE
性能。此功能不适用于二级索引扫描。innodb_parallel_read_threads
会话变量必须设置为大于 1 的值才能进行并行聚集索引读取。 默认值为 4。用于执行并行聚集索引读取的实际线程数由innodb_parallel_read_threads
设置或要扫描的索引子树数决定,以较小者为准。InnoDB:语句 的
ADD DATAFILE
子句CREATE TABLESPACE
现在是可选的,它允许没有FILE
权限的用户创建表空间。在CREATE TABLESPACE
没有ADD DATAFILE
子句的情况下执行的语句会隐式地创建一个具有唯一文件名的表空间数据文件。InnoDB:启用 该
innodb_dedicated_server
变量后,日志文件的大小和数量现在根据自动配置的缓冲池大小进行配置。以前,日志文件大小是根据服务器上检测到的内存量配置的,日志文件的数量不是自动配置的。请参阅 为专用 MySQL 服务器启用自动配置。-
复制: 在单主模式下运行组时,如果在待应用的待办事项列表中保留事务时选择新的主节点,则对新主节点的读取操作有可能返回陈旧值. 现在,您可以使用
group_replication_consistency
变量来控制组在这种情况下的行为方式。当group_replication_consistency
设置为EVENTUAL
时,即使存在尚未应用的积压,新的主节点也会响应读取请求,这与之前的行为相匹配,并且存在客户端可以在应用任何积压时读取旧值的风险。在此期间写入新主节点失败,因为它有super_read_only
模式启用。当group_replication_consistency
设置为 时BEFORE_ON_PRIMARY_FAILOVER
,任何针对正在从旧主应用积压的新选主的任何新读取或写入查询都将保留,直到应用积压。这确保客户端始终读取他们写入的最新值,但也意味着客户端可能必须等到积压已应用,然后才能从新的主数据库读取。参考资料:另请参阅:Bug #26004894。
Microsoft Windows: 在 MySQL 服务器创建的命名管道上授予客户端的访问控制现在设置为在 Windows 上成功通信所需的最低限度。较新的 MySQL 客户端软件无需任何额外配置即可打开命名管道连接。如果不能立即升级旧的客户端软件,可以
named_pipe_full_access_group
使用新的服务器系统变量为 Windows 组提供打开命名管道连接所需的权限。完全访问组的成员资格应该是受限制的和临时的。最小服务器 RPM 主要用于 Docker 镜像。为了更好的 Docker 兼容性,该
log-error
行已从rpm-docker
配置文件中删除。这样,日志记录会转到stdout
/stderr
,从而可以使用 Docker 自己的接口。(漏洞#28692675)与创建和删除外键相关的错误消息已得到改进,更加具体和信息丰富。(漏洞 #28526309,漏洞 #92087)
ALTER TABLE
尝试字符集转换但失败的语句 的错误消息已得到改进,以指示哪个列产生了错误。(漏洞 #27546306,漏洞 #88738)以前,对于采用数值的命令选项,该值可以带有后缀
K
,M
,或G
表示乘数 1024、1024 2或 1024 3。现在,后缀也可以是T
,P
, 和E
来表示 1024 4、1024 5或 1024 6的乘数。感谢 Daniel Black 提供的补丁。(漏洞 #27306931,漏洞 #89017)修改了资源组锁定以提高可伸缩性和性能。(缺陷号 27148580)
-
Group Replication 的 Group Communication System (GCS) 和组通信引擎(XCom,一种 Paxos 变体)现在提供对 IPv6 的全面支持,因此复制组成员可以使用 IPv6 地址替代 IPv4 地址进行内部组通信。如果没有指定手动白名单,则将 IPv6 的本地主机地址和 IPv6 的私有子网地址(唯一本地地址和链路本地单播地址)添加到组复制的自动白名单中以供使用。
如果复制组的所有成员都处于支持使用 IPv6 地址进行组复制的 MySQL 服务器版本,则该组可以包含使用 IPv6 地址的成员和使用 IPv4 地址的成员的混合。加入成员必须提供与种子成员提供的连接协议相匹配的白名单 IP 地址或主机名,但加入成员的主要标识地址或主机名 (
group_replication_local_address
) 可以使用任一协议。如果成员使用解析为 IPv4 和 IPv6 地址的主机名,则 IPv4 地址始终用于组复制连接。如果复制组的任何或所有现有成员正在使用较旧的 MySQL 服务器版本,而不支持使用 IPv6 地址进行组复制,则加入成员必须在
group_replication_local_address
选项中提供用于组通信的 IPv4 地址。当每个组成员都升级后,该组就可以迁移到 IPv6 地址。(错误#26088469、错误#27757729、错误#90217) -
启动选项
--binlog-row-event-max-size
现在有一个相应的系统变量binlog_row_event_max_size
。启动选项和系统变量对基于行的二进制日志事件的最大大小设置了软限制,默认设置为 8192 字节。在可能的情况下,存储在二进制日志中的行被分组为大小不超过此设置值的事件。如果无法拆分事件,则可能会超过最大大小。全局系统变量是只读的
binlog_row_event_max_size
,只能在服务器启动时设置。因此,它的值只能通过在语句中使用PERSIST_ONLY
关键字或@@persist_only
限定符 来修改。SET
添加系统变量意味着可以使用 Performance Schema 表或SHOW VARIABLES
orSELECT
语句查看此设置。(缺陷 #19985377,缺陷 #74728) -
MySQL Group Replication 现在可以使用专用输入通道进行通信,作为使用 TCP 套接字的替代方法。新的输入通道使用共享内存在 Group Replication 逻辑和底层组通信引擎(XCom,一种 Paxos 变体)的本地实例之间进行通信。
以前,与本地 XCom 实例的通信始终使用 TCP 套接字进行,即由
group_replication_local_address
系统变量为每个组成员指定的网络地址。这会产生本地通信不需要的开销,例如通过网络协议栈进行内存复制和数据序列化。一个 TCP 套接字 (group_replication_local_address
) 仍然需要每个组成员与远程 XCom 实例进行通信。Group Replication 的 Group Communication System (GCS) 组件现在为每个 Group Replication 任务选择最合适的通信方法,输入通道或 TCP。例如,加入群组的过程需要与远程XCom实例进行通信,因此必须使用TCP。但是,从组中移除成员的过程只需要与本地 XCom 实例通信,因此使用输入通道。尽可能选择输入通道,以最大限度地减少与使用网络机制进行通信相关的开销。 -
添加了两个新的会话系统变量供复制内部使用。
original_server_version
并immediate_server_version
通过复制拓扑传输与事务关联的 MySQL 服务器版本号来支持跨版本复制。original_server_version
保存最初提交事务的服务器的 MySQL 服务器版本号(例如,80014
对于 MySQL 8.0.14 服务器实例)。immediate_server_version
保存复制拓扑中直接主服务器的 MySQL 服务器版本号。如果这些服务器中的任何一个或复制拓扑中的另一个中间服务器处于不支持这些会话系统变量的旧版本,则它们的值将设置为 0。有了这些信息,slave 就可以正确地处理来自旧版本 master 的数据,方法是识别所涉及的版本之间发生语法更改或语义更改的位置并适当地处理这些更改。该信息还可用于组复制环境,其中复制组的一个或多个成员的版本比其他成员更新。可以在每个事务的二进制日志中查看变量的值(作为 的一部分
Gtid_log_event
,或者Anonymous_gtid_log_event
如果服务器上未使用 GTID),并且可能有助于调试跨版本复制问题。 -
ALTER TABLE
当这些条件适用时,现在可用于更改列字符集(无需重建表): 新的CMake选项定义是否强制在源代码中构建。建议使用外源构建,因为它们允许来自同一源的多个构建,并且可以通过删除构建目录来快速执行清理。要强制进行源内构建,请使用 .
-DFORCE_INSOURCE_BUILD
-DFORCE_INSOURCE_BUILD=ON
-
重要变化:
ER_WRONG_VALUE_FOR_VAR
当使用 8.0 服务器不支持的 SQL 模式时, 将转储从 MySQL 5.7 服务器导入到运行 MySQL 8.0 的服务器通常会失败 由于NO_AUTO_CREATE_USER
在 MySQL 5.7 中默认启用但在 MySQL 8.0 中不受支持,这可能会经常发生。服务器在这种情况下的行为现在取决于
pseudo_slave_mode
系统变量的设置。如果这是 false,服务器将拒绝带有 的模式设置ER_UNSUPPORTED_SQL_MODE
。如果pseudo_slave_mode
为真,则服务器忽略不支持的模式并给出警告。请注意, mysqlbinlog在执行任何 SQL 之前设置pseudo_slave_mode
为 true。(漏洞 #90337,漏洞 #27828236) InnoDB: 后台清除线程截断撤消日志后,未释放全局和备份元数据锁。(缺陷 #29215254,缺陷 #93901)
InnoDB: MySQL 无法在 Solaris X86 上启动。TempTable 存储引擎中的静态线程本地“表”变量未正确初始化。(缺陷号 28987365)
InnoDB: 简化了死锁检测期间使用的锁存逻辑。(漏洞 #28904966)
-
InnoDB: 旧版本聚集索引记录的无效记录偏移量引发了调试断言。(缺陷号 28825617)
参考:这个问题是 Bug #25540277 的回归。
InnoDB: 当历史列表的长度超过时施加的最小 DML 延迟
innodb_max_purge_lag
从 5000 微秒减少到 5 微秒。(漏洞 #28813453)InnoDB: 当一个线程试图删除表而另一个线程创建加密表空间时,不正确的锁定顺序导致死锁。(漏洞#28774259)
InnoDB:
ALTER TABLESPACE
无法忽略不受支持的表空间属性。(缺陷号 28656611)InnoDB: 简化和优化了隐式到显式锁的转换逻辑。(漏洞#28637472)
InnoDB: 片段页面分配失败引发了断言。(漏洞 #28615893)
InnoDB: 错误放置的调试点导致刷新的 LOB 页面被视为损坏。(缺陷号 28607368)
InnoDB: 存储
TempTable
引擎错误地在系统临时目录而不是tmpdir
变量定义的目录中创建了临时文件。(漏洞#28598943)InnoDB: 尝试删除与全文搜索辅助表名称相似的表导致断言失败。(缺陷号 28577083)
InnoDB:查询 调用的函数
UPDATE
没有考虑虚拟列。(缺陷号 28560650)InnoDB: 为缓冲池 zip 哈希互斥体定义了不正确的键。(漏洞#28556539)
InnoDB:修改 了涉及
mysql.innodb_table_stats
和mysql.innodb_index_stats
表的后台事务的死锁处理。这些表错误地包含在当内部表包含在死锁循环中时触发的断言中。(漏洞 #28523042,漏洞 #92069)InnoDB: 设置
innodb_spin_wait_delay
为高值导致尝试关闭服务器时断言失败。为防止发生此故障,innodb_spin_wait_delay
最大值已减少到 1000。(缺陷 #28489407,缺陷 #91973)InnoDB:
ON DELETE CASCADE
对具有外键约束和索引虚拟列的表 的(缺陷号 28470805)InnoDB: 涉及虚拟列值的错误写入的 DML 日志引发了断言。(缺陷号 28448853)
InnoDB: 在子句
RENAME TABLE
在 MySQL 数据目录之外创建的表上运行时操作失败DATA DIRECTORY
(漏洞#28341514)InnoDB:
ALTER TABLE ... EXCHANGE PARTITION
允许交换具有不同虚拟列定义的分区,这会在InnoDB
稍后尝试从不存在的虚拟列中读取时导致断言。(缺陷号 28235668)-
InnoDB: 为事务提交期间发生的重做日志写入和刷新请求添加了一个计数器。日志写入器线程使用计数器来计算连续请求之间的平均时间。当平均时间大于 100 微秒时,日志写入器线程不使用旋转延迟,而是等待具有 10 微秒超时限制的请求事件。
还修复了可能导致挂起的日志写入器线程实现问题。(错误#28062382、错误#28444247、错误#28616442、错误#90890)
InnoDB: 尝试将回滚段添加到未完全初始化的新添加的撤消表空间时引发断言。(漏洞#27914054)
InnoDB:操作 后忽略了外键约束
RENAME TABLE
。(漏洞 #27453180,漏洞 #89441)InnoDB: 使用该
O_DIRECT_NO_FSYNC
innodb_flush_method
设置可能会由于文件系统元数据变得不同步而导致系统挂起。为防止此问题在O_DIRECT_NO_FSYNC
模式下发生, 在创建新文件后、增加文件大小后和关闭文件后InnoDB
调用每次写操作后仍然会跳过系统调用fsync()
。fsync()
(错误号 27309336)InnoDB:使用空字符串 指定
CREATE TABLE
or 选项未能引发错误,并被解释为默认设置,即. 指定空字符串现在被视为无效并引发错误。(漏洞#27177845)ALTER TABLE
ENCRYPTION
ENCRYPTION='N'
InnoDB:当将表空间数据文件从 Windows 上的 MySQL 实例移动到 启用变量 分区表名称分隔符(分区表名称的
#P#
或 尝试更改、重命名或优化表时,无法将名称完全转换为小写会导致错误,例如“来自存储引擎的‘InnoDB 错误’ ” 。(缺陷号 26925260)#SP#
lower_case_table_names
InnoDB: 在 64 位 Windows 系统上尝试写入大于 4GB 的表空间文件时出现断言。失败是由于铸件变窄。(错误#26636815,错误#87423)
InnoDB: 在尝试创建具有引用分区表的外键约束的表(这是不受支持的操作)后,
SHOW ENGINE INNODB STATUS
输出错误地报告外键错误,指示无法解析引用的表名。这个错误不再出现,现在返回给客户端的错误信息是外键还不支持与分区结合使用。(漏洞 #25319071,漏洞 #84331)InnoDB: 报告了不支持的外键操作的误导性错误消息,包括创建引用分区表的外键,以及引用使用不支持外键的存储引擎的表。错误消息现在提供了更多信息。(缺陷 #11747571,缺陷 #33027)
分区: 尝试在废弃的表空间上执行即时添加列会导致断言。在这种情况下现在会返回一个错误。(漏洞 #28517843)
分区:
ALTER TABLE
包含BLOB
或 重复TEXT
并不总是得到正确处理。(漏洞 #28491099)分区: 当分区表使用该选项
ALTER TABLE ... EXCHANGE PARTITION
有一个或多个分区定义时不起作用 此修复仅支持使用存储引擎DATA DIRECTORY
的分区表InnoDB
(缺陷号 19730200)复制: 根据 的值
group_replication_exit_state_action
,退出组的成员的行为不一致。为了协调退出组的成员的行为,而不考虑错误情况,现在当成员group_replication_exit_state_action=READ_ONLY
无意中退出组super_read_only
将恢复成员启动时的模式。这使得行为与具有 的成员的行为一致group_replication_exit_state_action=ABORT_SERVER
。(错误#28971639,错误#28526591)Replication:语句 写入二进制日志的元数据
CREATE TABLE
包括表中字符列的字符集信息。以前,当指定mysqlbinlog 选项--print-table-metadata
时,会为表打印默认字符集。此默认字符集是表列中出现频率最高的字符集,可能与为表指定的默认字符集不匹配。 mysqlbinlog现在单独打印每一列的字符集。这些列也打印在单独的行上。(漏洞#28774144)复制:
ENUM
字符集信息未作为和SET
列 的表元数据的一部分写入二进制日志 现在在binlog_row_metadata=FULL
设置时添加此信息,这会产生扩展元数据。(对于字符列,字符集信息也添加了binlog_row_metadata=MINIMAL
。)(缺陷 #28706307)Replication: 驱逐可疑 Group Replication 组成员之前等待时间的最大超时设置已减少到 3600 秒(一小时)。以前,
group_replication_member_expel_timeout
系统变量最多可以设置为 31536000 秒的值。新的上限为从组中删除非活动成员提供了更合理的最大值。超时的默认设置为零,这意味着不活跃的成员将在 5 秒检测期结束后立即被驱逐。指定超时值有助于避免在较慢的网络上进行不必要的驱逐,或者在预期的瞬时网络故障或机器减速的情况下。(缺陷号 28656750)复制:用于更正二进制日志语句中 标识符引号处理的补丁
ROLLBACK TO SAVEPOINT
未正确应用于后续 MySQL 版本。(缺陷号 28569645)复制: 在 MySQL 5.7.23 中的一个补丁之后,
LOAD DATA
语句停止了从 MySQL 5.7.22 主服务器到稍后版本的复制从服务器的基于语句的复制。问题现已解决。(漏洞 #28541204,漏洞 #92132)复制: 在某些情况下,
CHANGE MASTER TO
如果主信息日志已从表 (master_info_repository=TABLE
) 更改为文件 (master_info_repository=FILE
),则无法在复制从属服务器上使用该语句。(缺陷号 28529558)复制: mysqlbinlog错误地添加语句来设置
sql_require_primary_key
系统变量(在 MySQL 8.0.13 中引入)以ON
用于涉及 DML SQL 语句的事件。当系统变量设置为时执行的检查ON
仅与创建新表或更改现有表结构的 DDL SQL 语句相关。(漏洞#28524803)复制:设置或读取 系统变量时
binlog_transaction_dependency_tracking
,binlog_transaction_dependency_history_size
所需的锁类型可能会导致死锁情况,因为使用活动二进制日志也需要相同的锁。现在使用一种新的锁类型来代替对事务依赖跟踪系统变量的访问,这样就不会发生这种死锁。(错误#28511326、错误#91941、错误#28537209、错误#92108)-
复制: 如果在尚未确定下一个事务的 GTID 值时尝试隐式提交,则会在调试版本中引发断言 (
gtid_next=NOT_YET_DETERMINED
)。在mysqlbinlog发出 以执行格式描述事件gtid_next
后,系统变量立即具有此值 如果接下来尝试使用隐式提交的语句(例如 语句),则 设置不会转换为 状态,而是处于不可接受的状态。如果自动提交打开,则 在尝试语句时也会记录错误。BINLOG
CREATE TABLE
gtid_next
AUTOMATIC
ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON
为了解决这个问题,
BINLOG
如果语句会改变gtid_next
.ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION
如果尝试这样做,则会返回错误 。此外,当 GTID 正在使用中且值为gtid_next
isNOT_YET_DETERMINED
时,下一条语句必须显式设置gtid_next
为有效值或保持 GTID 状态不受影响。否则ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON
返回错误。(缺陷 #28490793,缺陷 #91980) 复制:对于已使用mysqlbinlogmove移动到另一个位置的二进制日志文件, 该。此类文件仍列在二进制日志索引文件中,但它们使用绝对路径列出,而不是相对于二进制日志文件通常存储的目录的路径。MySQL 服务器现在可以成功定位和清除移动的二进制日志文件。(缺陷号 28284624)
PURGE BINARY LOGS TO
'log_name'
Replication: 当
binlog_format
设置为 时MIXED
,如果函数包含应用于临时表的 DML 语句,并且还有DROP TEMPORARY TABLE
语句,则函数调用未写入二进制日志,从而导致复制错误。如果函数包含对临时表进行操作的 DML 语句,则函数调用现在以混合复制模式写入二进制日志。(漏洞#28258992)复制: 如果
autocommit
对于正在使用并设置了 GTID 的复制从属或组复制组成员设置为 0,super_read_only=ON
则未完成的事务会阻止服务器关闭。该事务试图将 GTID 保存到mysql.gtid_executed
表中,但更新失败,因为super_read_only=ON
已设置。(autocommit
如果设置为 1,事务将在这种情况下完成,而mysql.gtid_executed
表将在服务器启动时更新。)现在,super_read_only
此任务跳过设置检查,因此事务能够将 GTID 保存到mysql.gtid_executed
table 和 complete 无论super_read_only
和autocommit
设置的组合如何。(缺陷号 28183718)复制: 在 Group Replication 的 Group Communication System (GCS) 使用该
systemd-resolved
服务进行网络名称解析的系统上,如果无法解析主机名,GCS 会无限期地继续尝试。现在,如果从任何名称解析服务返回重试消息,GCS 会进行有限次数的重试,然后得出主机名无法解析的结论。(缺陷号 28177861)复制:如果在手动设置值
XA ROLLBACK
时为未知事务标识符发出语句, 则会在调试版本中引发断言 如果语句因错误而失败,gtid_next
服务器现在不会尝试更新 GTID 状态XA ROLLBACK
(缺陷 #27928837,缺陷 #90640)复制: 如果
SELECT... FOR UPDATE
在提交或回滚事务后立即发出语句,并且已使用 gtid_next 会话系统变量手动为事务分配了 GTID,则在调试版本中会引发断言。在gtid_next
用于为事务设置 GTID 并且事务已提交或回滚之后,SET GTID_NEXT
必须在任何其他语句之前发出另一个显式语句,否则该gtid_next
值未定义。该SELECT... FOR UPDATE
语句在这种情况下导致了 GTID 一致性冲突,因为它获取了写锁,尽管它没有进行任何更改。SELECT... FOR UPDATE
在这种情况下,获取写锁的语句现在会返回错误。(漏洞 #27903848,漏洞 #90547)复制: 在重负载下,二进制日志组提交中的竞争条件可能导致服务器意外停止。事务提交的跟踪已更改以防止出现这种情况。(漏洞#27556117)
复制:语句 返回
SHOW SLAVE STATUS
的所有现有中继日志文件的总组合大小 (Relay_Log_Space
) 的值可能比中继日志文件实际使用的磁盘空间大得多。I/O 线程在更新值时没有锁定变量,因此 SQL 线程可以在 I/O 线程完成值更新之前自动删除中继日志文件并写入减少的值。I/O 线程然后写入其原始大小计算,忽略 SQL 线程的更新并因此为已删除的文件添加回空间。该Relay_Log_Space
值现在在更新期间被锁定,以防止并发更新并确保准确计算。(错误#26997096,错误#87832)复制: 如果中继日志索引文件被复制从属的备份进程暂时锁定以供查看,并且 MySQL 服务器当时也尝试访问该文件以进行重命名或删除操作,则备份已完成并出现警告,但 MySQL 服务器遇到意外的停顿 MySQL 服务器现在会多次重试文件访问操作,以防出现这种情况或类似情况,并且文件很快就会再次可用。(缺陷号 25839610)
复制:设置后,如果二进制日志 在
sync_binlog=1
更新二进制日志结束位置之前的提交期间被轮换,则复制在从站上停止,因为服务器试图将旧的二进制日志结束位置与新的二进制日志文件一起使用。服务器现在在更新二进制日志结束位置时将二进制日志文件名与活动二进制日志文件进行比较,因此不会发生此问题。(错误#22252394、错误#25524203、错误#84752)Replication: 在组中添加新成员时,如果认证信息太大而无法传输,则产生一个事件,导致所有组成员失败。为了避免这种情况,现在如果认证信息过大会产生错误,使加入的成员离开群组。(错误#93130、错误#91870、错误#28900691、错误#28443958)
复制: 当在线重新配置组时,例如使用
group_replication_switch_to_multi_primary_mode
orgroup_replication_set_as_primary
,停止成员可能会导致意外停止。现在,当您发出 时STOP GROUP_REPLICATION
,如果该成员是正在重新配置的在线组的一部分,则组协调员会被告知组复制正在停止。成员等待在线配置过程完成任何正在进行的操作,但任何后续操作都将被取消。(缺陷 #92829,缺陷 #28807260)复制: 停止复制时,任何具有待处理事务的通道都可能导致组复制中的死锁。(错误#92376、错误#28636768、错误#28365855)
Replication: 当
group_replication_exit_state_action
设置为ABORT_SERVER
时,Group Replication 插件现在使用 WL#12003添加的新组件服务 来关闭 MySQL。(缺陷 #91793,缺陷 #28401703)复制: 当您使用 时
group_replication_switch_to_single_primary_mode()
,如果同时具有异步通道的成员遇到错误,则异步复制通道未正确停止,服务器可能会意外停止。(缺陷 #91747,缺陷 #28382590)复制: 可以使用基于组协调器的功能来配置组,例如
group_replication_switch_to_single_primary_mode
,当成员处于UNREACHABLE
或RECOVERING
状态时,这会导致操作等待所有成员变为ONLINE
。这可能导致组协调器操作永远不会成功完成。现在,如果您在此状态下对组调用这些函数中的任何一个,则会返回错误。ONLINE
在尝试使用这些功能配置组之前,请确保所有成员都是(缺陷 #91537,缺陷 #28284355)-
复制: 当一个成员加入一个具有恒定峰值负载的组时,该成员可能无法从状态移动
RECOVERING
到ONLINE
状态。原因是:该成员正在循环等待应用恢复期间到达的完整事务队列,而新事务仍在到达。
即使应用了整个队列,成员也会检查应用程序是否已暂停,这在持续的峰值工作负载中不太可能发生。
现在,当恢复完成策略等待交易被应用时,成员首先等待,直到满足以下条件之一:
要应用的事务适合流量控制配置。也就是说,要应用的事务可以在下一次流控迭代时应用;
在空恢复队列的情况下,没有事务正在排队或应用。
然后,成员等待
group_replication_applier
通道中当前排队的事务被应用,然后成员状态变为ONLINE
。(漏洞 #89582,漏洞 #27511404) Microsoft Windows: 删除现有 MySQL 服务失败后,MySQL 安装程序可能会失败。现在这被视为非致命问题,因此安装操作可以继续,但可能需要重新启动系统以允许进行服务清理。(缺陷 #29016677,缺陷 #93048)
Microsoft Windows:当mysqld的 多个实例
--no-monitor
在同一主机上为同一用户启动时,该SHUTDOWN
命令会关闭错误的服务器进程。--no-monitor
此修复通过附加进程的进程 ID创建一个唯一的关闭事件名称以供使用(漏洞#28723675)X DevAPI: 使用 X 协议时,使用用户变量作为
OUT
参数调用的存储过程未设置变量的值。(缺陷 #91907,缺陷 #28458752)JSON: 对 JSON 对象的迭代导致不必要的字符串分配。(缺陷号 28975640)
-
JSON:将值 转换
JSON
为文本会导致目标字符串线性增长,从而导致不必要的大量重新分配。现在这个过程使用指数增长来减少所需的分配数量。(漏洞 #28949700)参考资料:另请参阅:Bug #103790、Bug #32919524。
JSON:
YEAR
值在 JSON 中存储为不透明数据;当包含值的 JSON 文档YEAR
被转换为文本时,YEAR 值显示为 base64 编码的字符串。为解决此问题,YEAR
值现在存储为无符号整数,在转换为文本时显示为数字。YEAR
此修复的另一个好处是JSON 文档中的值现在需要更少的存储空间(缺陷号 28947107)-
JSON: 尝试从表的
JSON
列中FEDERATED
,服务器返回 Cannot create a JSON value from a string with CHARACTER SET 'binary'。ER_INVALID_JSON_PATH_CHARSET
此外,对包含 列的表既没有影响
DELETE
也UPDATE
没有影响 。(缺陷号 28877215)FEDERATED
JSON
JSON:即使执行查询的用户对列具有特权, ,表单查询。(漏洞 #23254268)
SELECT
jt.* FROM t1,
JSON_TABLE(t1.c, '$[*]' COLUMNS (num INT PATH '$[0]')) AS jt
SELECT
c
-
Facebook 为 Bug#27855592 实现的功能贡献的代码已更新。(缺陷号 28950397)
参考资料:另请参阅:Bug #27855592。
在 SuSE Linux 上,不处理
EBUSY
来自的虚假返回值。pthread_mutex_destroy()
(漏洞#28948462)mysqld_safe和 mysqld_multi错误地包含在仅客户端包中。(漏洞#28942508)
主机缓存锁定处理不当可能导致服务器退出。(缺陷号 28936159)
audit_log
如果安装了插件, MySQL Enterprise Firewall 将无法正常工作。(漏洞 #28930885,漏洞 #93184)已进行更正以在 Windows 上的 Visual Studio 下成功构建。(缺陷 #28892711,缺陷 #93077)
服务器允许创建与重做日志文件同名的数据库,这可能会导致意外的服务器行为。这样的名称不再被允许作为数据库名称。(漏洞#28867993)
mysqld_multi可能无法将正确的
datadir
值传递给 mysqld。(缺陷 #28866662,缺陷 #90801)在为例程、事件和触发器创建 MDL 密钥期间检查参数架构名称以确保名称为小写的调试断言在遇到包含多字节字符的架构名称时失败。(漏洞#28864244)
改进了一些错误消息的格式说明符以避免显示不正确的数值。(漏洞#28860795)
对于 Windows 上的调试版本,启用了未使用的内存泄漏检查,这可能会减慢关闭过程。这些检查现在只对专门的构建启用。(漏洞#28857626)
sql_require_primary_key
如果启用了系统变量, mysql_upgrade可能无法升级某些系统表 (缺陷 #28855207,缺陷 #92988)配置的构建
-DWITH_LIBWRAP=ON
未编译。(缺陷 #28853650,缺陷 #92983)对于表,如果通过使列可为空来更改此函数中引用的列的默认值,则
InnoDB
依赖于DEFAULT()
函数的存储或索引虚拟生成列的值未正确更新。ALTER TABLE
(漏洞 #28848265)/permissive
已进行更正以在打开标志 的情况下在 Windows 上的 Visual Studio 下成功构建。(漏洞 #28842878,漏洞 #92943)配置的构建
-DCMAKE_BUILD_TYPE=Release
未编译。(缺陷 #28841366,缺陷 #92945)-
ALTER TABLE
现在可以INPLACE
在以下条件适用时使用该算法:对于
InnoDB
表,修改生成的存储列但不更改其类型、表达式或可空性的语句。对于非
InnoDB
表,修改生成的存储列或虚拟列但不更改其类型、表达式或可空性的语句。
此类更改的一个示例是对列注释的更改。(缺陷号 28836543)
重新安装插件时,不会应用已保留的插件系统变量。(漏洞#28823972)
EXPLAIN ... FOR CONNECTION
可以修改另一个连接的 SQL 模式。(漏洞#28786981)将 Sun RPC 和 XDR 从
glibc
单独的libtirpc
库中移除会导致libasan
某些平台出现问题。(错误#28785835、错误#92762、错误#28897799、错误#93116)ENUM
在处理表单查询时比较两个值时 可能会遇到断言, 并且列上有索引。(漏洞#28769996)SELECT a FROM
table
WHERE b =value
b
对系统变量的并发读写访问
offline_mode
可能会导致死锁。(漏洞 #28761869)从 MySQL 5.7 升级到 MySQL 8.0 时,触发器以错误的顺序加载到内存中,导致断言失败。(缺陷 #28760011,缺陷 #92609)
涉及 Performance Schema
data_locks
表的连接可能会产生不正确的结果。(漏洞#28733170)一些涉及使用标量子查询的多重嵌套子查询没有得到正确处理。(缺陷号 28723670)
在 Ubuntu 上,安装的
/etc/mysql/mysql.conf.d/default-auth-override.cnf
文件被错误地创建为可执行模式。感谢 Evgeniy Patlan 的更正贡献。(漏洞 #28714840,漏洞 #92587)GET_LOCK()
由于并发连接持有相同的用户级锁而失败的零超时调用 导致内存泄漏 。(漏洞#28714367)当托管大量表的服务器反复启动和停止时,可能会发生堆损坏和服务器退出。(缺陷 #28705511,缺陷 #92572)
MySQL 服务器 MSI 包中缺少 MySQL 路由器。(漏洞#28685556)
示例存储函数
GTID_SUBTRACT_UUID
已在代码中更正以匹配记录的版本。(缺陷号 28670170)CAP_SYS_NICE
Linux 的 MySQL 软件包安装程序不再为mysqld启用功能。(这样做是为了方便资源组线程优先级的使用。)对于需要访问线程优先级的 Linux 部署,请参阅 MySQL 参考手册说明以在资源组限制CAP_SYS_NICE
中启用 功能。(缺陷号 28670160)运营商的内部实施
<=>
得到简化。(缺陷号 28660232)在
STOP GROUP_REPLICATION
发出从组中删除服务器实例的语句后,服务器实例上记录了错误消息“[GCS] 将消息推送到组通信引擎时出错”的多个 实例。现在,当服务器正在离开组或不再是组成员时,该错误将被忽略。(漏洞 #28658228,漏洞 #92454)如果
CHARACTER SET
某些列的属性隐含在 中JSON_TABLE(... COLUMNS ...)
,则结果列使用全局character_set_results
字符集作为默认字符集。该列现在使用会话character_set_connection
和collation_connection
值。(漏洞#28643862)在生成行值的表达式上添加功能索引会引发断言;现在它会导致错误。(漏洞#28643252)
sql-mode
在调试版本中,在设置为TIME_TRUNCATE_FRACTIONAL
导致断言失败 后创建触发器 。SQL 模式不存在于 数据字典表的sql_mode
列中 。mysql.triggers
(漏洞#28642918)使用
--log-timestamps=SYSTEM
时,日志消息中的 ISO 8601 时间戳未考虑夏令时。(错误#28632725,错误#32893161)error 的参数
ER_IB_MSG_720
计算不正确。(漏洞 #28629175)如果未正确指定用于指定套接字文件的选项,则服务器可能会在启动时退出。(漏洞#28609181)
通过添加与子表具有不同存储引擎的父表,然后将父表更改为与子表相同的存储引擎,可能会创建不一致的外键。(漏洞 #28608460,漏洞 #92317)
当服务器加入复制组时,它会尝试连接到其列表中列出的第一个种子成员
group_replication_group_seeds
系统变量。如果连接被拒绝,加入成员将尝试按顺序连接到列表中的每个其他种子成员。以前,如果加入成员连接到种子成员但没有被添加到复制组,则加入成员不会进行任何进一步的连接尝试。如果种子成员在建立连接后失败,或者如果种子成员在其白名单中没有加入成员的地址并关闭连接,或者如果种子成员拒绝加入成员的加入请求,则可能会出现这种情况。现在,如果加入成员连接到种子成员但没有设法加入该组,加入成员继续按顺序尝试列表中剩余的种子成员。(漏洞 #28602835)给定特定的分配模式、分配器重新绑定的副本和释放,可以
temptable::Allocator
重用已释放的内存块。这导致 Windows 平台上的测试套件失败。(漏洞 #28595557)设置
time_zone
为负偏移量和timestamp
低值会在更改例程和视图时触发断言。(缺陷 #28590623,缺陷 #92273)将
pid_file
系统变量保留为DEFAULT
可能会导致NULL
后续服务器启动的值为。(漏洞#28589736)SELECT ... FOR UPDATE
不正确的权限检查可能会对在 MySQL 5.7 中成功执行的语句 产生错误 。(漏洞 #28581664,漏洞 #92254)尝试重命名外键的父列
ALTER TABLE
可能会失败。(漏洞#28581468)的权限
RESET PERSIST
未正确检查。(漏洞#28564239)计算时发生溢出 。(漏洞#28562930)
AVG(
YEAR(
datetime_column
))服务器重新启动后,性能模式表中持久化系统变量的路径名
variables_info
可能计算不正确。(漏洞#28561584)分区表名称检查提出了无效断言。(漏洞#28556942)
可以在条件列表中出现错误时调用该
handler::create()
函数,这可以防止handler::create()
正确报告函数中的错误。(漏洞#28556264)对于
ALTER TABLE
,ALGORITHM=INSTANT
在 8.0.12 之前的 MySQL 版本中创建的表上被错误拒绝。(缺陷 #28554157,缺陷 #92194)mysqlpump 在遇到错误时没有释放所有分配的资源,导致内存泄漏。(缺陷 #28538971,缺陷 #92131)
对于函数子句中的
COLLATE
数据类型,属性被拒绝。(缺陷号 28538315)COLUMNS
JSON_TABLE()
对于调试版本,服务器可能会在尝试回滚
CREATE USER
语句时退出。(缺陷号 28536312)带有符号值的插件变量显示不正确。(缺陷 #28534414,缺陷 #92107)
对已弃用的系统变量的错误处理可能会导致对性能模式
variables_by_thread
表的查询输出不正确。(漏洞 #28515475,漏洞 #92049)Thread Sanitizer 发现的数据竞争
Event_queue::lock_data
和SAFE_MUTEX
实现已修复。(错误#28510721、错误#92041、错误#28510691、错误#92040)ER_NEED_REPREPARE
当准备语句的重新准备失败时, 没有诊断被推送到诊断区域。(缺陷 #28509306,缺陷 #92029)当子查询包含 a
UNION
时,子查询列数计算错误。(漏洞#28499924)在使用 评估表达式时
WITH ROLLUP
,我们现在仅在具有临时表列时才将表达式的结果写入临时表。(错误#28493849,错误#28523014)对于调试版本,
ALTER TABLE
对TEMPORARY
表进行不正确的外键错误检查可能会导致服务器退出。(缺陷 #28493257,缺陷 #91990)对于某些系统变量,
SET PERSIST
保留默认值而不是指定值。(缺陷号 28466045)SET RESOURCE GROUP
无法作为准备好的语句执行。(缺陷 #28448258,缺陷 #91876)恢复了
Item_field::fix_fields()
在执行窗口函数时无意中删除的调用。(漏洞#28431783)X 插件启动和关闭期间 Thread Sanitizer 报告的数据竞争已得到纠正。(漏洞#28407294)
创建分区描述包含非法 utf8 字符的表会引发断言。(漏洞 #28387488,漏洞 #91763)
mysqldump输出可能包括已删除的 SQL 模式值。(漏洞 #28373001,漏洞 #91714)
一个潜在的锁定订单周期已得到纠正。(缺陷号 28366531)
在启用 GTID 的服务器上,
INFORMATION_SCHEMA.COLUMNS
表上的并发语句可能会死锁。(缺陷 #28293047,缺陷 #91548)CREATE TABLE
表定义中具有表字符集和文字字符串的表的语句utf32
引发断言。(缺陷号 28275881)添加了内部功能以支持在成功完成服务器升级后更新服务器版本号。(漏洞 #28211486,漏洞 #91323)
使用该函数将日志文件名作为字符串进行比较会
memcmp()
导致未初始化的内存读取错误。比较现在使用strncmp()
函数。感谢 Zsolt Parragi 和 Laurynas Biveinis 的贡献。(缺陷 #28178776,缺陷 #90238)服务器错误处理了仅重音不同的存储程序和资源组名称。(漏洞 #28122841)
在对第二列执行带有
LIKE
子句的内部联接时,优化器跳过了复合索引中的第二列。(缺陷号 28086754)CREATE TABLE ... SELECT
可以创建具有“零”日期默认值的日期列,而它本应在没有默认值的情况下创建日期列。(漏洞 #28022129)IN
对于大量表,子查询谓词到半连接 的转换没有得到正确处理。(漏洞 #28004674)在执行添加到为窗口函数创建的任何临时表的最后一个的文件排序时,用于从存储引擎读取字段的位图未正确启用。在不需要临时表的情况下,服务器向 select 表的输出添加了一个文件排序,但
WHERE
没有添加删除的引用(条件)。现在在这种情况下,当第一个窗口函数需要排序并且在处理此窗口函数之前没有创建临时表时,将引用添加到选择表。(漏洞 #27975193)在看到范围帧中的一行后,如果后来确定另一行出现在该范围帧之前,服务器将继续检查新行。这导致下一帧计算不正确。(漏洞#27973860)
服务器对
SIGHUP
信号的错误处理可能导致服务器退出。(缺陷 #27966483,缺陷 #90742)DELETE WHERE a=
来自具有列的表constant
a
并按生成的列的值进行分区b
导致调试版本中的断言。(漏洞 #27954073)INFORMATION_SCHEMA
更新动态表统计信息时,查询可能会导致服务器退出。(缺陷号 27898108)打开外键父表时可能会发生元数据锁定死锁。(漏洞#27859086)
帐户管理语句的内存处理不当可能导致服务器行为不当。(漏洞 #27820277)
ORDER BY
在某些情况下, 窗口函数没有PARTITION BY
正确处理。(漏洞#27816506)-
MySQL 查询优化器将每个要下推到表的谓词标识为表条件;作为此过程的一部分,它会检查表条件中的给定谓词是否已知根据为表选择的访问路径为真,在这种情况下可以安全地删除谓词。
比如执行时
SELECT * FROM t1 WHERE pk=1
,wherepk
是表的主键t1
,ref
选择访问方式。因为我们知道这已经只返回行 ,所以应该消除pk=1
将此条件作为过滤器 ( ) 的进一步评估。Using where
在优化包含
GROUP BY
or的查询时ORDER BY
,执行后期优化器检查以发现是否可以通过使用排序索引来跳过排序。由于这是在可能已选择另一个索引来访问要排序的表之后完成的,因此可能会过早地删除一些被认为是冗余的谓词(由于先前选择的访问路径)。为了弥补这一点,执行了以下操作:重建包含先前因已选择访问方法而被消除的谓词的表条件。
执行检查以查看是否存在任何排序索引,以便可以避免排序,可能会修改访问计划。
出现问题是因为未正确执行以下旨在补救早期谓词删除的操作:
无论访问计划是否被修改,前面提到的重构表条件中添加回的任何额外谓词都成为表条件的永久部分。
当访问计划更改为使用另一个排序索引时,没有对新索引执行任何分析以删除被新索引废弃的谓词。
存储引擎实现条件下推还存在另一个问题,例如
NDBCLUSTER
:下推的条件是在分析之前从表条件生成的,这样,如果稍后更改访问路径,则下推的条件不包含已删除的谓词,使条件下推效率降低。这个问题的根本原因
part_of_refkey()
是在表的访问方法还没有完全确定之前就对表谓词进行了分析。这是通过删除此类早期分析来解决的。(错误#27808758,错误#27814026) 即使在要查询的表中找到该列 ,包含子句 的窗口函数也会因窗口顺序中的未知字段而失败。(漏洞#27808099)
ORDER BY
column
执行准备好的语句来执行具有大量占位符的多行插入会消耗过多的内存并且执行速度可能会很慢。(漏洞 #27703912)
在 Windows 上,如果已删除 Visual C++ Redistributable for Visual Studio,则使用 MSI 安装程序卸载 MySQL 会失败。(漏洞#27621546)
SET
解析器在触发器定义中接受了可能导致服务器退出的 无效 语句语法。(漏洞#27595603)keyring_encrypted_file
如果插件密钥环文件无效 ,则服务器无法启动 。(缺陷号 27588064)密钥环迁移失败,源和目标密钥环插件分别为
keyring_okv
和keyring_encrypted_file
。(漏洞#27493970)在调试版本中,使用带符号整数的窗口函数可能会错误处理包含
FOLLOWING
. (漏洞#27452365)当使用设置了标志的过程调用执行准备好的语句时
CURSOR_TYPE_READ_ONLY
,如果过程执行SELECT
返回空结果集的 a,则客户端库挂起。(缺陷 #27443252,缺陷 #89214)外键引用列的名称在
SHOW CREATE TABLE
输出和INFORMATION_SCHEMA.KEY_COLUMN_USAGE
表中始终以小写形式显示。(缺陷 #27353767,缺陷 #88718)在执行其他并发活动时加载和卸载
audit_log
插件可能会导致服务器无响应。(漏洞 #27325622)修改了数据字典属性接口 (
dd::Properties
) 和实现,以提供一种为属性对象定义有效键的新方法。(错误#27309072、错误#89031、错误#27309082、错误#89032)同时安装和卸载
validate_password
组件SET PASSWORD
可能会导致组件故障。(漏洞 #27020979)服务器源代码中的一些拼写错误是固定的。感谢 Hyunwoo Park 的贡献。(错误#26189673,错误#86565)
在将列权限授予表后,
HANDLER READ
在权限检查期间断言调用。(缺陷号 25987758)确保外键定义中引用和引用列类型兼容性的检查已从存储引擎层移至 SQL 层。此外,当列不兼容以及外键约束引用不存在的表时,会生成更好的错误消息。(错误#25722927、错误#28371394、错误#91712、错误#21308781、错误#77467、错误#11746132、错误#23693)
解析器错误地执行了一些内存不足检查。(缺陷号 25633994)
用户管理语句和其他试图直接访问授权表的语句之间的竞争条件可能会导致死锁和事务回滚。(漏洞 #24481240)
当服务器在
skip_name_resolve
启用系统变量的情况下启动时,虚假警告可能会写入错误日志,内容是关于忽略主机名部分为localhost
. (事实上,这些帐户已被使用且未被忽略。)(Bug #23329861,Bug #81441)使用的 DML 语句
IGNORE
并不总是在具有生成列的表上得到正确处理。(缺陷号 22990029)-
MySQL 现在
WHERE
在准备过程中移除由常量文字表达式引起的琐碎条件,而不是在优化的后期阶段。这应该会改进包含琐碎条件的外连接查询的计划,例如:SELECT * FROM t1 LEFT JOIN t2 ON condition_1 WHERE condition_2 OR 0 = 1
删除冗余
OR 0 = 1
条件后,优化器可以将查询重写为内部联接,如下所示:SELECT * FROM t1 LEFT JOIN t2 WHERE condition_1 AND condition_2
有关详细信息,请参阅MySQL 8.0中的新增功能和 外部连接优化。(错误#16893426、错误#28237111、错误#28239008、错误#28341790)
参考资料:另请参阅:Bug #28197977、Bug #28240054。
每个函数 REGEXP_REPLACE()、REGEXP_SUBSTR()、REGEXP_LIKE() 和 REGEXP_INSTR() 都返回一个 DOUBLE 而不是函数指定返回类型的值。(缺陷 #90039,缺陷 #27682225)
使用动态范围和索引合并的查询可能使用比预期更多的内存。(缺陷 #89953,缺陷 #27659490)
CHAR
从具有带排序规则的列 的表中进行选择NO_PAD
会产生不一致的结果。(漏洞 #89753,漏洞 #27578340)