有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/。
-
现在可以要求通过指定要替换的当前密码来验证更改帐户密码的尝试。这使 DBA 能够防止用户在未证明知道当前密码的情况下更改密码。可以使用系统变量全局建立密码验证策略 ,也可以使用and 语句的选项
password_require_current
在每个帐户的基础上 建立密码验证策略。与现有的密码管理功能一起,要求验证的新功能为 DBA 提供了对密码管理的更完整控制。有关详细信息,请参阅 密码管理。PASSWORD REQUIRE
CREATE USER
ALTER USER
重要的密码验证功能的实现涉及对
mysql.user
系统表结构的更改。如果从早期版本升级到此 MySQL 版本,则必须运行 mysql_upgrade(并重新启动服务器)以合并此系统数据库更改。在此之前, 无法更改密码。
新的CMake选项控制是否启用链接时优化。目前,这仅受 GCC 7 和 8 支持。(Bug #28184537,Bug #28211382)
WITH_LTO
新的CMake选项控制是使用捆绑的还是系统的 RapidJSON 库进行编译。(漏洞 #28024992,漏洞 #90867)
WITH_RAPIDJSON
CMake选项现在支持 构建类型,它类似于 构建类型,但省略了调试信息以减小构建大小。(错误#27874068,错误#32287863)
CMAKE_BUILD_TYPE
Release
RelWithDebInfo
新的
sql_require_primary_key
系统变量使得创建新表或更改现有表结构的语句可以强制执行表具有主键的要求。启用此变量有助于避免在表没有主键时可能发生的基于行的复制中的性能问题。假设一个表没有主键,更新或删除修改多行。在主服务器上,可以使用单个表扫描执行此操作,但是当使用基于行的复制进行复制时,会导致对从属服务器上要修改的每一行进行表扫描。使用主键,这些表扫描不会发生。(错误#17468242、错误#69845、错误#17005592、错误#69223)为了使服务器能够侦听一组地址,
bind_address
系统变量现在允许使用逗号分隔的 IP 地址或主机名列表,而不仅仅是单个地址或名称。有关详细信息,请参阅 服务器系统变量。
-
重要更改:
SET
由于包括此处列出的问题在内的问题,现在已弃用 在 statements 以外的语句中设置用户变量未定义涉及用户变量的表达式的求值顺序。
变量的默认结果类型基于其在语句开头的类型,当在语句开头保存一种类型值的变量在语句中被赋予不同类型的新值时,这可能会产生意想不到的效果同样的声明。
HAVING
、GROUP BY
和ORDER BY
子句在引用在选择表达式列表中分配了值的变量时未按预期工作,因为表达式是在客户端上计算的,因此可能会使用前一行中的陈旧列值.
SELECT @var, @var:=@var+1
为了向后兼容,MySQL 8.0 仍然接受 诸如此类的语法,但在未来的 MySQL 版本中可能会被删除。 创新数据库;分区: 删除了对在共享表空间中放置表分区的支持。共享表空间包括系统表空间和通用表空间。有关识别共享表空间中的分区并将它们移动到 file-per-table 表空间的信息,请参阅 准备安装以进行升级。
InnoDB:
TABLESPACE = innodb_file_per_table
不推荐使用对andTABLESPACE = innodb_temporary
子句的 支持,CREATE TEMPORARY TABLE
并将在未来的 MySQL 版本中删除。该
utf8mb3
字符集已弃用,将在未来的 MySQL 版本中删除。请utf8mb4
改用。从未支持嵌套注释(尽管在某些情况下它们可能被允许),但现在被认为已弃用并将在未来的 MySQL 版本中删除。
已弃用的变量
metadata_locks_cache_size
和metadata_locks_hash_instances
系统变量已被删除。SQL 模式已被弃用,
PAD_CHAR_TO_FULL_LENGTH
并将在未来的 MySQL 版本中删除。
MySQL 客户端库现在为 OpenSSL 错误返回更好的错误消息。感谢 Facebook 的补丁。(漏洞 #27855668,漏洞 #90418)
-
以前, 即使用户没有父表访问权限,也会显示外键操作的错误消息
ER_NO_REFERENCED_ROW_2
并ER_ROW_IS_REFERENCED_2
显示有关父表的信息。对这种情况的错误处理进行了修改:如果用户确实拥有所有父表的表级权限,
ER_NO_REFERENCED_ROW_2
并且ER_ROW_IS_REFERENCED_2
显示出来,和以前一样。如果用户没有所有父表的表级权限,则会显示更一般的错误消息(
ER_NO_REFERENCED_ROW
和ER_ROW_IS_REFERENCED
)。
一个例外是,对于定义为以特权执行的存储程序
DEFINER
,评估特权的用户是程序DEFINER
子句中的用户,而不是调用用户。如果该用户具有表级父表权限,则仍会显示父表信息。在这种情况下,存储程序创建者有责任通过包含适当的条件处理程序来隐藏信息。(漏洞#19477611)
-
这些新
INFORMATION_SCHEMA
表可用作数据字典表的视图:VIEW_ROUTINE_USAGE
提供有关视图定义中使用的存储函数的信息。VIEW_TABLE_USAGE
提供有关视图定义中使用的表和视图的信息。
有关详细信息,请参阅 INFORMATION_SCHEMA VIEW_ROUTINE_USAGE 表和INFORMATION_SCHEMA VIEW_TABLE_USAGE 表。
-
不兼容的更改: 系统变量已被删除,之前配置的错误记录到系统日志(Windows 上的事件日志,以及
syslog
Unix 和类 Unix 系统)。在适当的情况下,删除的系统变量被log_sink_syseventlog
错误日志组件管理的新系统变量替换。下表显示了旧的和新的变量名称。旧系统变量 新系统变量 log_syslog_facility
syseventlog.facility
log_syslog_include_pid
syseventlog.include_pid
log_syslog_tag
syseventlog.tag
log_syslog
没有任何 重要的使用旧系统变量名称的安装必须更新其配置以使用新变量名称。有关详细信息,请参阅将错误记录到系统日志中。
参考资料:另请参阅:Bug #27534089。
一个新的系统变量, 指定当它们以或
log_error_suppression_list
的严重性出现时,哪些诊断不应写入错误日志 。例如,如果一种特定类型的警告频繁出现但并不重要(因此可能被认为是错误日志中不受欢迎 的“噪音”),现在可以将其抑制。WARNING
INFORMATION
-
重构了处理账户管理报表重写的代码,使其更易于维护和扩展。这项工作在审计、一般和慢速查询日志中产生了一些用户可见的小影响:
明文密码由
<string>
而不是 替换'<string>'
。除非用户指定,否则不写入默认子句。
以前,使用错误代码记录由多种内部服务器方法写入错误日志的消息
ER_LOG_PRINTF_MSG
。这些消息中的每一条现在都使用唯一的错误代码进行记录。
优化器现在支持 Skip Scan 访问方法,可以在以前不适用的情况下使用范围访问来提高查询性能。有关详细信息,请参阅跳过扫描范围访问方法。感谢 Facebook 提供此访问方法所基于的补丁。(漏洞 #26976512,漏洞 #88103)
MySQL 现在支持创建索引表达式值而不是列值的功能索引键部分。功能键部分可以索引无法以其他方式索引的值,例如
JSON
值。有关详细信息,请参阅CREATE INDEX 语句。针对单线程工作负载以及未 使用or等额外子句时,表查询的 性能得到了改进。
SELECT COUNT(*) FROM
tbl_name
InnoDB
WHERE
GROUP BY
libevent
与 MySQL 捆绑 的库已升级到版本 2.1.8。(错误#28207237、错误#29041505、错误#29055011)包含
curl
而不是链接到系统curl
库的二进制包现在使用curl
7.60.0 而不是 7.45.0。(漏洞 #28043702)Debian 包装已更新以反映 yaSSL 的删除,并且 OpenSSL 是所有构建的默认 SSL 库。(漏洞 #28025599)
测试插件已从服务器包移至测试包。(漏洞#27860172)
MySQL Router 现在包含在 MySQL 服务器源代码和整体二进制包中。
-
一个新的 Performance Schema 阶段,
waiting for handler commit
可用于检测通过事务提交的线程。感谢 Facebook 的补丁。(缺陷 #27855592,缺陷 #90417)参考资料:另请参阅:Bug #28950397。
Microsoft Windows: 在 Windows 上,MySQL Enterprise Edition 发行版现在捆绑了 Cyrus SASL 库文件
libsasl.dll
,saslSCRAM.dll
以便 LDAP 身份验证插件可以使用SCRAM-SHA-1
身份验证方法。
以前,MySQL 插件可以用 C 或 C++ 编写。插件使用的 MySQL 头文件现在包含 C++ 代码,这意味着插件必须用 C++ 而不是 C 编写。(Bug #87725,Bug #26781567)
-
MySQL 企业版现在提供数据屏蔽和去标识化功能,实现为包含插件和一组可加载函数的插件库。数据屏蔽通过用替代值替换实际值来隐藏敏感信息。MySQL Enterprise Data Masking 和 De-Identification 功能可以使用多种方法来屏蔽现有数据,例如混淆(删除识别特征)、格式化随机数据的生成以及数据替换或替换。例如:
mysql> SET @ssn = gen_rnd_ssn(); mysql> SET @masked_ssn1 = mask_ssn(@ssn); mysql> SET @masked_ssn2 = mask_outer(mask_inner (@ssn,4,5,'A'), 3,0,'B'); mysql> SELECT @ssn, @masked_ssn1, @masked_ssn2; +-------------+--------------+--------------+ | @ssn | @masked_ssn1 | @masked_ssn2 | +-------------+--------------+--------------+ | 980-31-2838 | XXX-XX-2838 | BBB-AA-2838 | +-------------+--------------+--------------+
有关详细信息,请参阅MySQL 企业数据屏蔽和去标识化。
-
不兼容的更改: 以前,
ST_Area()
仅支持具有笛卡尔空间参考系统 (SRS) 的几何参数,并且在使用指定地理 SRS 的几何参数调用时会产生错误。ST_Area()
现在支持具有地理 SRS 的几何参数并返回以平方米为单位的大地面积。笔记如果空间数据包含现在被不同解释的几何值
ST_Area()
,与以前的 MySQL 版本相比,使用此函数的现有查询将返回不同的结果。 -
语句中空间参考系统 (SRS) 定义的解析器
CREATE SPATIAL REFERENCE SYSTEM
现在在拒绝无效构造方面更加严格。OGC 01-009 WKT 语法不会在空间参考系统定义
AXIS
中强制使用子句。GEOGCS
但是,如果没有AXIS
子句,MySQL 无法确定定义中的轴是经纬度顺序还是经纬度顺序。MySQL 现在强制执行非标准要求,即每个GEOGCS
定义必须包含两个AXIS
子句。一个必须是NORTH
orSOUTH
,另一个EAST
orWEST
。AXIS
子句顺序确定定义中的轴是按纬度-经度顺序还是经度-纬度顺序。 (错误#28186073,错误#28147723) -
以前,
ST_Validate()
仅支持具有笛卡尔空间参考系统 (SRS) 的几何参数,并且在使用指定地理 SRS 的几何参数调用时会产生错误。ST_Validate()
现在支持具有地理 SRS 的几何参数。笔记如果空间数据包含现在被不同解释的几何值
ST_Validate()
,与以前的 MySQL 版本相比,使用此函数的现有查询将返回不同的结果。 MySQL 现在实现
ST_Transform()
空间函数,用于将几何值从一个空间参考系统 (SRS) 转换为另一个空间参考系统。目前支持地理SRS之间的转换。有关详细信息,请参阅 空间运算符函数。
-
不兼容的更改: 不推荐使用的
ASC
或子句DESC
限定符GROUP BY
以前依赖于GROUP BY
排序的查询可能会产生与以前的 MySQL 版本不同的结果。要生成给定的排序顺序,请提供一个ORDER BY
子句。MySQL 8.0.12 或更低版本中使用
ASC
或DESC
限定符的GROUP BY
子句的查询和存储程序定义应进行修改。否则,升级到 MySQL 8.0.13 或更高版本可能会失败,复制到 MySQL 8.0.13 或更高版本的从服务器可能会失败。
PREPARED
以前,当执行事务的客户端断开连接或服务器重新启动时,状态 中 XA 事务的元数据锁 可能会被删除。这可能会导致一些行为,例如一个会话能够删除另一个会话正在进行的 XA 事务使用的表。状态中 XA 事务的元数据锁PREPARED
现在在客户端断开连接和服务器重新启动时保持不变,直到 执行XA COMMIT
orXA ROLLBACK
。(缺陷 #22710164,缺陷 #79940)
重要变化: X 协议现在提供了一个连接池选项,它可以减少打开许多与 MySQL 服务器连接的应用程序的开销,例如小网页或 REST API 端点。使用 new
mysqlx.getClient(connection, options)
操作,它返回一个Client
对象。通过使用一个Client
对象,执行一个打开的会话操作从池中检索一个现有的和当前未使用的网络连接,重置它,并使用它。关闭会话将底层连接标记为未使用并将其返回给Client
对象的连接池。连接池是使用选项数据字典配置的,这意味着部署的应用程序可以通过简单地更改连接字符串来切换是否使用连接池。添加了互斥锁,以防止在打开和关闭大量会话时多个 X 插件客户端会话之间发生冲突。(缺陷号 28637947)
当 X 插件客户端尝试连接到 MySQL 服务器时,指定的数据库在服务器上不存在,错误消息表明访问被拒绝而不是数据库未知。现在返回正确的错误消息。(漏洞 #28110957)
X 插件对整数值的错误复制导致了与未对齐内存访问相关的错误。该问题现已解决。(缺陷 #28070946,缺陷 #90983)
现在 X 插件已默认加载并启用,错误日志的默认详细设置意味着看不到任何消息表明 X 插件在 MySQL 服务器上可用。现在在系统启动期间会发出一条消息,以确认已加载 X 插件。(缺陷号 27287340)
X 协议现在提供了向感兴趣的客户端广播信息的能力,而无需请求信息。此外,还广播了与 Group Replication 相关的更改。作为这项工作的一部分,添加了
Mysqlx_notified_by_group_replication
和Mysqlx_notice_global_sent
状态变量。
-
重要变更;新开发银行集群;NDB 客户端程序:删除了perror 的弃用
--ndb
选项 。改为使用ndb_perror从 错误代码中获取错误消息信息(缺陷 #81705,缺陷 #23523957)NDB
参考资料:另请参阅:Bug #81704、Bug #23523926。
-
InnoDB: 系统
innodb_fsync_threshold
变量允许定义一个阈值,以字节为单位,用于将数据从操作系统缓存刷新到磁盘。默认情况下,当InnoDB
创建一个新的数据文件,例如一个新的日志文件或表空间文件时,该文件在刷新到磁盘之前会被完全写入操作系统缓存,这会导致大量的磁盘写入活动发生在一次。在多个 MySQL 实例使用相同存储设备的情况下,指定一个阈值以强制进行更小的定期刷新可能是有益的。例如,创建一个新的 MySQL 实例及其关联的数据文件可能会导致磁盘写入活动激增,从而影响使用相同存储设备的其他 MySQL 实例的性能。配置阈值有助于避免写入活动出现此类激增。(缺陷号 27724600)
-
InnoDB: 用户创建的临时表和优化器创建的内部临时表现在存储在会话临时表空间中,这些临时表空间是从临时表空间池中分配给会话的。当会话断开连接时,其临时表空间将被截断并释放回池中。在以前的版本中,临时表是在全局临时表空间 (
ibtmp1
) 中创建的,临时表被删除后不会将磁盘空间返回给操作系统。该
innodb_temp_tablespaces_dir
变量定义创建会话临时表空间的位置。默认位置是#innodb_temp
数据目录中的目录。该
INNODB_SESSION_TEMP_TABLESPACES
表提供有关会话临时表空间的元数据。全局临时表空间 (
ibtmp1
) 现在存储回滚段,用于对用户创建的临时表所做的更改。 -
InnoDB:静态 数据
InnoDB
加密功能现在支持通用表空间。以前,只能加密 file-per-table 表空间。为了支持通用表空间的加密,CREATE TABLESPACE
语法ALTER TABLESPACE
被扩展为包含一个ENCRYPTION
子句。该 表现在
INFORMATION_SCHEMA.INNODB_TABLESPACES
包含一个ENCRYPTION
列,指示表空间是否已加密。添加了
stage/innodb/alter tablespace (encryption)
Performance Schema 阶段工具以允许监视一般表空间加密操作。 -
复制: 您现在可以随时检查和配置一个组的最大共识实例数。这个最大值被称为一个组的事件范围,是系统可以并行执行的共识实例的最大数量。这使您能够微调组复制部署的性能。
要在运行时检查组的事件范围值,请发出:
SELECT group_replication_get_write_concurrency()
要设置写入共识实例的最大数量,请发出:
SELECT group_replication_set_write_concurrency(instances);
其中
instances
是用于达成共识的新的最大实例数。有关更多信息,请参阅使用组复制组写入共识 。(漏洞#27260096)
-
复制: 您现在可以在组运行时对其配置进行更改,而无需停止所有成员进行更改。此功能依赖于随此版本插件安装的可加载功能,并且组的所有成员都必须安装这些功能。要使用这些功能,请连接到在线会员并发出
SELECT
function_name
;使用该
group_replication_set_as_primary()
函数触发特定成员的选举作为单一主要组中的新主要成员,覆盖通常的选举过程。有关详细信息,请参阅 更改组的主要成员。此外,您可以配置群组在线时使用的模式,在单主模式和多主模式之间切换。要更改在线群组的模式,请选择以下选项之一:
用于
group_replication_switch_to_single_primary_mode()
将以多主模式运行的组更改为单主模式。用于
group_replication_switch_to_multi_primary_mode()
将以单主模式运行的组更改为多主模式。
有关详细信息,请参阅更改组的模式。
复制:已添加 该
group_replication_member_expel_timeout
选项以定义组在将成员从组中驱逐之前应等待无响应成员的时间段。这使您能够在与成员的连接不可靠时配置逐出过程。Solaris: 在 Solaris 上,现在可以使用 Developer Studio 12.6 构建 MySQL。(错误#27055190、错误#88316、错误#28165246、错误#91214)
数据截断测试被重写以避免未定义的行为。(缺陷 #28255956,缺陷 #91445)
改进了浮点值的超出范围检查。(漏洞#28225635)
服务器在启动过程中运行的升级检查现在验证分区
InnoDB
表不使用共享表空间。(漏洞 #28204431)以前,在库的 I/O 缓存中执行的文件 I/O
mysys
没有被检测,特别影响性能模式报告的关于二进制日志索引文件的文件 I/O 统计信息。现在,此 I/O 已检测并且性能模式统计信息是准确的。感谢 Yura Sorokin 的贡献。(缺陷 #27788907,缺陷 #90264)在内存中权限结构中定位用户帐户条目的性能已得到改进。感谢 Eric Herman 的贡献。(缺陷 #27772506,缺陷 #90244)
如果mysqld --initialize未能完成但创建了一个不可用的数据目录,它现在会显示一条消息,指出该数据目录不可用并且可以安全地删除。(漏洞#27675647)
-
Performance Schema 中现在提供了 Instrumentation,用于在单线程或多线程从站上由各个应用程序线程进行事务重试。以前,Performance Schema 表
replication_applier_status_by_worker
显示有关停止应用程序线程的错误的信息,但不显示有关最终应用事务之前发生的瞬态错误的信息。使用此信息,您可以识别导致复制从属或组复制组成员复制滞后的暂时性错误。Performance Schema 表中添加了八个新列
replication_applier_status_by_worker
:LAST_APPLIED_TRANSACTION_RETRIES_COUNT
- 工人在第一次尝试后重试最后应用事务的次数。如果交易是在第一次尝试时应用的,则此数字为零。LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER
- 导致重试事务的最后一个暂时性错误的错误号。LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE
- 导致重试事务的最后一个暂时性错误的消息文本。LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP
-导致重试事务的最后一个瞬态错误 的时间戳格式。'
YYYY-MM-DD hh:mm:ss
[.fraction
]'APPLYING_TRANSACTION_RETRIES_COUNT
- 直到此时重试当前正在应用的事务的次数。如果交易是在第一次尝试时应用的,则此数字为零。APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER
- 导致重试当前事务的最后一个暂时性错误的错误号。APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE
- 导致重试当前事务的最后一个暂时性错误的消息文本。APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP
-导致重试当前事务的最后一个瞬态错误 的时间戳格式。'
YYYY-MM-DD hh:mm:ss
[.fraction
]'
APPLYING_TRANSACTION_START_APPLY_TIMESTAMP
每次重试事务时不再重置 现有列 。它现在保留了工作人员第一次尝试应用交易的时间戳。 -
以前,在使用 GTID(即 系统变量设置为)时,事务、过程、函数或触发器内部不支持
CREATE TEMPORARY TABLE
and 语句。可以在启用 GTID 的情况下使用这些语句,但只能在任何事务之外,并且只能与.DROP TEMPORARY TABLE
enforce_gtid_consistency
ON
autocommit=1
binlog_format
从 MySQL 8.0.13 开始,当设置为ROW
或 时,此限制已被删除MIXED
。使用基于行的日志记录,现在可以在启用 GTID 时在事务、过程、函数或触发器中使用CREATE TEMPORARY TABLE
语句DROP TEMPORARY TABLE
。当binlog_format
设置为STATEMENT
时,限制仍然存在。由于这种行为差异,一些额外的限制现在适用于binlog_format
在运行时更改设置:如果会话有打开的临时表,则不能更改会话的复制格式 (
SET @@SESSION.binlog_format
)。如果任何复制通道有打开的临时表,则不能全局更改复制格式(
SET @@GLOBAL.binlog_format
或SET @@PERSIST.binlog_format
)。如果任何复制通道应用程序线程当前正在运行,则无法全局更改复制格式(
SET @@GLOBAL.binlog_format
或SET @@PERSIST.binlog_format
)。
在任何这些情况下尝试切换复制格式(或尝试设置当前复制格式)都会导致错误。但是,您可以随时使用
PERSIST_ONLY
(SET @@PERSIST_ONLY.binlog_format
) 更改复制格式,因为此操作不会修改运行时全局系统变量值,并且仅在服务器重启后生效。当
binlog_format
设置为ROW
orMIXED
时,CREATE TEMPORARY TABLE
语句DROP TEMPORARY TABLE
不会写入二进制日志,因此不会复制到从站。当它们在事务中使用时,如果从事务中删除这些语句导致事务为空,则事务不会写入二进制日志。如果回滚涉及这些语句的事务,则会发出一条警告消息,指出无法回滚临时表的创建或删除。 -
用于二进制日志记录的 MySQL 服务器代码已被重构,以创建新的内部接口来访问二进制日志和中继日志中的事件。新接口将二进制日志的写入和读取过程分离为输入和输出流,并将捕获和检索二进制日志事件的过程与将它们写入文件的过程分离。逻辑二进制日志文件用于包装存储层操作。
新的内部接口使 MySQL Server 可以使用标准二进制日志或中继日志文件之外的替代存储方法来存储二进制日志事件,包括二进制日志缓存或内存缓冲区。例如,Group Replication 使用新接口将事件直接序列化到内存缓冲区和事务消息,以便协调组中的事务。mysqlbinlog现在也使用它们从标准输入读取二进制日志事件。
由于新的内部接口,以下现有错误消息现已标记为已过时:
ER_BINLOG_CANT_OPEN_LOG
ER_BINLOG_CANT_CREATE_CACHE_FOR_LOG
ER_BINLOG_ERROR_GETTING_NEXT_LOG_FROM_INDEX
ER_RPL_RECOVERY_ERROR_FREEING_IO_CACHE
ER_GRP_RPL_REINIT_OF_INTERNAL_CACHE_FOR_READ_FAILED
ER_GRP_RPL_APPENDING_DATA_TO_INTERNAL_CACHE_FAILED
ER_GRP_RPL_REINIT_OF_INTERNAL_CACHE_FOR_WRITE_FAILED
ER_GRP_RPL_FAILED_TO_CREATE_COMMIT_CACHE
ER_GRP_RPL_REINIT_OF_COMMIT_CACHE_FOR_WRITE_FAILED
TempTable
存储引擎现在支持二进制大对象 (BLOB) 类型列 的存储。此增强功能提高了使用包含 BLOB 数据的临时表的查询的性能。以前,包含 BLOB 数据的临时表存储在由internal_tmp_disk_storage_engine
.用于二进制日志事件反序列化的 MySQL 服务器代码已被重构,以改进在复制期间以及在使用mysqlbinlog处理期间对损坏和无效事件数据的识别和弹性处理,无论是否在服务器上使用二进制日志校验和。
以前,执行
RENAME TABLE
要求没有用 锁定的表LOCK TABLES
。现在可以重命名被锁锁定的表,或者重命名从多表重命名操作的早期步骤中 锁定的表WRITE
的产物 。WRITE
创新数据库;分区: 删除
InnoDB
了引用.frm
文件的旧处理程序和分区代码,因此不再有任何用途。(漏洞#27995316)InnoDB:在操作 期间提出了断言
DROP TABLE
。通过 memcached API 访问表的线程在释放表之前释放了元数据锁。(漏洞#28531148)InnoDB:设置了 LOB 引用中 的
being_modified
位,但未记录位修改,导致断言失败。(缺陷号 28443837)InnoDB:
InnoDB
当优化器使用内部临时表的存储引擎 时,窗口函数返回不正确的结果(缺陷号 28430650)InnoDB: 将服务器时间调整为较早的时间会导致错过定期重做刷新。(漏洞 #28430358,漏洞 #90670)
-
InnoDB:添加主键 的
ALTER TABLE
操作产生了分段错误。(漏洞#28395278)参考:这个问题是 Bug #27753193 的回归。
InnoDB: 通过删除
ReadView::complete()
函数并将其工作拆分到其他函数中,删除了条件检查。此更改有助于优化 ARM 64 位的性能。(缺陷 #28385211,缺陷 #91759)InnoDB:
thread_mutex
从InnoDB
源代码文件 剩余(缺陷 #28363673,缺陷 #91678)InnoDB: 实施了类型更改以消除使用 Microsoft Visual Studio 2017 进行编译时出现的警告
InnoDB
。(错误号 28338720)InnoDB: 当用于标记共享索引锁的 B 树标志用于标记共享独占索引锁时,引发了无效断言。(漏洞#28317172)
-
InnoDB: 在为当前可用的 LSN 请求检查点时,尖锐的检查点机制不再强制预刷新脏页。
日志检查点线程现在在确定是否需要下一个检查点写入以及是否唤醒页面清理器以强制同步刷新脏页时考虑并发裕度(日志中可用空间的每个线程裕度)。页面清理器线程在确定是否刷新脏页以及刷新多少页时会考虑并发余量。(缺陷号 28297462)
InnoDB: 错位的调试崩溃点导致事务超时导致测试失败。(缺陷号 28295814)
InnoDB:
InnoDB
修改了错误消息格式以删除重复文本。(缺陷号 28289789)InnoDB: 释放和分配内存的不必要循环导致 Windows 上的 JSON 性能下降。(缺陷号 28278737)
InnoDB:
InnoDB
错误地允许使用就地ALTER TABLE
语句删除外键约束中使用的索引。此操作现在在 SQL 层被阻止。(缺陷号 28268875)InnoDB: 为了避免每次计算硬件优化校验和时都检查硬件支持,断言被转换为仅调试断言。(缺陷 #28267334,缺陷 #91485)
-
InnoDB: 一个将竞争感知事务调度 (CATS) 与释放读取锁的功能相结合的补丁导致间隙锁被删除,而没有向等待的事务授予锁,从而导致事务超时。(漏洞 #28261530)
参考:这个问题是 Bug #28261530 的回归。
InnoDB: 当
log_checkpointer
redo量较小时,线程未能及时写入新的checkpoints。(缺陷号 28220222)InnoDB: 服务器在从 MySQL 5.7 就地升级到 MySQL 8.0 期间由于试图从缓存中驱逐与外键相关的表而退出。在升级过程结束时,带有
FULLTEXT
索引的表被标记为准备好逐出,而不检查外键关系。(缺陷 #28212734,缺陷 #91325)-
InnoDB:修改 了以下性能模式和
INFORMATION_SCHEMA
表列的格式:以前的格式
trx_id:table_id
用于表锁和trx_id:space_id:page_no:heap_no
记录锁。新格式trx_immutable_id:table_id:lock_immutable_id
用于表锁和trx_immutable_id:space_id:page_no:heap_no:lock_immutable_id
记录锁。lock_immutable_id
和trx_immutable_id
是 64 位值,它们分别在锁或事务的生命周期内不会改变,并且在其他实例对象 ID 中是唯一的。(错误号 28176910) InnoDB:
LOCK_MODE
Performance Schema 表的列 使用的允许锁定模式描述符data_locks
列表已扩展为包括REC_NOT_GAP
、INSERT_INTENTION
、PREDICATE
和PRDT_PAGE
。REC_NOT_GAP
表示只记录锁。INSERT_INTENTION
指示插入意向锁。PREDICATE
和PRDT_PAGE
描述符表示空间索引锁。(缺陷号 28176805)InnoDB: 在设置为 的 macOS 上,表名未以小写形式进行比较
lower_case_table_names=2
,导致重启服务器后不稳定。(漏洞 #28170699,漏洞 #91204)InnoDB: 用于在源代码中定义常量值的宏
InnoDB
已更改为常量表达式。(漏洞 #28152926)InnoDB: 现在提前设置了一个防止事务在提交期间回滚的标志,以防止高优先级事务可能中止正在提交的事务的情况。(缺陷号 28140462)
InnoDB: 扫描表主键的查询未返回预期结果。(缺陷 #28104394,缺陷 #91032)
InnoDB: 从
InnoDB
源代码文件中删除了不必要的头文件包含。(缺陷号 28086759)InnoDB: 由于日志写入器用完重做日志中的可用空间而导致服务器退出的明显挂起。(缺陷 #28072385,缺陷 #90993)
InnoDB: 锁定等待期间的查询中断导致错误。(缺陷号 28068293)
InnoDB: 从 MySQL 5.7 升级到 MySQL 8.0 后,无效警告表示撤消表空间 ID 不在撤消表空间范围内。如果 MySQL 5.7 安装配置为使用单独的撤消表空间,则会出现警告。(缺陷号 28060337)
InnoDB: 针对不完整的克隆数据目录上的启动失败改进了错误消息。(漏洞 #28032131)
InnoDB:操作 期间发生分段错误
XA COMMIT
。(漏洞#27995891)InnoDB: 未使用的代码已从 TempTable 存储引擎源代码中删除。(漏洞#27978968)
InnoDB: 更新在生成列上定义的二级索引时找不到索引记录。(漏洞#27968952)
-
InnoDB: IF 条件中的伪否定运算符导致竞争感知事务调度 (CATS) 算法用于表锁。(漏洞#27944920)
参考资料:此问题是 Bug #27572937 的回归。
InnoDB: 作为联机
ALTER TABLE
操作的一部分应用的更新日志在更新二级索引时未考虑旧行中生成列的计算值。(漏洞#27921932)InnoDB: 缓冲池内存分配未在 Performance Schema
memory/innodb/buf_buf_pool
统计信息中完全考虑。(缺陷 #27917595,缺陷 #90561)InnoDB: 涉及外键约束的不受支持的 DDL 操作引发了断言。(漏洞#27912873)
InnoDB: 当多个锁匹配搜索条件时引发与锁相关的调试断言失败,这可能导致释放错误的锁。(漏洞#27898384)
InnoDB: 在在线操作的准备阶段删除中止索引的函数
ALTER TABLE
未记录其更改。(漏洞#27879325)InnoDB: 在 MySQL 5.7 中创建的通用表空间没有分配的表导致升级到 MySQL 8.0 时失败。(漏洞#27877485)
InnoDB: 并发撤消表空间截断和主密钥轮换操作引发了断言。(漏洞#27872369)
InnoDB: 标识事务是否持有互斥锁的布尔标记未放置在正确的位置。(漏洞 #27870035)
InnoDB: 尝试对丢弃的表进行外键检查导致分段错误。(漏洞#27804668)
InnoDB: B 树批量加载操作可能会使页面处于部分初始化状态。(漏洞#27802098)
InnoDB: 在支持 NUMA 的操作系统上启动 Docker 容器内的服务器会引发“ mbind:不允许操作”错误。(漏洞#27792853)
InnoDB:
TABLE_ID
存储在数据字典中存储引擎私有数据字段中的 分区表ALTER TABLE ... PARTITION
操作后未正确调整。(漏洞#27784462)InnoDB: 服务器因“日志编写器在检查点后覆盖数据 - 等待太久”错误而停止。(漏洞#27779266)
InnoDB: 使用
innodb_flush_log_at_trx_commit=2
,log_flusher
线程可能会等待超时时间等于innodb_flush_log_at_timeout
设置的事件,从而导致初始化延迟。(漏洞#27762596)InnoDB:在操作 期间提出了断言
OPTIMIZE TABLE
。(漏洞#27753193)InnoDB: 由于死锁导致的事务回滚导致调试版本中的断言失败。在事务回滚期间,预计不会启动用于访问数据字典的可附加事务。(漏洞#27729974)
InnoDB:启用二进制日志记录后, 在
innodb_flush_log_at_trx_commit=0
DDL 操作的提交阶段未按预期刷新重做日志。(漏洞 #27691035)InnoDB: 使用
REDUNDANT
orCOMPRESSED
行格式和READ COMMITTED
隔离级别,仅返回 LOB 值前缀和可能旧 LOB 值的外部部分,这可能导致 JSON 文档被视为已损坏。如果没有 LOB 值前缀,则可能会返回带有其他字段新值的旧 LOB 值,从而导致数据不一致。(漏洞#27624990)InnoDB: 在定期检查点所有权从主线程移动到日志检查点线程后,允许暂停定期检查点的调试选项变得过时。调试选项被另一种暂停定期检查点的方法所取代。(缺陷号 27588328)
InnoDB: 具有在具有空间引用标识符 (SRID) 的列上定义的空间索引的表上的事务能够插入到另一个事务选择更新的区域中。(漏洞#27577612)
InnoDB: 在重命名表操作期间重复了外键约束名称,导致稍后执行查询失败。(漏洞#27545888)
InnoDB: 序列化字典信息 (SDI) 删除失败引发断言。(漏洞#27493634)
InnoDB: 在 LOB 清除或回滚期间释放大对象 (LOB) 索引条目后发生服务器退出。(漏洞#27419474)
InnoDB: 在存储过程中执行语句之前调用的函数中,对其的读写操作
trx->lock.start_stmt
不受互斥锁保护。(漏洞#27325898)InnoDB: 和
INFORMATION_SCHEMA.FILES
表INFORMATION_SCHEMA.INNODB_TABLESPACES
没有显示 MySQL 实例中存在的实际撤消表空间。只显示了两个默认的撤消表空间。(缺陷号 26820406)InnoDB:
REDUNDANT
由于确定在线日志长度的行格式计算 不匹配,在 DDL 操作期间发生错误 (缺陷号 26375771)InnoDB: 启用
innodb_undo_log_truncate
对事务处理性能产生负面影响。在撤消表空间截断操作期间不再执行两个检查点,属于表空间文件的页面现在从磁盘中刷新。(漏洞#26322656)-
InnoDB: 当同一行有多个版本时,引入了一个辅助类来提高与从辅助键读取相关的性能。
感谢 Domas Mituzas 的贡献。(漏洞 #25540277,漏洞 #84958)
InnoDB:
wait/io/file/innodb/innodb_temp_file
性能模式工具 报告的 Innodb 合并临时文件的位置 (缺陷 #21339079,缺陷 #77519)-
分区: 当
CREATE TABLE ... PARTITION BY ...
语句由于无效的分区定义而失败时,服务器不会删除任何可能在遇到无效PARTITION
子句之前创建的分区文件。(漏洞#27798708)参考资料:另请参阅:Bug #88043、Bug #26945644。
-
分区: 可以 在丢弃表空间后
FLUSH TABLES FOR EXPORT
对创建的分区表innodb_file_per_table=1
现在尝试这样做会引发ER_TABLESPACE_DISCARDED
. (缺陷 #90545,缺陷 #27903881)参考资料:另请参阅:Bug #80669、Bug #22899690。
分区:
InnoDB
对分区表 的更新强加了一个无关的行锁 (漏洞 #87253,漏洞 #26553164)复制: 当复制从站通过
START SLAVE
语句重新启动时,性能模式表中replication_applier_status_by_worker
开始APPLYING_TRANSACTION
现在在以单线程模式运行的从站上重置。这些列总是在多线程从站上重置,因为现有的工作线程被语句终止,信息无法保留。通过重置单线程从站的列,现在已经在从站配置中标准化了该行为。(缺陷号 28248026)Replication: 如果一个多线程的replication slave被停止,改为单线程的slave(通过设置
slave_parallel_workers > 0
),然后重启,Performance Schema表replication_applier_status_by_worker
显示不相关的时间戳,因为旧的监控信息没有被清除。(漏洞 #28191382)-
Replication: 当
binlog_group_commit_sync_delay
系统变量设置为延迟事务同步到磁盘的等待时间,并且binlog_group_commit_sync_no_delay_count
系统变量也设置为事务数时,如果在执行前达到指定的事务数,则MySQL服务器退出等待过程达到指定的等待时间。服务器通过在 指定的时间的十分之一过去后检查事务计数binlog_group_commit_sync_delay
,然后从剩余等待时间中减去该时间间隔来管理此过程。如果在计算 delta 期间四舍五入意味着等待时间不是 delta 的倍数,则从剩余等待时间中减去 delta 的最终值将导致该值为负,因此回绕到最大等待时间,使得提交挂起。剩余等待时间的数据类型现已更改,因此在这种情况下该值不会换行,并且在原始等待时间结束后可以继续提交。感谢炎黄的贡献。(缺陷 #28091735,缺陷 #91055)
复制: 在调试版本中,断言失败,因为 MySQL 现在有超过 255 个排序规则可用。(漏洞 #28015761)
Replication: 由于MySQL服务器记录了GTID一致性违规,但在相关语句执行失败后没有删除该记录,因此在调试构建中引发了断言。现在改进了这种情况的处理,以确保服务器在事务结束时检查失败的语句是否产生了 GTID 一致性违规,如果是这种情况,则恢复以前的 GTID 一致性状态。(缺陷 #27903831,缺陷 #90551)
-
复制: 使用 GTID 进行复制时,包含导致解析错误 (
ER_PARSE_ERROR
) 的语句的事务无法通过注入具有相同 GTID 的空事务或替换事务的推荐方法手动跳过。此操作应导致从设备将 GTID 识别为已使用,并因此跳过共享其 GTID 的不需要的事务。但是,在解析错误的情况下,由于语句在检查 GTID 以查看是否需要跳过之前已被解析,因此复制应用程序线程由于解析错误而停止,即使本意是要将事务反正跳过了。通过此修复,如果由于已使用 GTID 而需要跳过相关事务,复制应用程序线程现在会忽略解析错误。请注意,此行为更改不适用于由mysqlbinlog生成的二进制日志输出组成的工作负载。在这种情况下,将存在这样的风险,即在应该引发错误时,紧跟在已跳过事务之后的解析错误的事务也会被静默跳过。(缺陷号 27638268)
复制: 当
RESET SLAVE
在使用 GTID 的复制从站上发出一条语句时,现有的中继日志文件被清除,但是在清除通道的接收到的 GTID 集之前生成了替换的新中继日志文件。因此,以前的 GTID 集作为事件写入新的中继日志文件PREVIOUS_GTIDS
,导致复制中出现致命错误,指出从服务器的 GTID 多于主服务器,即使gtid_executed
两个服务器的集都是空的。现在,当RESET SLAVE
发出时,在生成新的中继日志文件之前清除接收到的 GTID 集合,这样就不会出现这种情况。(漏洞#27636289)复制: 半同步复制的 master 接收线程在从 slave 读取确认时持有一个互斥锁,但需要相同的互斥锁来添加或删除半同步从属,导致这些操作被确认活动延迟。该问题现在已通过不获取互斥锁来读取从属设备的确认来解决。(漏洞 #27610678,漏洞 #89370)
复制: 在复制从属报告的代码中,一种罕见的错误情况在调试版本中引发了断言,但在发布版本中,返回并锁定了互斥锁。在这种情况下返回之前互斥体现在被解锁。感谢 Zsolt Parragi 提供的补丁。(漏洞 #27448019,漏洞 #89421)
复制: 中继日志信息日志(
slave_relay_log_info
表)中针对组复制特定通道的group_replication_applier
,group_replication_recovery
未被RESET SLAVE
orRESET SLAVE ALL
命令清除。(漏洞#27411175)复制: 按照系统变量的指定,自动重试复制从站上的事务,
slave_transaction_retries
即使事务有一个非临时错误会在重试时重复或表明更广泛的问题。现在,只有在没有错误或只是暂时的错误时才会自动重试事务。(缺陷 #27373559,缺陷 #89143)复制: 当
FLUSH
针对特定日志类型(例如FLUSH SLOW LOGS
)的语句导致错误时,语句仍然写入二进制日志。这停止了复制,因为错误发生在主服务器上,但没有发生在从服务器上。MySQL 服务器现在检查这些FLUSH
语句的结果,如果发生错误,语句不会写入二进制日志。(漏洞 #24786290,漏洞 #83232)复制:
PASSWORD()
生成密码哈希的函数在 MySQL 5.7 中已弃用,并在 MySQL 8.0 中删除 。当SET PASSWORD
使用此函数的语句从 MySQL 5.6 master 复制到 MySQL 5.7 slave,或者从log_builtin_as_identified_by_password
系统变量设置为 ON 的 MySQL 5.7 master 复制到 MySQL 5.7 slave 时,密码哈希本身也会在存储之前进行哈希处理奴隶。这个问题现在已经解决了,复制的密码散列被存储为最初传递给从属的。(漏洞#24687073)复制: 如果一个
ORDER BY
子句用于从某些与复制相关的性能模式表中检索记录,则返回一个空集。该问题现已解决。(缺陷 #22958077,缺陷 #80777)复制: 当复制通道在从属服务器上用于多源复制时,
START SLAVE
未指定单个通道的语句(因此没有FOR CHANNEL
子句)应该为复制上的所有通道启动 I/O 线程和 SQL 线程奴隶。但是,如果RESET SLAVE
在这样的从站上使用语句,则后续START SLAVE
语句不会启动非默认通道。RESET SLAVE
现在,由于语句而不是由于初始化过程中的错误而的复制通道将START SLAVE
适用于所有通道的语句重新启动。(漏洞 #22809607)-
Replication:在replication slave上 发布
RESET SLAVE
不会改变master主机、master端口、master用户或master密码等任何复制连接参数,这些参数保留在内存中。但是,如果您发出 ,这些连接参数将被重置RESET SLAVE ALL
。以前,如果从 服务器mysqld在发出后立即重新启动RESET SLAVE
(包括服务器崩溃以及故意重新启动),连接参数将被重置,就像RESET SLAVE ALL
已经使用过一样。现在,当
master_info_repository=TABLE
在服务器上设置时(这是 MySQL 8.0 的默认设置),复制连接参数作为操作的一部分 保留在崩溃安全InnoDB
表 中。它们也保留在内存中。如果在发出之后但发出之前发生服务器崩溃或故意重启,则会从表中检索复制连接参数并将其重新用于新连接。mysql.slave_master_info
RESET SLAVE
RESET SLAVE
START SLAVE
如果
master_info_repository=FILE
在服务器上设置(这是 MySQL 5.7 中的默认设置),复制连接参数仅保留在内存中,因此行为与以前相同。如果slave mysqld由于服务器崩溃而重启,或者发出后立即故意重启RESET SLAVE
,连接参数丢失。在那种情况下,您必须CHANGE MASTER TO
在服务器启动后发出一条语句,以便在发出之前重新指定连接参数START SLAVE
。如果你想故意重置连接参数,你需要使用
RESET SLAVE ALL
,它会清除连接参数。在那种情况下,您必须在服务器启动后发出CHANGE MASTER TO
声明以指定新的连接参数。(缺陷号 20280946) Replication: 当一个组成员在暂停一段时间后恢复并且无法处理所有未决消息时,它进入该
ERROR
状态。但是,其余成员将其视为UNREACHABLE
,等到该成员的嫌疑期满再将其逐出群。该行为现在已被修改,并且由于某些错误而停止的成员尝试连接到已知对等点以请求将其从组中删除,然后再安装离开视图。(缺陷 #91433,缺陷 #28252687)复制: 如果 Group Replication 在服务器上启动时带有无效
group_replication_group_name
的 ,则服务器会意外停止。(缺陷 #91347,缺陷 #28219136)复制:减少 了与未使用函数相关的编译警告
xdr_utils
。感谢 Zsolt Parragi 提供的补丁。(缺陷 #91071,缺陷 #28099963)复制: 如果在
group_replication_recovery_retry_count
成员已经进行重新连接尝试时修改了变量,则连接尝试可能会进入无限循环。(缺陷 #91057,缺陷 #28092714)-
复制: 该
group_replication_exit_state_action
变量使您能够指定在成员非自愿离开组时采取的操作,但是在启动group_replication_start_on_boot
启用了该group_replication_exit_state_action
,在以下情况下该变量将被忽略:超过有效组成员数
成员系统变量的不兼容配置(各种)
加入成员的交易量多于群组
加入成员的版本与组不兼容
(缺陷 #90494,缺陷 #27881311)
复制: 当
group_replication_group_seeds
包含解析为自己的本地地址的基于 DNS 的条目时,组复制无法启动。(错误#90483、错误#27882096、错误#28074929)复制: 发出
START GROUP_REPLICATION
然后强行停止mysqld
进程,例如使用control-C,可能会导致服务器意外停止。(缺陷 #90457,缺陷 #27873419)Microsoft Windows: An error now is written to the server log when the presence of the
NO_AUTO_CREATE_USER
value for thesql_mode
option in the options file prevents a MySQL 8.0 server from starting. (缺陷 #28061945,缺陷 #90967)Microsoft Windows: 在 Windows 上,通过 MySQL Installer 卸载 MySQL Server MSI 包会产生一个虚假的弹出窗口。(漏洞#27463864)
Microsoft Windows: 在 Windows 上,
DBUG_ABORT
没有打印自定义堆栈跟踪和其他信息。(缺陷号 21383530)Microsoft Windows: 使用 service-installation 命令将 MySQL 作为 Windows 服务启动,该命令在选项后指定了服务名称,or
--install
的命名服务组中的指令, 而是使用默认选项。只有默认服务名称 (, ,, ) 可以从选项文件加载不同的参数。(缺陷 #90383,缺陷 #27852209)my.ini
my.cnf
mysqld
mysql_cluster
server
mysqld-8.0
JSON:
JSON_TABLE()
即使在生成列的表达式中不允许使用子查询、参数、变量、存储函数和可加载函数, 服务器也不会拒绝创建具有生成列的表,其中生成列使用 服务器现在更积极地检查以确保JSON_TABLE()
拒绝在此类表达式中使用任何不允许的构造(包括 )。(漏洞 #28518485)-
JSON: 有时会因 MySQL 以外的用户的权限错误而失败。当此类查询用作视图的基础并且 从视图失败时,也可能会发生此问题。(错误#28255453,错误#27923406)
SELECT
... FROM
JSON_TABLE()
root
SELECT
参考资料:另请参阅:Bug #27189940。
JSON:
JSON_TABLE()
函数对大于或等于 2 31 的进行回绕。例如,查询SELECT id FROM JSON_TABLE('[{"id":"2147483648"}]', '$[*]' COLUMNS (id BIGINT UNSIGNED PATH '$.id')) AS json
返回-2147483648
。(缺陷号 27856835)JSON: 在某些情况下,该
NULLIF()
函数将其第一个参数作为布尔值而不是其实际类型返回。当此函数的结果用作JSON_ARRAYAGG()
or 在以类似方式使用的JSON_OBJECTAGG()
其他情况下可能会发生这种情况NULLIF()
(缺陷 #90833,缺陷 #28007237)JSON:将包含二进制数据 的
JSON
文档转换为 base-64 编码文本进行显示时,编码字符串中的换行符未正确转义,因此无法将文本表示形式解析为JSON
,从而被截断、损坏或两个都。现在 MySQL 确保编码字符串中的任何换行符都被转义。(漏洞 #90503,漏洞 #27891359)filesort
操作可能导致服务器退出。(缺陷 #28791531,缺陷 #92777)Debian 打包现在支持 Ubuntu 18.10 (Cosmic Cuttlefish)。(漏洞#28765706)
在 Fedora 29 平台上,OpenSSL 1.0.x 用于构建包,因为 OpenSSL 1.1.1 支持尚未准备好。如果您从源代码构建 MySQL,建议您使用
compat-openssl10-devel
包构建。(漏洞#28737143)在 Fedora 29 平台上,从 MariaDB 升级到 MySQL 8.0.13 失败,原因是缺少过时版本。(漏洞#28727698)
SLES 12 的 MySQL 二进制发行版现在是使用 GCC 7 构建的。该平台上支持的最低 GCC 版本现在是 5.3(以前是 4.8.5)。(漏洞 #28542723)
尝试在子查询上添加功能索引应该是不可能的,并且会导致服务器在尝试解析索引表达式时命中断言。现在在这种情况下,不允许使用该表达式,并且服务器会返回相应的错误消息。(漏洞#28526493)
在使用指数执行计算时添加了范围检查。(漏洞 #28505423)
CMAKE -DWITHOUT_SERVER=1
导致构建错误。(漏洞 #28501563,漏洞 #92011)当指定长度为 8 字节的前缀索引时,
Sub_part
输出中的SHOW INDEXES
列为NULL
. (缺陷号 28499603)GCC 8 的编译失败,MySQL 配置为使用某些系统库。(漏洞 #28471072,漏洞 #91914)
对于调试版本,如果服务器引导阶段失败,则缺少清理代码会导致引发断言。(漏洞 #28435378,漏洞 #91847)
MySQL 构建中的数字范围在 ARM 和 Intel x64 平台之间可能不同。(漏洞 #28401869)
对于mysqldump --tables输出,文件名现在总是包含一个
.txt
或.sql
后缀,即使对于已经包含一个点的文件名也是如此。感谢 Facebook 的贡献。(缺陷 #28380961,缺陷 #91745)在 SLES 15 上,由于
obsoletes
信息不正确,从 MariaDB 包升级到 MySQL 包失败。(漏洞#28292138)数据字典自动释放器现在为数据字典对象类型动态分配映射。此外,还为用于大小计算和对象移除的列统计和资源组添加了映射,并为
ANALYZE TABLE
操作添加了自动释放器。(漏洞 #28245522,漏洞 #91420)-
混合不同字符集的查询可能
UNION
会因虚假错误而失败。(缺陷号 28237675)参考资料:此问题是 Bug #83895、Bug #25123839 的回归。
-
CHECK TABLE ... FOR UPGRADE
在临时表上可以提出断言。(缺陷号 28220374)参考:这个问题是 Bug #24741307 的回归。
范围优化器中可能会出现被零除错误。(漏洞#28214186)
由于 GCC 8 错误,外键检查中的递归可能会耗尽堆栈空间。(错误#28200774、错误#28421040、错误#91823)
当
sql_mode
设置为空字符串时,表单SELECT CONCAT( FORMAT(LPAD(char,2,''), 1) )
的查询处理不当;RPAD()
对于使用inplace of 的类似形式的查询也是如此LPAD()
。(漏洞#28197977)非特权用户可以更改自己的帐户密码历史记录和重用属性。(漏洞 #28191838)
OpenSSL 1.1
OPENSSL_malloc_init()
调用在 Windows 上运行不佳。为了解决这个问题,使用了替代分配包装器而不是 OpenSSL 的默认值。因此,OpenSSL 内存检测被关闭。(缺陷号 28179051)在数据字典查找期间分配某些对象类型会导致堆栈缓冲区溢出。(缺陷号 28176453)
尝试在从中获取表统计信息时执行提交的内部服务器操作
INFORMATION_SCHEMA
可能会引发断言。(缺陷号 28165060)某些存储过程可能导致服务器退出。(缺陷号 28156802)
语句的输出
CREATE USER
在一般查询日志和审计日志中可能不同。(缺陷号 28147710)-
对于因启用而产生错误的
UPDATE
和 语句, 错误消息的信息不足。该消息现在包括生成的第一个诊断信息,以提供有关失败原因的信息。例如,该消息可能表明 超出了该值或发生了类型转换,其中任何一个都可能阻止使用索引。DELETE
sql_safe_updates
range_optimizer_max_mem_size
此外: (1) 使用
EXPLAIN
for 此类语句不会产生错误,使用户能够从EXPLAIN
加号SHOW WARNINGS
输出中看到为什么未使用索引。(2) 对于多表删除和更新,仅当任何目标表使用表扫描时,才会在启用安全更新的情况下产生错误。(缺陷 #28145710,缺陷 #91080) perl-Data-Dumper
MySQL 服务器和测试 RPM 包作为依赖 项丢失 。(错误#28144933,错误#72926)如果组件所需的服务尚未初始化,则服务器启动可能会失败。(漏洞 #28142250)
SHOW CREATE TABLE
可以省略外键RESTRICT
选项。这反过来可能导致外键选项从使用mysqldumpRESTRICT
转储的表中丢失并从转储文件中恢复。(缺陷 #28122781,缺陷 #91110)mysql客户端以批处理模式导入大型多行语句的速度很慢 。对于这种情况,内存分配现在更加有效。感谢 Sinisa Milivojevic 提供的补丁。(缺陷 #28116512,缺陷 #85155)
几何集合的过度嵌套导致服务器耗尽堆栈空间。如果存在堆栈溢出的危险,服务器现在会引发错误。(漏洞 #28100563)
对于mysql客户端,
-b
短选项与两个长选项相关联,--no-beep
并且--binary-as-hex
. 该-b
选项现在仅与 关联--no-beep
。(缺陷号 28093271)对于具有自增主键的表,并发
ALTER TABLE ... ADD ... VIRTUAL
andINSERT
语句可能会导致重复键错误。(缺陷号 28089240)浮点值的处理
SUM()
得到了改进。(缺陷号 28080199)使用某些表达式
ST_Simplify()
可能会导致服务器退出。(缺陷号 28079969)在启用了 Undefined Behavior Sanitizer 的构建中,测试返回了“对类型为‘struct Event_db_repository’的空指针的成员调用”错误。(漏洞 #28066155)
CMake选项没有正确处理 Windows 路径名 。(缺陷 #28061409,缺陷 #90964)
WITH_GMOCK
INFORMATION_SCHEMA
尝试缓存表统计信息的查询可能会引发调试断言。(缺陷号 28035207)如果将角色分配给帐户,某些
sql_mode
设置可能会导致服务器无法启动。(错误号 28030423)如果用户没有足够的权限,LDAP 身份验证插件的组查找可能会失败。
root
现在,组搜索操作再次使用凭据(如果可用)进行绑定。(漏洞 #28016008)ANALYZE TABLE ... UPDATE HISTOGRAM
mysqldump生成的语句包含语法错误。(漏洞 #28014376,漏洞 #90846)生成的具有索引和使用字符串函数的列并不总是正确填充。(漏洞#27973409)
固定长度的排序键,例如优先级队列使用的那些,完全适合的排序键被认为是失败的。(错误#27970481、错误#92448、错误#28654343)
对于空结果,
REPLACE()
有时会返回空字符串而不是空字符串。(漏洞 #27960921)删除使用不再可用的用户定义排序规则创建的表可能会导致服务器退出。(漏洞#27952999)
连接
INFORMATION_SCHEMA
REFERENTIAL_CONSTRAINTS
和TABLE_CONSTRAINTS
表CONSTRAINT_NAME
失败,因为列排序规则不同。(缺陷 #27945704,缺陷 #90690)对值的某些操作
DECIMAL
可能会导致服务器退出。(漏洞#27942277)mysqldump转储文件 中存储的程序定义有时包括
NO_AUTO_CREATE_USER
SQL 模式。由于该模式在 MySQL 8.0 中已被删除,因此无法将此类转储文件加载到 MySQL 8.0 服务器中。mysqldumpNO_AUTO_CREATE_USER
现在从转储存储程序的定义中删除。(缺陷 #27931181,缺陷 #90624)非常长的表键在复制从站上处理不正确。(缺陷号 27930505)
mysqld没有正确地确定它的安装目录,如果那个目录是在
$PATH
. (漏洞#27922896)在服务器启动/关闭期间,PID 文件可能被错误处理。(漏洞#27919254)
当服务器以 启动时
--skip-grant-tables
,一些帐户管理语句没有被禁用。(漏洞#27906226)在极少数情况下,设置保存点可能会引发断言。(漏洞#27898591)
调用 可能会发生运行时错误
copy_integer()
。myfunc_int()
,mysql_sys_var_int()
, 或thd_killed()
; 用于调用MyISAM
排序函数;或者对于超出 type 的可表示值范围的值unsigned long long
。(错误#27894901、错误#90515、错误#27871951、错误#27918095、错误#90609、错误#27937522、错误#90661、错误#27978325、错误#27962900)如果服务器无法在数据字典中存储插件元数据,则mysql_install_plugin无法报告特定于插件的错误。(漏洞#27893406)
ssl_fips_mode
ON
除非满足 OpenSSL 要求,否则不能设置为 ,但失败的尝试仍会导致该值显示为ON
。(漏洞 #27891890)mysql_result_metadata()
Windows 上的客户端库未导出 C API 函数 的符号 。(漏洞#27868095)对于
InnoDB
表,可以创建自引用外键,从而导致服务器行为不当。(漏洞#27864515)UNION
在准备好的语句或存储过程中执行时,混合不同字符集 的查询会产生无效输出。(漏洞#27849293)Debian 软件包缺少对
libcurl-dev
. (漏洞 #27844465)--help
客户端程序的输出不包括当前--ssl-fips-mode
值。(漏洞#27838966)调用 可能会发生运行时错误
Derived_key_comp()
。(缺陷号 27830679)对于
MEMORY
表,可能会发生内存溢出错误。(漏洞#27799513)从
BLOB
(orTEXT
) 类型转换为较小的BLOB
(orTEXT
) 类型时,不会报告任何警告或错误以通知截断或数据丢失。现在在严格 SQL 模式下会发出相应的错误,在非严格 SQL 模式下会发出警告。(缺陷 #27788685,缺陷 #90266)对于调试版本,
my_strnxfrm_unicode_full_bin()
可以提出断言。(漏洞#27752619)在启用了 Undefined Behavior Sanitizer 的构建中,GIS 计算中可能会发生有符号整数溢出。(错误#27751479、错误#27744399、错误#27811282)
在某些情况下,内部函数
regexp::EvalExprToCharset()
可能会将引用绑定到未对齐的地址。(漏洞#27743722)服务器生成的有关无法读取密钥文件的消息的严重性已从 INFORMATION 升级为 WARNING。(漏洞#27737195)
没有为使用窗口函数结合汇总的表达式创建临时表字段,导致包含这些的查询失败。(漏洞#27735167)
表达式未正确求值。(漏洞#27731699)
FIND_IN_SET(
JSON_UNQUOTE(
JSON_SET('{}','$','') ), 1)
在查询期间未能创建临时表
MyISAM
可能会导致服务器退出。感谢 Facebook 的补丁。(缺陷 #27724519,缺陷 #90145)parser_max_mem_size
在解析存储的程序定义时无效。(漏洞#27714748)BETWEEN
比较负值的子句可能会导致错误的结果 。(漏洞#27691347)服务器错误消息中的一些拼写错误是固定的。感谢 Thomas Tsiakalakis 的贡献。(漏洞 #27688294,漏洞 #90048)
这些脚本不再包含在 RPM 包中(它们是不必要的,因为它们被编译到 mysqld 二进制文件
fill_help_tables.sql
中 ) : ,,,,, 。(漏洞#27672991)mysql_sys_schema.sql
mysql_system_tables.sql
mysql_system_tables_data.sql
mysql_system_users.sql
Unique::io_cache
重新启动索引合并操作时未正确清理,导致调试版本中出现断言。(漏洞#27599292)在列中使用二进制或十六进制文字值会
ENUM
导致字符串类型包含数据字典字符集不允许的字节。(漏洞 #27592803)-
CONVERT()
在以下情况下 可能会失败:转换结果的大小大于
max_allowed_packet
sql_mode
是''(即空)。结果的字符集不同于
character_set_connection
(缺陷 #27592714) 使用
ENUM
orSET
字段JSON_TABLE()
可能会导致意外行为。(漏洞 #27571251)主机名解析错误可能会导致
audit_log
插件失败。(漏洞 #27567003)时,不成功的连接尝试未写入错误日志
log_error_verbosity=3
。(缺陷号 27539838)值为 的持久化系统变量
NULL
被错误地写入mysqld-auto.cnf
。(漏洞#27512616)-
较早的代码清理导致
FEDERATED
存储引擎故障。(缺陷 #27493633,缺陷 #89537)参考资料:此问题是 Bug #25943754 的回归。
max_execution_time
与全文搜索一起使用时, 设置有时无效。(漏洞 #27155294)尝试读取未提交的事务引发断言。(缺陷号 26876608)
ALTER TABLE ... REORGANIZE PARTITION ...
VALUES LESS THAN
如果除最后一个分区之外的任何分区都缺少语法部分,则 可能会导致不正确的行为。(漏洞 #26791931)在某些情况下
ER_DATA_TOO_LONG
,适当的错误ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
会被报告。(缺陷 #26475237,缺陷 #87100)存储当前服务器版本号的
last_checked_for_upgrade
列已添加到mysql.tables
数据字典表中以跟踪成功的CHECK TABLE ... FOR UPGRADE
操作。此数据以前存储在.frm
文件中,以避免不必要地重新检查表格。(漏洞 #24741307,漏洞 #83169)从文件生成的
MYSQLparse()
函数sql_yacc.yy
超出了大小限制,导致 Microsoft Visual C++ 编译器放弃优化。编译器/d2OptimizeHugeFunctions
开关已启用以恢复优化(在 Visual Studio 2017 及更高版本中可用)。(漏洞 #24600301)对有符号整数和无符号整数的乘积的范围检查可能无法正确执行。(漏洞 #17081376,漏洞 #69715)
YEAR
当表示为实常量(例如2155.0E00
或 )时 ,指定列的最大可能值 失败2.15E3
。(缺陷 #91226,缺陷 #28172538)防止在 类型的空指针内进行潜在的成员访问
SELECT_LEX
。(缺陷 #90689,缺陷 #27945614)用于计算
SELECT
语句生成的警告中报告的行号的基数已从读取的输入行数更改为用户看到的实际行号。对于使用 的语句GROUP BY
,此数字现在基于聚合分组的数量。(漏洞 #90667,漏洞 #27938507)直方图包含的每个桶中不同值数量的估计值,可用于估计表中不同值的数量,现在可由优化器的
histograms::Histogram
界面使用。(缺陷 #90465,缺陷 #27872281)INFORMATION_SCHEMA.KEYWORDS
未选择默认数据库时 ,从 表中选择失败。(缺陷 #90160,缺陷 #27729859)ANALYZE TABLE UPDATE HISTOGRAM
lock_wait_timeout
在语句处理期间超出时,无法向客户端返回错误条件 。(缺陷 #89738,缺陷 #27574375)可以创建一个
t
具有生成列的表g
,然后执行ALTER TABLE t ALTER COLUMN g SET DEFAULT ...
;尝试以这种方式为生成的列设置默认值现在失败并出现错误 1221 Incorrect usage of DEFAULT and generated column。CREATE TABLE
这与类似语句的行为相同 。(漏洞 #88619,漏洞 #27164393)