有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/。
这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
从 MySQL 8.0.4 开始,macOS 10.13 是受支持的平台。
Linux: Linux 平台上的二进制包现在使用 GCC 6 构建。 优化级别已从
-O3
.-O2
苹果系统; Microsoft Windows: 对于从源代码编译 MySQL, CMake选项现在适用于 Windows 和 macOS。(错误#26907731,错误#87938)
-DWITH_SSL=system
在使用 GNU gold链接器的平台上,现在可以删除未使用的函数,从而减小二进制文件的大小。(错误#26612067,错误#87372)
#include
源文件中的指令被重写和重组为明确的。(错误#26597243、错误#87358、错误#26897738)包含编译脚本的
BUILD
目录不再维护,并已从 MySQL 源代码树中删除。(漏洞 #26576219,漏洞 #87323)服务器构建的 Boost 库的最低版本现在是 1.65.0。(错误#26574924,错误#87317)
MySQL 现在可以链接到 Unix 和类 Unix 系统上的 OpenSSL 1.1。(漏洞 #25094892,漏洞 #83814)
已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。
-
该
validate_password
插件已重新实现以使用组件基础结构。要安装和卸载该validate_password
组件,请使用以下语句:INSTALL COMPONENT 'file://component_validate_password'; UNINSTALL COMPONENT 'file://component_validate_password';
INSTALL PLUGIN
仍然像以前一样安装和UNINSTALL PLUGIN
卸载validate_password
插件,但会生成警告。的插件形式validate_password
已弃用,将在未来的 MySQL 版本中删除。使用插件的 MySQL 安装应该过渡到组件。请参阅 过渡到密码验证组件。的组件和插件实现之间的用法差异在于
validate_password
,虽然插件公开名称以开头的系统和状态变量validate_password_
,但组件使用公开名称以组件名称和句点开头的变量的约定。例如,插件暴露了validate_password_policy
系统变量和validate_password_dictionary_file_words_count
状态变量,而组件暴露的相应变量是validate_password.policy
和validate_password.dictionary_file_words_count
。插件变量,就像插件本身一样,已被弃用,并将在未来的 MySQL 版本中删除。
-
复制:
expire_logs_days
在计算二进制日志过期时间时,您为已弃用的系统变量 指定的任何值binlog_expire_logs_seconds
已设置),并且仅使用该值binlog_expire_logs_seconds
。以前, 和 的影响binlog_expire_logs_seconds
是expire_logs_days
累积的。如果您在启动时为这两个系统变量都设置了一个值,则会发出一条警告消息,指出 的值已
expire_logs_days
被忽略。您不能在设置另一个选项的同时动态设置或更改一个选项的值,并且在这种情况下会发出一条错误消息。如果在启动时既没有设置值
binlog_expire_logs_seconds
也没有 设置值 ,则默认的二进制日志有效期为 30 天(在 MySQL 8.0.2 中更改) 。expire_logs_days
如果 在启动时设置了binlog_expire_logs_seconds
或 的值expire_logs_days
,则该值将覆盖默认的二进制日志有效期。要禁用二进制日志的自动清除,您必须在启动时将binlog_expire_logs_seconds
和expire_logs_days
显式设置为 0。(错误#26274274,错误#86698) 对于 RHEL、SLES 和 Fedora RPM,调试构建的默认插件目录已从更改
/usr/lib64/mysql/plugin
为/usr/lib64/mysql/plugin/debug
. (缺陷 #27072155,缺陷 #88363)新的
WITH_LZMA
和 CMake 选项控制是否使用捆绑的或系统的 LZMA 和 RE2 库进行编译。WITH_RE2
系统
table_open_cache
变量默认变量已从 2000 增加到 4000。这还将自动调整table_definition_cache
系统变量的默认值从 1400 更改为 2000。系统
optimizer_trace_max_mem_size
变量默认值已从 16KB 更改为 1MB,以减少优化程序跟踪截断的可能性。系统
log_error_verbosity
变量默认值从 3(错误、警告和信息消息)更改为 2(错误和警告消息)以使 mysqld错误日志记录在默认情况下不那么冗长。
InnoDB: 配置
innodb_undo_tablespaces
选项已弃用,将在未来的 MySQL 版本中删除。复制: 状态
group_replication_primary_member
变量已被弃用,将在未来的 MySQL 版本中删除。复制: 系统
group_replication_allow_local_disjoint_gtids_join
变量已被删除。-
在
libmysqld
MySQL 8.0.1 中删除嵌入式服务器库时,以下 仅用于 的mysql_options()libmysqld
选项未被删除。它们现在已被删除。MYSQL_OPT_GUESS_CONNECTION MYSQL_OPT_USE_EMBEDDED_CONNECTION MYSQL_OPT_USE_REMOTE_CONNECTION MYSQL_SET_CLIENT_IP
(漏洞#26712418)
mysqlpump不再
SQL_NO_CACHE
在语句中包含修饰符,因为该修饰符现在已弃用并导致弃用警告。(漏洞#26694675)生成的列不再允许生成表达式中的弃用函数,以避免在 MySQL 升级到已删除弃用函数的版本时出现问题。(错误#26279884,错误#86712)
Performance Schema
setup_timers
表已被删除,表中的TICK
行 也已删除performance_timers
。(错误号 18296337)
-
不兼容的变化: 以前,MySQL 使用Henry Spencer 正则表达式库来支持正则表达式运算符(
REGEXP
,RLIKE
)。正则表达式支持已使用 Unicode 国际组件 (ICU) 重新实现,它提供完整的 Unicode 支持并且是多字节安全的。该 andREGEXP_LIKE()
的方式执行正则表达式匹配 ,现在它们是该函数的同义词。此外, 、 和 函数可用于查找匹配位置并分别执行子串替换和提取。这REGEXP
RLIKE
REGEXP_INSTR()
REGEXP_REPLACE()
REGEXP_SUBSTR()
regexp_stack_limit
和regexp_time_limit
系统变量控制匹配引擎的资源消耗。MySQL 源代码分发捆绑了 ICU 库,该 选项控制是使用捆绑的还是系统的 ICU 库进行编译。该 函数返回 ICU 库版本。
WITH_ICU
CMake
ICU_VERSION()
有关详细信息,请参阅正则表达式。有关使用正则表达式的应用程序可能受实施更改影响的方式的信息,请参阅 正则表达式兼容性注意事项。
两个新的 SQL 函数可用于提供有关 SQL 语句的摘要信息。给定一个 SQL 语句作为字符串,
STATEMENT_DIGEST()
返回语句摘要哈希值,并STATEMENT_DIGEST_TEXT()
返回规范化的语句摘要。请参阅 加密和压缩函数。
-
MySQL 8.0.3 中针对重命名父外键中的列的限制已取消。(错误#26659110、错误#87490、错误#25722221)
参考资料:另请参阅:Bug #26334071。
-
对于使用 systemd 的平台(请参阅使用 systemd 管理 MySQL 服务器),如果在服务器启动时为空,则数据目录将被初始化。如果数据目录是一个暂时消失的远程挂载,这可能是一个问题:挂载点将显示为一个空数据目录,然后将其初始化为一个新的数据目录。现在可以抑制这种自动初始化行为。在文件中指定以下行
/etc/sysconfig/mysql
(如果不存在则创建文件):NO_INIT=true
(漏洞 #26595288,漏洞 #87287)
MySQL 现在支持底层密钥环密钥库之间的密钥迁移,允许 DBA 将 MySQL 安装从一个密钥环插件切换到另一个。请参阅 在密钥环密钥库之间迁移密钥。
一个新的错误日志过滤器组件, 可以根据指定为 系统变量
log_filter_dragnet
值的用户定义规则来控制写入错误日志的事件 。dragnet.log_error_filter_rules
这种新的过滤功能比使用内置log_filter_internal
过滤器组件和log_error_verbosity
系统变量可实现的功能更加灵活。有关详细信息,请参阅 错误日志过滤的类型。日志接收器组件写入错误日志的消息
log_sink_internal
现在包含一个错误 ID 指示符。此 ID 的格式为 . 它跟在严重性指示符之后并在消息文本之前。有关详细信息,请参阅错误日志输出格式。[
error_id
]-
当
log_error_verbosity
错误记录的系统变量设置为过滤掉警告和信息消息时,有关非错误情况的选定重要消息现在将作为系统消息打印到错误日志中。这些消息之前已处理并标记为错误,以便在log_error_verbosity=1
设置时记录它们。标签功能现在已经与这些消息的处理功能分离,因此可以为消息赋予适当的标签。系统消息现在在 MySQL 错误日志中带有“系统”标签。其他支持自定义标签的日志接收器也可能使用此约定。在不支持自定义标签的日志中,系统消息会打印出用于信息严重级别的标签。但是,即使
log_error_verbosity
设置通常排除此级别的消息,它们也会包含在内。如果您的系统有额外的配置来丢弃标记为信息级别的消息,或者将它们重定向到与标记为错误的消息不同的目的地,系统消息不会覆盖此行为。如果涉及的日志接收器不使用“系统”标签,系统消息现在将与其他标记为信息级别的消息一起被丢弃或重定向。
现在在支持的情况下使用“系统” 标签打印的消息包括启动和关闭消息,以及对设置的一些重大更改,如下所示:
-
所有 MySQL 二进制发行版现在都链接到 OpenSSL,包括以前链接到 yaSSL 的社区发行版。此外,OpenSSL 是动态链接的,而不是静态链接的,如果需要,这可以替换替代的 SSL 库以与 MySQL 一起使用。对于某些平台,二进制发行版捆绑了 OpenSSL 库以确保库的可用性:
Windows:分发包
libeay32.dll
和ssleay32.dll
,它们安装在与 MySQL 二进制文件相同的目录中。可以通过将这些库文件替换为替代项,或使用 Windows 支持的其他一些库选择方法来使用其他库。(请参阅 https://msdn.microsoft.com/en-us/library/7d83bc18.aspx。)macOS:分发包
libssl.dylib
和libcrypto.dylib
. MySQL 二进制文件链接到同一目录中的库,那里的符号链接指向实际的库位置。Linux(仅适用于通用压缩tar文件分发版):分发包
libssl.so
和libcrypt.so
,它们安装在与libmysqlclient.so
客户端库相同的目录中。
(错误#26272084、错误#26134893、错误#26927607、错误#87996)
Performance Schema 现在使用 SHA-256 哈希作为语句摘要而不是 MD5 哈希。为了适应 SHA-256 值所需的增加的存储空间,
DIGEST
Performance Schema 表中的列从扩展VARCHAR(32)
到VARCHAR(64)
. (漏洞#26727443)
不兼容的更改: 密码现在限制为最多 256 个字符,用于
caching_sha2_password
和sha256_password
身份验证插件,以及PASSWORD()
函数 whenold_passwords=2
。此外,密码散列轮次的数量受到限制,以限制使用的 CPU 时间。(错误#27099029,错误#27194270)-
不兼容 的变化:
caching_sha2_password
和sha256_password
认证插件提供比插件更安全的密码加密mysql_native_password
,并caching_sha2_password
提供比sha256_password
. 由于这些卓越的安全性和性能特征caching_sha2_password
,它现在是首选的身份验证插件,也是默认的身份验证插件,而不是mysql_native_password
. 此更改会影响服务器和libmysqlclient
客户端库:对于服务器,
default_authentication_plugin
系统变量的默认值从mysql_native_password
变为caching_sha2_password
。该
libmysqlclient
库caching_sha2_password
将mysql_native_password
.
此更改具有以下含义:
此更改仅影响用于创建新 MySQL 帐户的身份验证插件。对于已存在于升级安装中的帐户,其身份验证插件保持不变。
使用经过身份验证的帐户的客户端
caching_sha2_password
必须使用安全连接(使用使用 TLS/SSL 凭据的 TCP、Unix 套接字文件或共享内存),或使用 RSA 密钥对支持密码交换的未加密连接。此安全要求不适用于mysql_native_passsword
,因此切换到caching_sha2_password
可能需要额外的配置(请参阅 缓存 SHA-2 可插入身份验证)。但是,MySQL 8.0 中的客户端连接默认首选使用 TLS/SSL,因此已经符合该首选项的客户端可能不需要额外的配置。因为
caching_sha2_password
现在也是libmysqlclient
客户端库中的默认身份验证插件,身份验证需要在客户端/服务器协议中进行额外的往返,以便从 MySQL 8.0 客户端连接到使用mysql_native_password
(以前的默认身份验证插件)的帐户,除非客户端程序被调用一个--default-auth=mysql_native_password
选项。不兼容:尚未更新以了解的客户端和连接器
caching_sha2_password
无法连接到通过身份验证的帐户,caching_sha2_password
因为它们不认为此插件有效。要解决此问题,请重新链接libmysqlclient
来自 MySQL 8.0.4 或更高版本的客户端,或获取可识别caching_sha2_password
.不兼容性:尚未更新的客户端和连接器
caching_sha2_password
可能无法连接配置caching_sha2_password
为默认身份验证插件的 MySQL 8.0 服务器,即使使用未使用caching_sha2_password
. 发生此问题是因为服务器将其默认身份验证插件的名称指定给客户端。如果客户端或连接器基于无法正常处理无法识别的默认身份验证插件的客户端/服务器协议实现,则它可能会失败并出现错误。
有关 的更突出作用的更多信息
caching_sha2_password
,包括对潜在兼容性问题和解决方案的讨论,请参阅 caching_sha2_password as the Preferred Authentication Plugin。此外,复制从站现在能够使用基于 RSA 密钥对的密码交换连接到主站。此 RSA 功能适用于使用
caching_sha2_password
或sha256_password
身份验证插件进行身份验证的帐户。(以前,slaves 可以使用这些插件进行身份验证,但需要安全连接并且不能使用 RSA 密码交换。)以下更改允许使用这个新的 slave RSA 功能:该
CHANGE MASTER TO
语句包含用于指定 RSA 公钥信息的子句。对于 Group Replication,
group_replication_recovery_public_key_path
和group_replication_recovery_get_public_key
系统变量具有相同的目的。该
SHOW SLAVE STATUS
语句和 Performance Schemareplication_connection_configuration
表显示复制从 RSA 公钥信息。
更多程序现在支持一个
--server-public-key-path
选项,用于启用指定包含用于基于 RSA 密钥对的密码交换的公钥的客户端文件,用于使用caching_sha2_password
或sha256_password
身份验证插件进行身份验证的帐户: mysqladmin、mysqlbinlog、 mysqlcheck、mysqldump、 mysqlimport、mysqlpump、 mysqlshow , mysqlslap , mysql_upgrade。以前只 支持mysql和mysqltest--server-public-key-path
。这--server-public-key-path
选项是 , 的替代选项--get-server-public-key
,并且可以在客户端文件可用时使用,该文件包含服务器所需的 RSA 公钥副本,而不是向服务器发送公钥请求。新的
mysql_reset_server_public_key()
C API 函数从客户端库中清除服务器 RSA 公钥的任何缓存副本。请参阅 mysql_reset_server_public_key()。新
caching_sha2_password_auto_generate_rsa_keys
系统变量启用自动 RSA 私钥/公钥对文件生成,类似于sha256_password_auto_generate_rsa_keys
系统变量。请参阅 自动生成 SSL 和 RSA 文件。新的
Caching_sha2_password_rsa_public_key
状态变量公开了caching_sha2_password
身份验证插件用于基于 RSA 密钥对的密码交换的公钥。(漏洞 #26751594) 用于 MySQL 服务器的链接 OpenSSL 库已更新到版本 1.0.2n。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。(错误#27212666,错误#27236394)
mysqld和 mysql_ssl_rsa_setup 自动生成的证书 现在使用 X509 v3 而不是 v1。(漏洞#26521654)
一个新的
RESTART
SQL 语句可用,可以从客户端会话中重新启动 MySQL 服务器实例。此功能可用于监视进程能够检测为重新启动而执行的服务器关闭的平台:Windows(mysqld作为 Windows 服务或独立启动),以及使用 systemd 或mysqld_safe管理 mysqld的 Unix 和类 Unix 系统 . 请参阅RESTART 语句。
-
不兼容的 更改:这些 为 地理 空间 参考 中 的 数据 返回 错误 , 其 坐标 值 超出 合法 范围 :
ST_GeomCollFromText()
,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,, _ _ _ _ _ _ST_GeomCollFromTxt()
ST_GeomCollFromWKB()
ST_GeometryCollectionFromText()
ST_GeometryCollectionFromWKB()
ST_GeometryFromText()
ST_GeometryFromWKB()
ST_GeomFromGeoJSON()
ST_GeomFromText()
ST_GeomFromWKB()
ST_LineFromText()
ST_LineFromWKB()
ST_LineStringFromText()
ST_LineStringFromWKB()
ST_MLineFromText()
ST_MLineFromWKB()
ST_MPointFromText()
ST_MPointFromWKB()
ST_MPolyFromText()
ST_MPolyFromWKB()
ST_MultiLineStringFromText()
ST_MultiLineStringFromWKB()
ST_MultiPointFromText()
ST_MultiPointFromWKB()
ST_MultiPolygonFromText()
ST_MultiPolygonFromWKB()
ST_PointFromText()
,,,,, .ST_PointFromWKB()
_ST_PolyFromText()
_ST_PolyFromWKB()
_ST_PolygonFromText()
_ST_PolygonFromWKB()
(ST_LatFromGeoHash()
、ST_LongFromGeoHash()
和ST_PointFromGeoHash()
没有这种行为,因为它们不能表示超出范围的值。)ST_GeomFromGeoJSON()
crs
如果在 GeoJSON 文档的较低级别找到指定与顶级对象 SRID 不同的 SRID 的成员,现在也会返回错误。笔记如果空间数据包含引用地理空间参考系统的 SRID 值并且数据坐标超出范围,则与以前的 MySQL 版本相比,使用这些函数的现有查询将返回不同的结果。
(漏洞 #26941370,漏洞 #88031)
-
不兼容的更改: 以前,这些空间函数忽略了几何参数的空间参考系统 (SRS) 和笛卡尔平面上的计算结果。他们现在支持计算指定地理 SRS 的几何参数:
ST_Distance_Sphere()
,ST_IsSimple()
,ST_IsValid()
,ST_Length()
.以前,这些空间函数忽略了笛卡尔平面上任何几何参数和计算结果的 SRS。当使用指定地理 SRS 的几何参数调用时,它们现在会产生错误:
ST_Area()
,ST_Buffer()
,ST_Centroid()
,ST_ConvexHull()
,ST_Difference()
,ST_Envelope()
,ST_Intersection()
,ST_IsClosed()
,ST_MakeEnvelope()
,ST_Simplify()
,ST_SymDifference()
,ST_Union()
,ST_Validate()
.以前,这些空间函数允许具有未定义 SRS 的几何参数。当 使用 具有 未定义 SRS 的 几何 参数 调用 时
ST_Dimension()
, 它们 现在 会 产生 错误 : ,,,,,,,,,,,,,,,,,,,,,,,,,, 。 _ _ST_Distance_Sphere()
ST_EndPoint()
ST_ExteriorRing()
ST_GeometryN()
ST_GeometryType()
ST_InteriorRingN()
ST_IsEmpty()
ST_IsSimple()
ST_IsValid()
ST_Length()
ST_NumGeometries()
ST_NumInteriorRing()
ST_NumInteriorRings()
ST_NumPoints()
ST_PointN()
ST_StartPoint()
ST_SwapXY()
ST_X()
ST_Y()
以前,
ST_GeoHash()
空间函数接受具有任何 SRID 的点。ST_GeoHash()
现在只接受 SRID 为 0 或 4326 的点。笔记如果空间数据包含现在被刚刚列出的函数以不同方式解释的几何值,则与以前的 MySQL 版本相比,使用这些函数的现有查询将返回不同的结果。
-
不兼容的更改: 对于以下采用 SRID 参数的空间函数,如果 SRID 不存在,它们现在会返回错误 :
ST_GeomCollFromText()
,ST_GeomCollFromTxt()
,ST_GeomCollFromWKB()
,ST_GeometryCollectionFromText()
,ST_GeometryCollectionFromWKB()
,ST_GeometryFromText()
,ST_GeometryFromWKB()
,ST_GeomFromGeoJSON()
,ST_GeomFromText()
,ST_GeomFromWKB()
,ST_LineFromText()
,ST_LineFromWKB()
,ST_LineStringFromText()
,ST_LineStringFromWKB()
,ST_MLineFromText()
,ST_MLineFromWKB()
,ST_MPointFromText()
,ST_MPointFromWKB()
,ST_MPolyFromText()
,ST_MPolyFromWKB()
,ST_MultiLineStringFromText()
,ST_MultiLineStringFromWKB()
,ST_MultiPointFromText()
, ,,,,, _ _ _ _ST_MultiPointFromWKB()
ST_MultiPolygonFromText()
ST_MultiPolygonFromWKB()
ST_PointFromGeoHash()
ST_PointFromText()
ST_PointFromWKB()
ST_PolyFromText()
,,, .ST_PolyFromWKB()
_ST_PolygonFromText()
_ST_PolygonFromWKB()
(ST_SRID()
已经有这种行为。)笔记如果空间数据包含引用不存在的空间参考系统的 SRID 值,则与以前的 MySQL 版本相比,使用这些函数的现有查询将返回不同的结果。
SPATIAL
如果创建了优化器永远不会使用 的索引,服务器现在会打印一条警告。(漏洞 #27015964)包含用于空间计算的空间参考系统数据的 EPSG 数据集已从版本 9.0 升级到 9.2。(错误#26711258、错误#87564、错误#26990896)
MySQL 现在支持在数据字典中创建
CREATE SPATIAL REFERENCE SYSTEM
和DROP SPATIAL REFERENCE SYSTEM
删除空间参考系统 (SRS) 定义的语句。请参阅 CREATE SPATIAL REFERENCE SYSTEM 语句和 DROP SPATIAL REFERENCE SYSTEM 语句。随着这些语句的实现, 不再需要,也不再允许使用、 、 和mysql.st_spatial_reference_systems
等语句直接访问数据字典表 。与以前一样,通过表 仍然可以读取对 SRS 定义的访问。SELECT
INSERT
UPDATE
INFORMATION_SCHEMA
ST_SPATIAL_REFERENCE_SYSTEMS
MySQL 测试套件的文档现在使用 Doxygen 在 MySQL 源代码树中维护(请参阅 MySQL 服务器 Doxygen 文档,可在 https://mysql.net.cn/doc/index-other.html获得。)相关的 Unix 手册页以前根据旧测试套件手册生成的测试不再更新并且已经过时了。因此,它们不再包含在 MySQL 发行版中。(漏洞 #27021754)
MySQL 测试套件现在包括
CRC32()
测试。感谢 Daniel Black 提供的补丁。(错误#26495791,错误#87136)-
mysqltest现在接受
retry
这些命令 的 :copy_file
copy_files_wildcard
、、、、 和 。用法如下:file_exists
move_file
remove_file
remove_files_wildcard
--file_operation file_name ... [retry]
指定
retry
参数后,该命令会以一秒为间隔重试失败的操作给定次数。(漏洞#24671890)
X 插件可能会错误地从传递给需要 JSON 字符串的函数的参数中删除引号,从而导致错误。(漏洞 #26906519)
在集合上创建索引后,X Plugin 会将集合列为关系表,而不再将其列为集合。(缺陷号 26906487)
X Protocol 以与
DATE
类型相同的方式 显示DATETIME
类型。这两种数据类型现在被区别对待。(缺陷号 26647488)mysqlxtest没有
DATETIME
正确显示值中的小数秒。(漏洞#26638422)X Plugin 返回一个列元数据字段,显示 JSON 列的小数位,而该信息与之无关。该字段不再返回。(漏洞#26258481)
如果 IP 地址解析为空主机名,X 插件会错误地处理用户帐户查找。(缺陷号 26042786)
-
X 插件现在可以配置为中止任何被认为空闲的经过身份验证的连接。添加了以下系统变量:
-
X 插件现在支持 缓存 SHA-2 可插入身份验证。要启用支持,请发出:
INSTALL PLUGIN mysqlx_cache_cleaner SONAME 'mysqlx.so';
此插件维护缓存并删除已修改帐户的所有条目。
参考资料:另请参阅:Bug #27213213、Bug #27042109。
InnoDB:
InnoDB
升级到 MySQL 8.0.3 或更高版本后不再需要的 过时(漏洞#26757171)-
InnoDB: 添加支持以在将 MySQL 二进制文件升级到新版本后启动 MySQL 服务器时自动升级数据字典表定义。在启动时,将服务器的数据字典版本与存储在数据字典中的版本信息进行比较,以确定是否应升级数据字典表。如果需要并支持升级,服务器会创建具有更新定义的数据字典表,将持久化的元数据复制到新表中,以原子方式用新表替换旧表,并重新初始化数据字典。如果不需要升级,则启动继续而不更新数据字典表。
mysqld 选项 可
--no-dd-upgrade
用于防止在启动时自动升级数据字典表。 -
InnoDB: 新选项支持在服务器离线时将表空间文件移动或恢复到新位置,该
--innodb-directories
选项定义了在启动时扫描表空间文件的目录。有关详细信息,请参阅 在服务器脱机时移动表空间文件。随着该
--innodb-directories
功能的引入,使用绝对路径或在数据目录之外的位置创建的 file-per-table 和通用表空间文件的位置应添加到innodb_directories
参数值中。否则,InnoDB
在恢复期间无法找到这些文件。要查看表空间文件位置,请查询INFORMATION_SCHEMA.FILES
表:mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \G
该
CREATE TABLESPACE ... ADD DATAFILE
语句现在要求指定的目录为InnoDB
. 已知目录包括由innodb_directories
选项隐式和显式定义的目录。innodb_directories
替换innodb_scan_directories
,已被删除。 -
InnoDB:
InnoDB
现在支持部分更新存储在聚集索引页外的外部字段中的大对象 (LOB) 数据,包括和JSON
更新的文档 。以前,LOB 值只能完整读取或修改, 列值的更新是通过完全删除以前的文档并在其位置写入新文档来完成的。JSON_SET()
JSON_REPLACE()
JSON
部分更新使用内部 LOB 索引,或者在压缩 LOB 数据的情况下使用 ZLOB 索引,在插入或更新包含 LOB 数据的行时创建并存储在一个或多个 LOB 页中。因此,新插入的行支持 LOB 数据的部分提取和更新,但包含 LOB 数据的现有行必须更新以添加部分提取和更新支持。添加 LOB 索引数据会使 LOB 值所需的存储空间增加一小部分。
此功能添加了以下
InnoDB
页面类型,用于存储未压缩和压缩的 LOB 数据:FIL_PAGE_TYPE_LOB_INDEX
FIL_PAGE_TYPE_LOB_DATA
FIL_PAGE_TYPE_LOB_FIRST
FIL_PAGE_TYPE_ZLOB_FIRST
FIL_PAGE_TYPE_ZLOB_DATA
FIL_PAGE_TYPE_ZLOB_INDEX
FIL_PAGE_TYPE_ZLOB_FRAG
FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY
InnoDB:
mysql.tablespaces
数据字典表 的存储引擎私有字段InnoDB
表空间文件的第0页现在存储MySQL服务器版本和表空间版本信息。MySQL 服务器版本是创建表空间的版本、导入表空间的版本或上次主要 MySQL 升级的版本。表空间版本跟踪表空间格式的变化。SERVER_VERSION
和SPACE_VERSION
字段被添加到INFORMATION_SCHEMA.INNODB_TABLESPACES
表中以提供对此数据的访问。-
复制:
group_replication_ip_whitelist
现在可以使用 系统变量 将主机名指定为组复制连接白名单的一部分 主机名支持 CIDR 表示法。不支持解析为 IPv6 地址的主机名。对于主机名,仅当另一台服务器发出连接请求时才会进行名称解析。无法解析的主机名不会被考虑用于白名单验证,并且警告消息会写入错误日志。对已解析的主机名进行前向确认反向 DNS (FCrDNS) 验证。
警告主机名本质上不如白名单中的 IP 地址安全。FCrDNS 验证提供了良好的保护级别,但可能会受到某些类型的攻击。仅在绝对必要时才在白名单中指定主机名,并确保用于名称解析的所有组件(例如 DNS 服务器)都在您的控制之下。您还可以使用主机文件在本地实现名称解析,以避免使用外部组件。
-
JSON: 添加了
JSON_TABLE()
函数,它接受JSON
数据并将其作为指定列的关系表返回。可以使用标准 SQL 机制访问此虚拟表此函数的语法 为,其中 是返回 JSON 数据的表达式,是应用于源的 JSON 路径, 是列定义列表。列可以是、、 和或 类型,如下表所述:
JSON_TABLE(
expr
,path
COLUMNScolumn_list
) [AS]alias
)expr
path
column_list
FOR ORDINAL
PATH
EXISTS PATH
NESTED PATH
NESTED
FOR ORDINAL
:column是一个计数器,类似于AUTO_INCREMENT
column。PATH
:该列使用指定的 JSON 路径保存标量值。ON ERROR
和ON EMPTY
选项分别支持处理非法值(例如非标量)和空值。EXISTS PATH
:如果指定的 JSON 路径存在匹配项,则列值为 1,否则为 0。NESTED PATH
:在给定 JSON 路径中找到的 JSON 数据中的嵌套对象或数组与来自父对象或数组的 JSON 值一起被展平为一行。PATH
关键字是可选 的。
这里显示了两个简单的例子:
mysql> SELECT * -> FROM -> JSON_TABLE( -> '[1, 3, 5, 7, 9]', -> "$[*]" COLUMNS(rowid FOR ORDINALITY, col VARCHAR(50) PATH "$") -> ) AS t1; +-------+------+ | rowid | col | +-------+------+ | 1 | 1 | | 2 | 3 | | 3 | 5 | | 4 | 7 | | 5 | 9 | +-------+------+ mysql> SET @j = '[{"a": [{"x":"3"},{"y":"2"}]}, '> {"b": [{"x":"1"},{"y":"1"}]}, '> {"a": [{"x":"2"},{"y":"3"}]}]'; mysql> SELECT * -> FROM JSON_TABLE( -> @j, -> "$[*]" COLUMNS( -> rowid FOR ORDINALITY, -> -> xa INT EXISTS PATH "$.a", -> xb INT EXISTS PATH "$.b", -> -> ja JSON PATH "$.a", -> jb JSON PATH "$.b" -> ) -> ) AS jts; +-------+------+------+--------------------------+--------------------------+ | rowid | xa | xb | ja | jb | +-------+------+------+--------------------------+--------------------------+ | 1 | 1 | 0 | [{"x": "3"}, {"y": "2"}] | NULL | | 2 | 0 | 1 | NULL | [{"x": "1"}, {"y": "1"}] | | 3 | 1 | 0 | [{"x": "2"}, {"y": "3"}] | NULL | +-------+------+------+--------------------------+--------------------------+
JSON 源表达式可以是生成有效 JSON 文档的任何表达式,包括 JSON 文字、表列或返回 JSON 的函数调用,例如
JSON_EXTRACT(t1, data, '$.post.comments')
. 有关此函数的完整语法和其他信息,请参阅 JSON 表函数。 CMake选项启用 AddressSanitizer Clang 标志以进行范围后使用检测 。默认关闭。要使用此选项,还必须启用。(缺陷号 27095089)
-DWITH_ASAN_SCOPE
-fsanitize-address-use-after-scope
-DWITH_ASAN
空
JSON
文件的处理变得更加稳健。(错误#26787468,错误#87734)ALTER TABLE RENAME
如果 a 处于活动状态,则 MySQL 8.0.3 对外键关系中的表施加了限制LOCK TABLES
。此限制已取消。(漏洞 #26647340,漏洞 #87467)如果服务器 PID 文件配置为在全球可写位置创建,服务器现在会发出警告,建议使用更安全的位置。(漏洞 #26585560)
对于使用 字符集引入器(例如,)的构造,查找性能得到改进,以便将引入器映射到适当的字符集。(漏洞 #25680866,漏洞 #85331)
_
charset
_utf8mb4 'abc'
-
重要更改:
PERIOD_ADD()
对和PERIOD_DIFF()
函数 进行了以下更改与这些函数之一一起使用的周期值不能为负数。
期间值的月份部分可能不等于 0。
与其中至少一个条件为真的这些函数之一一起使用的周期值现在会导致函数失败并出现错误。(漏洞 #27004699,漏洞 #27004729)
-
重要更改: 和
LEAST()
函数GREATEST()
不再尝试从使用它们的表达式中推断其参数的上下文。例如,LEAST('11', '45', '2')
返回'11'
,但LEAST('11', '45', '2') + 0
将函数参数视为整数而不是字符串,并返回2
。现在这些函数总是严格根据类型评估它们的参数,并且由于它们包含在表达式中而导致的任何数据类型强制转换仅在函数返回的结果上执行。这意味着表达式LEAST('11', '45', '2') + 0
现在的计算结果为'11' + 0
,因此为整数值11
。出于以下考虑,进行了此更改:
推导上下文的规则并不总是清晰或一致的。
COALESCE()
这些函数在表达式中使用时的结果与或UNION
查询 的结果不一致 。
应检查在表达式中使用这些函数的应用程序以确保它们不依赖于以前的行为,如果依赖则进行更新。(漏洞 #83895,漏洞 #25123839)
InnoDB: 在主服务器上成功运行到 XA 准备阶段的并发 XA 事务在从服务器上重放时发生冲突,导致应用程序线程中的锁等待超时。冲突是由于 GAP 锁定范围不同,当事务在从站上连续重放时不同。为了防止这种类型的冲突,
READ COMMITTED
当 XA 事务到达准备阶段时,隔离级别的 XA 事务获取的 GAP 锁现在被释放(并且不再继承)。(错误#27189701,错误#25866046)InnoDB:
ALTER TABLE
添加引用具有生成的虚拟列的表的外键约束 的(漏洞 #27189701)InnoDB: 由于
DROP DATABASE
缺少通用表空间数据文件,操作引发了断言。(漏洞 #27151163)InnoDB: 在 Windows 上,更改表分区的操作引发断言。表名未正确解析。(错误号 27075816)
InnoDB:对临时表 的
TRUNCATE TABLE
操作引发了断言。(缺陷号 27073280)InnoDB: 在 DDL 操作的后 DDL 阶段对恢复相关函数的调用引发了断言。(缺陷 #27041487,缺陷 #88263)
InnoDB: 添加引用具有 SRID 属性的列的空间索引返回错误。(漏洞 #27021029)
InnoDB: 具有 64 个字符外键名称的表导致升级失败。最多 64 个字符的外键名称应被允许。(漏洞 #27014308,漏洞 #88196)
-
InnoDB:从 MySQL 5.7 升级到 MySQL 8.0 的压缩表 的
InnoDB
恢复过程失败,出现表空间大小错误。压缩表的表空间文件现在使用物理页面大小而不是
InnoDB
页面大小创建,这使得空压缩表的表空间文件的初始大小小于以前的 MySQL 版本。(错误#27014083,错误#88195) -
InnoDB: 不必要的表空间提取和缓存更新操作导致服务器启动延迟。(漏洞#26995951)
参考:这个问题是 Bug #26832347 的回归。
InnoDB: 孤立
.frm
文件导致升级失败,由于在第一次升级尝试时重命名了全文搜索辅助表,因此后续升级尝试不成功。(漏洞#26995951)-
InnoDB: 为解决并发操作期间序列化字典信息 (SDI) 插入冲突而引入的解决方法
CREATE TABLE
已被删除。(缺陷号 26995534)参考资料:另请参阅:Bug #26539665。
InnoDB: “设备上没有剩余空间”错误报告了无效的错误消息。(缺陷号 26960345)
InnoDB: 在快速关闭期间,
InnoDB
尝试在文件关闭后将动态元数据写入数据字典,由于数据字典表空间上的挂起 I/O 而导致初始化失败。(缺陷号 26950659)InnoDB: 升级到MySQL 8.0.4后,由于反复尝试加载逐出的
InnoDB
系统表,启动时遇到堆栈溢出错误。(漏洞 #26945437,漏洞 #88042)InnoDB: 导入压缩表引发了断言。该操作使用表的聚集索引而不是序列化字典信息 (SDI) 索引来转换 SDI 页面。(缺陷号 26938297)
InnoDB: 在调试版本中,操作期间创建临时表失败会
REPLACE
引发无效断言。(错误#26919378,错误#26958868)InnoDB:
DROP DATABASE
如果数据库表是在通用表空间中创建的,则失败。常规表空间标志注册不正确,导致序列化字典信息 (SDI) 操作失败。(漏洞#26834496)InnoDB: 启用二进制日志记录后,
ALTER TABLESPACE ... RENAME
操作失败并出现 “找不到空间”错误。(漏洞#26832347)InnoDB: 未能添加索引的操作引发了无效的自适应哈希索引断言。(漏洞#26788968)
InnoDB: 从数据字典中读取的有效表行类型值引发了无效断言。(漏洞#26773152)
InnoDB:
innodb_force_recovery=5
使用 初始化 开始升级,InnoDB
但在遇到错误时没有正常退出线程。innodb_force_recovery
不再允许使用非零设置进行升级 (缺陷号 26766632)InnoDB: 失败
CREATE TEMPORARY TABLE
的语句在INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO
. 内存表对象未被释放。(缺陷号 26765438)InnoDB: 在尝试查找外键的合格索引时
InnoDB
,在错误的数组中查找了虚拟列的名称dict_table_t
(漏洞#26764604)InnoDB: 更新数据字典表的可附加读写事务 试图更新同一行,导致死锁
table_stats
。index_stats
(漏洞#26762517)InnoDB: 在恢复期间,内存表空间对象中的表空间名称是使用文件名字符集而不是表名字符集定义的,导致“缺少表空间”错误。(漏洞 #26761960)
InnoDB: Bootstrap 代码没有为数据字典表保留前 1024 个表 ID。(漏洞#26757227)
InnoDB: 由于错误设置的锁类型,分区表上来自不同客户端的多个更新导致意外的锁等待超时。(漏洞 #26731025,漏洞 #87619)
-
InnoDB: 尝试获取元数据锁的异步回滚线程被中断,但结果错误未返回到服务器。此问题已通过删除元数据锁定获取得到解决,这对于异步回滚来说不是必需的。
打开表进行撤消处理时,仅检查内存中的表。现在还会检查数据字典,以防内存中不存在表。(漏洞#26678883)
InnoDB: 尝试打开名称比预期长的全文辅助表时出现断言。(缺陷号 26649020)
InnoDB: 数据字典表打开函数没有正确处理表和模式名称字符集转换,导致恢复时出错。(缺陷号 26640776)
InnoDB:
end_stmt()
某些场景没有调用 事务ALTER TABLE ... PARTITION
导致超时。(错误#26629790,错误#25886814)InnoDB: 在 DDL 操作的提交阶段获取序列化词典信息 (SDI) 表上的元数据锁会因锁等待超时或查询暂停而失败。(缺陷号 26628126)
InnoDB: 检查重做日志余量时不考虑动态元数据更新的重做日志。此外,在只读模式下,
innodb_dynamic_metadata
数据字典表被不必要地打开以写入重做日志中的元数据。(漏洞 #26589535)InnoDB: 尝试安装
memcached
插件失败后发生意外错误。(缺陷号 26588738)InnoDB: 缓冲池页面的状态在缓冲池调整大小操作正在进行时被另一个线程更改。(缺陷号 26588537)
InnoDB: 断言冲突锁的调试函数没有考虑要提交或回滚的事务锁。(漏洞 #26562371)
InnoDB: 更新等待记录锁年龄的方差感知事务调度(VATS)功能未能忽略表锁,导致断言失败。(漏洞 #26538702)
InnoDB: 创建或修改表分区的 DDL 操作无意中更改了其他分区的行格式,导致行格式不匹配。(漏洞#26535746)
InnoDB: 一个
ALTER TABLE
操作导致服务器停止。(漏洞#26492721)InnoDB:重命名分区表时 ,
innodb_table_stats
数据字典表未使用新分区名称更新。(漏洞 #26390658,漏洞 #86927)InnoDB: 由于 MySQL 8.0.0 中引入的回归,
innodb_change_buffering
无法动态设置配置选项。(缺陷号 26389442)InnoDB:
UPDATE
在在线 DDL 操作期间 回滚并发语句时访问了已释放索引的在线日志(漏洞#26334475)InnoDB:
REPLACE
对具有虚拟列前缀上的二级索引的表 的(缺陷号 26330279)InnoDB: 设置
tmpdir
为驱动器的根目录导致“无效(旧?)表或数据库名称”错误消息被打印到错误日志中。(漏洞 #26299984,漏洞 #86737)InnoDB:
INFORMATION_SCHEMA
在不获取事务互斥锁的情况下尝试检查事务状态时,在查询 期间发生竞争条件 (缺陷号 26299705)InnoDB: 操作
FLUSH TABLES
未能删除中止的索引。从缓存中删除表时,聚集索引在检查中止索引之前被删除。(漏洞 #26256456,漏洞 #86607)InnoDB: 对于
InnoDB
表,CREATE TABLE ... LIKE
不遵守innodb_file_per_table
系统变量设置,即使用户在创建表期间未指定显式表空间,也会SHOW CREATE TABLE
显示一个TABLESPACE
(错误#26199233,错误#86589)-
InnoDB: 处理外部级联操作的迭代方法导致内存使用过多。(漏洞 #26191879,漏洞 #86573)
参考:这个问题是 Bug #16244691 的回归。
InnoDB: 驱逐压缩页面的缓冲池驱逐操作的锁获取顺序不正确。(漏洞 #25972975)
InnoDB: 元数据锁在数据字典对象仍在使用时被释放。(缺陷号 25928984)
InnoDB: 在1K 压缩页面大小的文件上运行时, innochecksum返回 Valgrind 错误
InnoDB
(错误#25922124,错误#85993)InnoDB: 终止线程未能关闭正在执行
TRUNCATE TABLE
操作的另一个线程的套接字,导致断言。(漏洞 #25887335,漏洞 #85925)InnoDB:
INSERT
由于在锁冲突检查期间发生故障,对具有空间索引的表 的(缺陷号 25729649)InnoDB: 为数据字典表激活了用于用户表的调试同步点。(缺陷号 25508568)
InnoDB: 添加了服务器端检查以防止将外键约束放置在生成的存储列的基列上。(漏洞 #25339192)
InnoDB: 当历史列表的长度超过 2000000 时,应该只出现在 MySQL 调试版本中的警告被打印到错误日志中。(Bug #24296076,Bug #82213)
InnoDB: Attempting to reduce the buffer pool size to less than the buffer pool chunk size 没有报告警告。(缺陷号 23590280)
InnoDB:添加 了“错误的键列”错误以解决不支持的索引创建方案。(缺陷号 22486025)
InnoDB: 对使用二进制排序规则的索引列的全文搜索未返回区分大小写的匹配项。(缺陷 #21625016,缺陷 #78048)
打包: 尝试使用 MySQL Yum 存储库在 Fedora 27 上安装 MySQL Server 时,由于与本机
mariadb-connector-c-devel
包冲突,安装失败。通过此修复,已为该包和其他本机包添加了适当的“过时” 。(缺陷号 26963839)-
分区: 当使用隐式表空间创建分区表时,效果是将每个分区放在自己的表空间中,没有为整个表指定表空间。由于序列化字典信息 (SDI) 存储在给定表使用的所有表空间中,因此将其存储在具有许多表空间的表中的成本变得令人望而却步。通过在用于存储 SDI 的表空间集中仅包含第一个分区的表空间来解决此问题。(漏洞#26762973)
参考资料:另请参阅:Bug #26765252。
分区:
CREATE VIEW
当服务器试图修剪基础表的分区时, 可以在分区表上引发断言(漏洞#26659699)分区: 重命名分区表时,表统计信息未使用新分区名称更新。(漏洞 #86074,漏洞 #25953183)
复制;JSON: 对于基于行的复制,如果没有在复制从站和主服务器上指定服务器变量
binlog_row_value_options=PARTIAL_JSON
(在 MySQL 8.0.3 中引入),则不会应用对 JSON 文档的部分更新。现在,只要从主服务器接收到 JSON 文档,复制从服务器就会对 JSON 文档应用部分更新,无论从服务器是否有binlog_row_value_options=PARTIAL_JSON
自己的设置。(漏洞#26762675)-
复制:
set_unknow_error()
类中 的函数Binlog_sender
已重命名为set_unknown_error()
. 感谢 Simon Mudd 的修复(以及 Bug 88149 中的拼写错误修复)。(缺陷 #27149075,缺陷 #88559)参考资料:另请参阅:Bug #26996065、Bug #88149。
复制: 当您使用 或 选项调用mysqld来初始化数据目录时,不再发出有关表可用性的警告消息,该 表在那个阶段不应该可用。此外,以前作为关于生成新 UUID 的警告发出的消息现在作为注释发出,因为在那种情况下生成新 UUID 是正常的。(漏洞#27115183)
--initialize
--initialize-insecure
mysql.gtid_executed
-
复制: 在 MySQL 8.0.3 中,二进制日志文件和索引文件的默认基本名称是
,使用主机名。host_name
-bin--log-bin
如果未提供该选项,并且如果--log-bin
提供的选项没有字符串或空字符串则使用此默认名称从 MySQL 8.0.4 开始,如果您不提供该--log-bin
选项,MySQL 现在使用binlog
作为二进制日志文件和索引文件的默认基本名称。在 MySQL 8.0.3 之前的版本中,没有该配置的二进制日志,因此在升级时不存在与现有二进制日志的不兼容问题。但是,为了与 MySQL 8.0.3 之前版本的现有二进制日志兼容,如果您提供--log-bin
没有字符串或空字符串的选项,则基本名称默认为
,使用主机的名称。host_name
-bin如果未使用
--log-bin
选项 ( ) 指定二进制日志文件名并且未通过设置系统变量 ( )ER_LOG_BIN_BETTER_WITH_NAME
指定服务器 ID ,则之前在启动时发出的警告消息现在作为信息性消息发出。如果尝试使用非唯一服务器 ID 进行复制,仍会发出警告消息。(漏洞 #27082922)server_id
ER_WARN_NO_SERVERID_SPECIFIED
复制: 在
Gtid_log_event
二进制日志文件中每个 GTID 事务之前,该transaction_length
字段使用 8 个字节用于 16777216 字节或更多字节的事务,而它应该使用最大允许的 9 个字节。(漏洞 #26993433)复制: MySQL 8.0.3 版中缺少对 Bug #22671846 的修复。(漏洞#26985976)
复制: Bug #26117735(MySQL Bug #86288)的修复可能会在使用 选项和选项运行mysqlbinlog时导致调试断言 ,具体取决于重写规则中指定的数据库名称。该问题现已得到纠正。(缺陷号 26878022)
--read-from-remote-server
--rewrite-db
复制: 使用 yaSSL 编译的 MySQL 和使用的半同步复制,死锁可能是由确认数据包的不正确处理引起的。yaSSL 可以同时读取多个确认包,但半同步复制的接收线程只处理轮询后看到的第一个确认包。现在,接收器线程处理缓冲区中存在的所有确认数据包。(漏洞#26865538)
复制: 在使用半同步复制的情况下,如果
RESET MASTER
在活动事务等待从服务器确认时发出,则Rpl_semi_sync_master_wait_sessions
等待完成后服务器状态变量中等待会话的计数不正确。(缺陷号 26748533)复制: 和
--log-slave-updates
选项--slave-preserve-commit-order
需要二进制日志记录。如果您指定这些选项并使用--skip-log-bin
或--disable-log-bin
选项禁用二进制日志记录,则会发出警告或错误消息。和 选项现在默认禁用--skip-log-bin
和 选项,因此当未指定这些选项时,不会发出警告或错误消息。 (缺陷号 26666259)--disable-log-bin
--log-slave-updates
--slave-preserve-commit-order
复制:
XA ROLLBACK
由于给出了不正确的事务 ID 而失败的语句可以使用正确的事务 ID 记录在二进制日志中,因此可以由复制从属操作。现在会在二进制日志记录发生之前检查错误情况,并且XA ROLLBACK
不会记录失败的语句。(漏洞 #26618925,漏洞 #87393)复制: 启动 Group Replication 插件的线程未被正确终止。这使得在杀死启动组复制的线程后无法停止或启动插件。(漏洞 #26435775)
复制: 对于 NDB 存储引擎,当 slave 使用散列搜索行时(默认情况下包含在
slave_rows_search_algorithms
MySQL 8.0.2 的系统变量设置中),用于存储行散列的表未正确清理在奴隶上删除记录后。该问题是由 NDB 存储引擎返回的变体错误值引起的,该值现已更正为预期值。(漏洞#26434966)复制: 更新特定于复制的存储库表的 MySQL 内部管理命令,例如在使用 mysqlrplsync实用程序进行复制同步检查期间,现在可以绕过读锁。这使得此类命令能够执行,而无需考虑系统变量和
read_only
模式 的设置。(错误#26414532,错误#86224)super_read_only
autocommit
复制: 二进制日志函数 应返回“写入文件错误” (
MYSQL_BIN_LOG::new_file_impl
返回错误“无法打开文件” ()。(漏洞 #26370868,漏洞 #86870)ER_CANT_OPEN_FILE
ER_ERROR_ON_WRITE
复制: 当写入集用于复制从属服务器的并行化(由
binlog_transaction_dependency_tracking
系统变量指定)时,现在在生成写入集信息时会考虑数据库的大小写和重音敏感度。transaction_write_set_extraction
启用系统变量时会生成写入设置信息 以前,重复的键可能会被错误地识别为不同的,导致事务具有不正确的依赖关系,因此可能以错误的顺序执行。(漏洞 #26277771,漏洞 #86078)复制:启用 该
transaction_write_set_extraction
选项后,如果发生并发 DDL,则在收集外键时存在不必要的序列化风险。Group Replication 现在利用新的数据字典与表定义和外键进行交互,从而解决了这种潜在的序列化问题。(缺陷号 26187850)复制: 半同步复制的接收线程无法接收到来自使用主/从协议压缩的从属设备的确认 (
slave_compressed_protocol=ON
)。接收器线程现在可以正确处理压缩确认。(漏洞 #26027024,漏洞 #86230)复制: 该
mysql_reset_connection()
函数现在清除写集会话历史记录。(漏洞 #25950554,漏洞 #86063)复制: 在复制从站上,在
XA_STATE
Performance Schema 表的字段中events_transactions_current
,XA 事务的状态被错误地报告为COMMITTED
而不是 在从站上应用语句PREPARED
之后XA PREPARE
(缺陷号 25940184)Replication:
binlog_rows_query_log_events
在多源复制拓扑中,当 在 master 上启用 时,slave 可能会发生内存泄漏 在这种情况下,Rows_query
存储在从服务器上的日志事件实例不会被删除。现在已清理日志事件实例并释放内存。感谢 Vlad Lesin 对补丁的贡献。(错误#25695434、错误#85371、错误#85034)复制: 对性能模式
replication_applier_global_filters
和replication_applier_filters
表的查询,显示在复制从站上配置的全局和特定于通道的复制过滤器,已经过优化,以便仅在过滤器更改时生成视图。以前,为创建的每一行生成一个视图。(缺陷号 25694140)复制: 修复了基于 GTID 的复制中的内存泄漏。在为跳过或忽略的事件更新存储库表后,内存未被释放。(错误#25656123,错误#85251)
复制: 当多线程从属服务器上的工作线程无法应用后续事务所依赖的事务时,协调器线程可以在收到问题通知之前开始调度相关事务。如果
STOP SLAVE
在这种情况下发出请求,则会导致在调试版本中引发断言。(缺陷号 25585436)复制: 当
group_replication_enforce_update_everywhere_checks=ON
Group Replication 插件检查是否存在外键级联并禁止更新此类表时。但是SET NULL
,未检查操作,这可能会导致数据不一致。现在,当 时 配置了选项group_replication_enforce_update_everywhere_checks=ON
,则对子表的操作将被阻止SET NULL
(漏洞 #25404162)复制: 在 Windows 上,组复制生成的错误现在包含详细的错误消息,而不仅仅是错误编号。(缺陷号 24918678)
复制: 在使用基于语句的复制时,如果 在以 结尾的 XA 事务
UPDATE
or ,并且该语句不影响任何行,则会发生复制错误。没有将 语句写入二进制日志,因此从属服务器将 XA 事务识别为在提交请求时仍处于活动状态。 即使事务不影响任何行,现在也会写入所需的(漏洞 #24812958,漏洞 #83295)DELETE
XA COMMIT ONE PHASE
XA END
XA END
复制: 复制客户端不再启用
LOCAL
功能LOAD DATA
,因为它们不使用LOAD DATA LOCAL
语句。(漏洞 #24763131)-
复制:
binlog_format=MIXED
关于临时表 ,混合格式复制 () 的行为以前,当使用混合格式二进制日志记录时,如果一条语句按行记录并且执行该语句的会话有任何临时表,则所有后续语句都被视为不安全并以基于行的格式记录,直到所有临时表都在该会话的使用被删除。此外,在log_slave_updates
启用的复制从站上,在连接期间,基于行的日志记录在所有后续会话中错误地继续,如错误中所报告的那样。现在,当使用混合二进制日志记录格式时,不会记录专门使用临时表的语句。涉及临时表和非临时表混合的语句仅针对非临时表上的操作记录在 master 上,而不会记录对临时表的操作。例外情况是临时表的创建使用基于语句的格式记录在二进制日志中。在这种情况下,
DROP TEMPORARY TABLE IF EXISTS
删除临时表时会在 master 上记录一条语句。通过这种行为更改,会话中不涉及临时表的其余语句不再需要被视为不安全的。根据混合格式复制的正常行为,安全语句现在以基于语句的格式记录,不安全语句以基于行的格式记录,无论会话中是否存在临时表。此外,错误中报告的问题已得到修复,因此使用该连接的后续会话现在可以使用适当的会话日志记录格式,而不管早期会话使用的格式如何。
当
binlog_format
是ROW
或STATEMENT
时,行为保持不变。对于基于行的二进制日志记录格式,不记录对临时表的操作,除了DROP TEMPORARY TABLE IF EXISTS
混合格式的语句。对于基于语句的二进制日志记录格式,对临时表的操作记录在主服务器上并复制在从服务器上,前提是涉及临时表的语句可以使用基于语句的格式安全地记录下来。binlog_format=STATEMENT
现在是在从站上复制临时表的唯一日志记录模式。您现在不能在运行时更改
binlog_format
设置 fromROW
或MIXED
to ,因为在以前的模式下二进制日志中会省略STATEMENT
任何 语句。即使创建了临时表,CREATE TEMPORARY TABLE
您仍然可以从 或 切换STATEMENT
格式ROW
。MIXED
感谢 Percona 的 George Lorch 和 Laurynas Biveinis 提供补丁。(缺陷 #18843730,缺陷 #72475)
复制: 属于一个组的所有服务器都必须具有由设置的唯一 UUID
server_uuid
,但这不是由组复制强制执行的,并且可以添加具有重复 UUID 的成员。(缺陷 #88452,缺陷 #27105803)复制: 作为加入组的一部分的分布式恢复期间,当应用程序发出信号表明它已应用所有事务时,它也在盲目地搜索部分事务。这是为了避免未来的应用程序错误,如果应用程序在此时停止,就会发生这种情况。但是,此搜索和删除仅对应用程序停止案例有意义。执行完成后不应执行此操作,否则会损坏或清除应用程序中继日志,从而导致数据丢失。为了解决这个问题,应用程序在等待执行完成时,不再搜索和删除部分事务。(漏洞 #88304,漏洞 #27049034)
复制: 组复制在插件启动和停止期间在服务器上执行内部操作,例如使用内部会话启用或禁用只读模式。打开此内部会话时,如果会话总数超过 设置的允许打开会话数
max_connections
,操作会按预期失败,但会留下一个线程,这会在以后引起问题。(错误#88182、错误#27008102、错误#27016552)复制:
--initialize
如果组复制配置为在使用or 初始化服务器时在服务器启动时启动--initialize-insecure
,因为复制应用程序基础结构未初始化,这会导致断言。现在,初始化服务器时不会启动组复制。(漏洞 #87759,漏洞 #26802395)复制: 在负载较重的组中,加入成员可能需要检索大量数据才能与组同步。如果检索到的数据量超过
View_change
4Mb 的数据包大小,则成员将无法加入组并进入Error
状态。现在,数据包大小取自slave_max_allowed_packet
,默认为 1GB。根据您的组进程的负载,您可能希望通过配置slave_max_allowed_packet
. (漏洞 #87701,漏洞 #26770576)Replication: 在加入成员持续收到交易的群组中,加入成员有时无法进入在线状态。这是由于测试传入消息队列的方式所致。(漏洞 #87631,漏洞 #26731317)
复制: 未正确验证启动或停止插件时对组复制变量的更改。现在,只有在插件未更改状态时才能更改变量。(错误#86874,错误#26372117)
Replication: 无论一台机器上配置了多少虚拟 IP,Group Replication 只能访问前 12 个地址。(错误#86772,错误#26324852)
-
复制: 改进了用于服务器启动的延迟初始化机制。现在,它只会在服务器处于读取模式之前阻止连接。(漏洞 #86271,漏洞 #26037344)
参考资料:另请参阅:Bug #84731、Bug #25475132。
复制: 当一个主要成员,例如单主组或多主组中的主成员,也有异步复制通道向其提供数据的主成员停止时,异步通道将继续应用更改。虽然
super_read_only
时已设置STOP GROUP_REPLICATION
,但这并没有停止任何已经运行的正在运行的异步复制通道。这意味着可以在成员本地进行更改,并且必须手动停止异步复制通道。现在,当组复制停止时,无论是由于错误还是STOP GROUP_REPLICATION
发出时,所有异步复制通道都将停止。(缺陷 #86222,缺陷 #26024253)-
复制: 改进了组复制的日志记录。现在,日志记录包括成员加入或离开、视图更改等信息。(缺陷 #84798,缺陷 #25495393)
参考资料:另请参阅:Bug #26422857。
-
Linux: 在 Alpine Linux 上,如果其标准输出不可写, mysql将失去与服务器的连接。此外,对于mysql和 mysqldump
stdout
,和的结果刷新顺序stderr
现在是确定的。(缺陷号 27169809)参考资料:另请参阅:错误 #17583。
Microsoft Windows: 在 Windows 上,启用了
myisam_use_mmap
和flush
系统变量,MyISAM
并不总是正确地刷新表文件。(缺陷号 26880757)JSON: 用作函数参数的 JSON 表达式
LAG()
并不总是被正确评估。(缺陷号 26740557)-
JSON:
JSON_ARRAY()
未正确处理 所采用的准备好的语句的重复执行 (漏洞#26704312)参考资料:此问题是 Bug #25867454 的回归。
-
JSON: 执行该
JSON_INSERT()
函数时,为确定给定插入是否被插入根元素而执行的检查测试了路径的长度是否为 1——也就是说,路径是否由确定哪个路径的单条腿组成插入元素在根元素中的位置。当路径的开头有自动环绕路径腿时会出现问题,在这种情况下,长度大于 1 的路径也可能引用根中的元素,因此检查路径长度并不能可靠地通知我们插入的目标元素是根元素还是其他元素。为了解决这个问题,用于检测根元素的路径长度检查已替换为检查匹配元素是否具有父元素;如果没有,则它必须是根元素。(漏洞#26649978)
参考:此问题是 Bug #86213、Bug #26022576 的回归。
JSON: 将 JSON 值序列化为其二进制表示时,有必要确保目标缓冲区有足够的空间来容纳所需大小的整数或双精度值。此缓冲区的分配以前仅保留所需的最小内存量,这使得此后不久很可能需要重新分配。这可能会对性能产生不利影响,尤其是在序列化具有许多数值的数组时。现在执行序列化的方式使得分配以指数方式增加目标缓冲区大小,这减少了处理大型数组时执行此任务所花费的时间。(错误#88656,错误#27171283)
-
JSON: 当 JSON 文档转换为字符串表示形式时,可以表示没有小数部分的浮点值,使得它们与整数无法区分。当这样一个 JSON 文档的字符串表示再次通过 JSON 解析器时,该数值最初被指定为浮点值的信息丢失了。
为纠正此问题,如果值没有小数部分且未使用科学格式表示,现在会将小数部分添加到 JSON 文档中浮点值的字符串表示形式。这使得浮点值的字符串表示与整数的字符串表示不同,因此即使再次解析该字符串,它仍将继续被视为浮点数。
此修复程序还
ST_GeomFromGeoJSON()
使用与其他 JSON 函数相同的 JSON 解析器,而不是自 MySQL 5.7.8 以来的自定义解析器;这种特殊处理是由于ST_AsGeoJSON()
丢弃了负零的小数部分(-0 而不是 -0.0),导致 JSON 解析器将 -0 解释为整数 0,从而失去了正零和负零之间的区别。由于ST_AsGeoJSON()
现在使用标准的 JSON 解析器,它可以像 -0.0 一样正确地表示负零,从而避免ST_GeomFromGeoJSON()
在解析ST_AsGeoJSON()
. (漏洞 #88230,漏洞 #27028889)参考资料:另请参阅:错误 #19504183。
JSON: 当插入
JSON
结果创建的值GROUP BY
,插入的值有时可能包括先前插入该列的所有值的串联。(错误#87854,错误#26867509)JSON: 当使用从 JSON 文档中提取的字符串作为参数调用时,
LEAD()
和LAG()
函数为每一行返回相同的值。(漏洞 #87839,漏洞 #26848089)JSON:在将直方图序列化为 JSON 时,表 中每个直方图的 last-updated 字段的微秒部分
INFORMATION_SCHEMA.COLUMN_STATISTICS
(显示上次更新直方图的时间)被丢弃,因此未存储。(错误#87833,错误#26846289)JSON: 当一个
JSON_SET()
语句JSON
使用部分更新将一个值更新为相同的值时(换句话说,当部分更新本质上是一个NOOP
)时,即使没有产生二进制差异,也可能会产生此操作的逻辑差异。现在在这种情况下,既不会生成逻辑更新也不会生成二进制差异。(错误#87113,错误#26483625)-
JSON: 在实施 JSON 部分更新后,同一个 JSON 文档在主从上可能有不同的二进制表示。如果发生这种情况,这可能会导致基于行的复制(使用二进制相等性在从属设备上找到匹配的行)失败。现在 JSON 文档的字符串表示用于比较。
此外,由于此修复,与以前相比,在更多情况下可以跳过更新;在二进制表示已更改但文档内容未更改的情况下,情况确实如此。(漏洞 #86532,漏洞 #26177130)
不再支持 Ubuntu 14.04 和 Debian 8。(漏洞 #27422291)
对于启用了未定义行为消毒器的 32 位平台上的构建,堆栈溢出检查可能会导致服务器退出。(漏洞#27224961)
服务器可能会在空间参考系统 (SRS) 创建期间挂起,而另一个会话正在使用该 SRS。(漏洞 #27220467)
在不涉及表权限的特权检查操作期间,不必要地获取了特权缓存的锁。(漏洞#27197483)
保留只读 变量
gtid_owned
或gtid_executed
系统变量导致服务器启动时断言失败。这些变量不能再持久化。(漏洞 #27193853)插件加载和卸载处理不当可能导致服务器退出。(错误#27151550、错误#88589、错误#27116827、错误#88483)
某些窗口函数的错误传播并不总是正确执行。(错误#27135084,错误#27136492)
内部函数未正确处理某些非常大的值的否定。(漏洞#27134168)
在执行涉及日期间隔的加法时进行更严格的检查。(漏洞#27134148)
最近引入的 SRID 和 COLUMN_STATISTICS 元数据锁没有被性能模式检测到。(漏洞#27124506)
派生表的名称在具体化并分配临时表名称之前未保存。后来,当试图重置表名时,这导致服务器由于缺少对名称原始值的引用而失败。(漏洞 #27121663)
在列上使用索引的性能模式查询
OBJECT_TYPE
可能会返回不正确的结果。(漏洞 #27121500)编译
-DWITH_ASAN=1
并-DWITH_ASAN_SCOPE=1
检测到堆栈使用后范围内存错误。(缺陷 #27108794,缺陷 #88460)FILE
准备好的SELECT ... INTO OUTFILE
语句的特权检查不正确。(漏洞 #27094955)log_error_verbosity
当小于 3 时,一些具有信息优先级的消息被写入错误日志 。(缺陷 #27082862)该
ha_create_table_from_engine
函数未能将表对象传递给ha_create
例程。(缺陷号 27066335)估算内存需求时,不包括未使用窗口定义元素的分区依据和排序依据。这通过分配解析上下文 (
CTX_WINDOW
) 来解决,但仅当当前上下文为 时CTX_NONE
。作为此修复的一部分,未使用的窗口定义现在在检查语法和语义错误后被删除。(漏洞 #27062031)GROUP BY
ROLLUP
生成的 aNULL
未正确处理。(缺陷号 27060420)在事件到期时禁用全局自动提交的事件计划程序事件导致引发断言。(漏洞 #27041552,漏洞 #88255)
如果更改排序规则,则字符串值用户定义变量的长度计算可能不正确。(缺陷 #27041543,缺陷 #88256)
CREATE TABLE ... SELECT
InnoDB
如果预先存在的视图引用要创建的表,则尝试创建非表的语句会引发断言。(漏洞 #27041536,漏洞 #88258)当用作函数的参数时 ,可以针对不同的排序规则以不同方式处理列
IF()
的值 。TIMESTAMP
(漏洞 #27041526,漏洞 #88259)使用基于语句的二进制日志记录,
CREATE TABLE ... SELECT
用于创建BLACKHOLE
表会引发断言。(缺陷 #27041516,缺陷 #88260)对于调试版本,
TIMESTAMP
可以在explicit_defaults_for_timestamp
启用时引发 - 相关断言。(漏洞 #27041502,漏洞 #88261)在 下
LOCK TABLES
,如果语句与外键关系中的表被锁定的模式不兼容,则尝试在具有外键的表上执行 DML 语句会导致断言失败。(错误#27041477,错误#88264)在
LOCK TABLES
语句处于活动状态时,从INFORMATION_SCHEMA.FILES
表中进行选择的查询可能会引发断言以尝试获取元数据锁。(漏洞 #27041452,漏洞 #88266)组件安装未正确执行自动增量处理,这可能导致服务器退出。(漏洞 #27041374,漏洞 #88276)
使用
big_tables=1
andcharacter_set_connection=ucs2
,SHOW TABLE STATUS
可以提出断言。(缺陷 #27041323,缺陷 #88279)在备份锁处于活动状态的情况下,允许错误地删除二进制日志文件和中继日志文件。(漏洞 #27030339,漏洞 #88238)
在非覆盖二级索引的扫描中评估结束范围条件时,并且结束范围条件引用索引虚拟列时,
InnoDB
有时会从索引中读取错误的列,这可能导致断言失败或错误结果。(漏洞 #27010089)在
event
过滤规则的项目中,audit_log
插件没有正确处理指定为JSON
数组的值。(漏洞 #27010045)添加日期值时有时可能会出现整数溢出,并可能返回无效结果。(漏洞 #27004806)
TRUNCATE TABLE
如果多个表实例被锁定,则在具有活动的InnoDB
表上 会引发断言。LOCK TABLES
(漏洞#26999526)一些窗口函数包括 在它们应该有的所有情况下都
NTH_VALUE()
没有返回 。NULL
(缺陷号 26975882)-
如果
LEAST()
or 的时间参数之一GREATEST()
是 typeDATETIME
,但聚合数据类型不是VARCHAR
or 时间类型,则LEAST()
orGREATEST()
项目具有为其设置的时间属性,尽管它不是时间数据类型。LEAST()
因此, or项的时间属性GREATEST()
(包括其小数精度)未正确计算,从而导致稍后语句执行失败。为了解决这个问题,如果一个或多个(但不是全部)参数是时间类型,则
LEAST()
or的数据类型GREATEST()
现在暂时设置为时间类型,而不管它们的聚合数据类型如何。(漏洞#26975864) IFNULL()
在处理多个参数时并不总是正确检查错误。(错误#26975848、错误#27062796、错误#27062694)为客户端/服务器协议启用压缩后,大小为倍数的逻辑数据包
0xFFFFFF
可能会导致连接断开。感谢 Facebook Inc. 提供补丁。(错误#26974113,错误#88092)从多个会话中多次安装和卸载插件可能会导致服务器无响应。(漏洞#26946491)
当在 MySQL 5.7 数据目录上启动 MySQL 8.0 服务器时 ,包含 MySQL 8.0 中删除的功能的虚拟列定义导致启动失败并出现“未选择数据库”错误。(缺陷 #26945125,缺陷 #88040)
-
这些错误发生在从 MySQL 5.7 就地升级到 8.0 之后:
使用设置启动服务器会
--explicit-defaults-for-timestamp=0
返回“缓存时间”错误 的无效默认值。使用配置设置 启动服务器返回
--initialize
了 “SET_TIME”错误的无效默认值。--explicit-defaults-for-timestamp=0
(错误#26944731、错误#88039、错误#26948678、错误#88032)
使用公用表表达式和包含窗口函数的派生表或视图的查询产生了不正确的结果。(漏洞 #26907753,漏洞 #87939)
--symbolic-links
关于使用和--skip-symbolic-links
服务器选项(及其等效项) 的弃用警告得到了澄清 。--help
使用该选项调用时,服务器不再警告缺少数据目录 。(错误#26898576,错误#87913)-
VALUES()
在某些情况下没有正确处理。(漏洞#26881946)参考资料:另请参阅:Bug #19601973、Bug #17458914。
MySQL Cluster 中的表空间发现机制被禁用,当表存在于存储引擎字典中但不存在于 MySQL 数据字典中时,将阻止序列化字典信息导入数据字典。(缺陷号 26867488)
对于调试版本,语句可能会错过对相关生成列的验证检查
UPDATE
,从而导致服务器退出。(漏洞#26838771)对于窗口函数,可能会在定义窗口时产生未定义窗口的错误。(漏洞 #26813454,漏洞 #87780)
当物化派生表被确定为多余时,删除相应对象的例程会使它处于不一致状态。现在在这种情况下,派生表的
TABLE_LIST
对象在其物化对象被删除后保持一致状态,方法是将其表指针设置为NULL
. (缺陷号 26798989)MAX()
对于在视图中使用HAVING
子句 的查询,获得了不正确的结果 。(漏洞 #26781725)用于视图下的表的定义更改的元数据锁定可能与表上其他语句的元数据锁定不一致。(缺陷号 26770836)
在 MySQL 8.0 中,视图列名称限制为 64 个字符。具有较长列名的 MySQL 5.7 视图在升级到 8.0 期间被标记为无效。现在,此类视图在升级期间会产生错误,并且必须在升级成功之前将其更改为具有合法的列名。(漏洞 #26743291,漏洞 #87650)
并发调用
GET_LOCK()
可能导致死锁,即使等待时间为 0。(错误 #26739438,错误 #87620)FROM_UNIXTIME()
并不总是能与LAG()
. (缺陷号 26739028)在子句中包含因违反约束而失败的值的
INSERT
语句之后,没有理由返回错误的类似语句可能会导致服务器退出。(漏洞#26734162)BLOB
ON DUPLICATE KEY UPDATE
性能模式现在存储重写的而不是原始的 SQL 语句文本(如果可用)。(漏洞 #26732229)
重新执行使用窗口函数的准备好的语句可能会导致服务器退出。(错误号 26730020)
DECIMAL
如果表包含具有 5.0 之前数据类型 的列,则就地升级到 MySQL 8.0 会导致服务器退出 。不支持此数据类型,因此升级现在会检测此类列并警告无法进行就地升级。受影响的表必须通过转储和恢复来升级。(漏洞#26727481)用于对数据字典缓存哈希映射中的键进行排序的比较运算符错误地确定不同存储引擎使用的两个存储引擎私有 ID 是相等的。(漏洞#26723442)
XID_GTRID
Performance Schema 表列中的 值events_transactions_current
对于 XA 事务显示不正确。(漏洞 #26710081,漏洞 #87559)SHA2()
在某些字符集中传递用户定义的变量 时,可能会导致不正确的结果或服务器退出 。(漏洞 #26704451)-
如果在为半连接中的重复清除设置临时表时发生错误(例如,因为磁盘已满),服务器不会正常终止并显示适当的错误消息。
现在,如果临时表未成功创建,查询将中止。(漏洞#26679983)
IN
在执行使用散列半连接的子查询 后,服务器并不总是正确清理 。(漏洞#26679495)由于尝试将 客户端插件链接到嵌入式服务器库,使用
-DWITHOUT_SERVER=ON
CMake选项 构建失败。authentication_ldap_sasl_client
(漏洞#26665217)-
在创建数据目录或从 MySQL 5.7 升级到 8.0 期间,如果服务器以模式启动,则服务器启动将因性能模式初始化失败而失败
read_only
。此外,信息架构元数据未在启动时更新,性能架构和信息架构版本信息在未验证架构表已创建的情况下存储。用于数据字典和信息模式系统视图的版本控制方案现在与性能模式版本控制方案一致。(错误#26636238,错误#87436)
表中的
CREATE_OPTIONS
列INFORMATION_SCHEMA.TABLES
没有显示正确的信息。(漏洞#26634507)对于使用外部联接且派生表引用
const
外部联接内部表中的值的查询,可能会返回不正确的结果。(漏洞#26627181)AFTER UPDATE
INSERT ... ON DUPLICATE KEY UPDATE
当要更新的值和新值相同时,不会调用触发器 。(错误#26626277,错误#87371)错误地允许将匿名角色分配给
mandatory_roles
系统变量。此外, 除了 设置全局系统变量通常需要的or 权限之外,mandatory_roles
现在还需要权限才能给 now赋值。(漏洞#26576989)ROLE_ADMIN
SYSTEM_VARIABLES_ADMIN
SUPER
如果该值在服务器启动时无效,则服务器回退到使用内置错误消息
lc_messages_dir
,但如果lc_messages
orlc_time_names
无效则不会。现在,如果这些变量中的任何一个在启动时无效,服务器将使用内置消息。(漏洞#26576922)SET DEFAULT ROLE ALL
不包括在mandatory_roles
系统变量中命名的角色。(漏洞 #26571995)在 Windows 上,CMake不会自动为某些 Visual Studio 版本添加 x64 工具链支持。(缺陷号 26566360)
当带有
ORDER BY
子句的派生表被合并到外部查询中时,以及当外部查询中的列ORDER BY
也未被引用时,可能会出现问题。(漏洞 #26542829)在同一模式中并行创建表时,将模式 SDI 并行插入到 SDI B 树中可能会引发断言。(漏洞 #26539665,漏洞 #87225)
更改
UMASK
和UMASK_DIR
环境变量的默认值对数据库目录和表文件访问没有影响。(缺陷号 26529942)对于调试版本,派生表列引用的不正确可空性评估可能会导致
CONCAT()
引发断言。(漏洞 #26524721)服务器退出可能是由于多个线程同时尝试注册和注销元数据性能模式对象,或者获取和释放元数据锁。(漏洞 #26502135)
当安装 Microsoft Visual C++ 2010 Redistributable Package 时,Windows 的 MSI 程序包无法检测到。(漏洞 #26501092,漏洞 #87139)
对包含
BLOB
列的表使用窗口函数的查询可能会导致服务器退出。(缺陷号 26496880)属于插件的持久变量在服务器启动时并不总是得到正确处理。(漏洞#26495619)
DISINCT
对于使用范围访问和 . 的临时表使用和ORDER BY ... LIMIT
执行 的查询,可能会发生服务器退出ORDER BY
。(漏洞 #26483909)如果 LDAP 身份验证插件的关联系统变量设置为无效值,它们可能会失败。(漏洞#26474964)
用于 RHEL6 及更高版本的 Linux RPM 规范文件更新了注释,建议安装该
redhat-rpm-config
软件包以添加方便的宏,从而更轻松地重建 RPM 软件包。感谢 Simon Mudd 提供的补丁。(漏洞 #26474153,漏洞 #87098)如果错误日志配置错误并且服务器无法启动,则不会产生描述问题的输出。(漏洞 #26447825,漏洞 #87087)
当物化半连接操作被评估不止一次,并且物化中的一个表是一个
const
表(即,具有连接类型JT_CONST
)时,在第二次物化期间引用该const
表时访问了无效数据。(漏洞#26436185)对于使用外部身份验证方法的身份验证插件,密码过期选项无法正常工作。(漏洞#26435766)
ORDER BY
在包含外连接和子查询的查询中 添加导致在子查询返回 0 行的情况下,为子查询中的列定义的常量值被错误地提升为常量值。(漏洞#26432173)对于
autocommit
系统变量,Performance Schemavariables_info
表始终将VARIABLE_SOURCE
列报告为COMPILED
. (缺陷号 26428017)对于调试版本,
INSERT IGNORE
试图插入列的语句会NULL
引发GEOMETRY NOT NULL
断言,因为没有可将其转换为的有效值NULL
。现在,这已作为不可忽略的ER_BAD_NULL_ERROR_NOT_IGNORED
错误处理。(漏洞#26412713)SET PERSIST_ONLY
在不应该更改VARIABLE_SOURCE
性能架构表的列时。variables_info
(缺陷号 26395134)服务器无法检查分区名称的最大路径长度。(缺陷号 26390632)
-
当带有缓冲的窗口跟随唯一索引上的等值连接时会出现问题,这是因为窗口修改了输入记录并假设下一次控制传递回连接时,新记录被读取到输入记录。此问题已通过在此类情况下恢复输入记录得到解决。
笔记此修复已在 MySQL 8.0.27 中恢复。
(缺陷号 26389508)
参考资料:另请参阅:Bug #32820802。
包含混合反斜杠和反引号的标识符可能无法正确解析。(漏洞#26372491)
audit_log
THD
可以使用不正确的线程 ID 信息创建插件对象,从而导致断言失败。(漏洞#26362452)数据字典表中的
HISTOGRAM
列column_statistics
使用名为的键charset-id
来指示排序规则编号。此密钥已重命名为collation-id
。(漏洞 #26330090,漏洞 #86794)skip_name_resolve
在启用系统变量 的情况下启动服务器 可能会导致localhost
帐户条目匹配非localhost
主机。(错误#26328274、错误#26202411、错误#86546)如果已配置的错误日志服务存在但无法初始化,则日志信息将丢失。现在,如果在启动时配置了日志服务但无法初始化,则有关问题的诊断将发送到默认日志服务(或者如果失败,则直接发送到错误流),然后服务器退出。如果在运行时配置了日志服务但无法初始化,则会将诊断信息发送到客户端。(漏洞 #26286871,漏洞 #86728)
安装和卸载 Performance Schema 示例插件并同时从与这些插件关联的表中删除可能会导致服务器退出。(漏洞 #26281359)
当
HASH_SCAN
被指定为slave_rows_search_algorithms
系统变量的值之一时,这是 MySQL 8.0.2 的默认值,并且基于行的复制生效,对包含虚拟生成字段的表的更新可能会引发断言。该问题是由于在生成虚拟生成字段的字符串表示以创建用于搜索的哈希值时出现错误引起的。为了解决这个问题,MySQL 不再为虚拟生成的字段创建哈希。(缺陷号 26280724)服务器允许
SHOW CREATE TABLE
使用为全文搜索创建的非表文件。(漏洞#26271244)对于调试版本,
CREATE OR REPLACE VIEW
现有视图针对大于 64 个字符的列名提出断言。现在报告了一个适当的错误。(缺陷号 26266789)SET PERSIST
由于对写入的排序变量可能无效mysqld-auto.cnf
。变量现在按照保留的顺序写入。(缺陷号 26259671)在启用 GTID 的服务器上尝试使用mysqlpump进行 部分备份失败,并产生一条错误消息,错误地表明这是不可能的。(可以使用该
--set-gtid-purged
选项。)(缺陷 #26199978)GRANT GRANT OPTION ON *.* TO
授予user
GRANT OPTION
静态而非动态权限。REVOKE ALL ... FROM CURRENT_USER()
撤销静态而非动态特权。(错误#26191109,错误#25658967)错误日志记录可能会尝试记录已释放的消息,从而导致服务器退出。(漏洞 #26188656,漏洞 #86562)
HAVING
条件已针对没有GROUP BY
子句的聚合列上的别名进行 了优化。(缺陷号 26188578)ST_Crosses()
当至少一个参数是几何集合并且必须考虑几何集合的多个元素以确定几何是否交叉时,可能会返回不正确的结果。(漏洞 #26188208,漏洞 #86559)MBROverlaps()
两条交叉的垂直线错误地返回 false。(错误#26188118,错误#86558)ALTER USER
产生了一个错误。(漏洞#26174169)user
DEFAULT ROLE ALLmysqldump
--where
因大选项值异常退出 (错误#26171967、错误#86496、错误#27510150)使用带有窗口的窗口函数的查询,该窗口根据聚合函数的结果进行分区或排序,其中评估为
NULL
返回不正确的结果。(缺陷号 26164633)ALTER TABLE
由于未删除为使用表复制算法 的操作创建的文件实例,性能模式可能会泄漏内存。(漏洞 #26152751,漏洞 #86482)在某些情况下,创建临时表失败
REPLACE
可能会导致在后面的语句中断言。(漏洞 #26126789,漏洞 #86422)mysqlpump没有正确解析 它执行以确定表结构
TABLESPACE
的语句的结果中的子句SHOW CREATE TABLE
(漏洞#26116415)udf_example
二进制分发版中省略 了可加载函数的二进制文件。(错误#26115002,错误#29178542)长
SET PERSIST
语句可能导致服务器退出。(漏洞 #26100122)使用了不正确的公式来计算几个字符串函数的结果字符串的最大长度:
QUOTE()
、AES_DECRYPT()
和WEIGHT_STRING()
。例如,这可能会影响为创建的字符列的长度CREATE TABLE ... AS SELECT ... QUOTE()
。(缺陷 #26049942,缺陷 #86305)由于检查数据目录下的模式目录而不是检查数据字典,模式创建和删除操作可能会失败。(漏洞 #26043994,漏洞 #86282)
SHOW PLUGINS
没有处理正在终止的插件,导致服务器退出。该语句现在显示诸如DELETING
. (缺陷 #26029765,缺陷 #86243)某些语句可能会导致摘要代码中的缓冲区溢出。感谢 Laurynas Biveinis 和 Roel van de Paar 提供补丁。(漏洞 #26021187)
以前,当 Performance Schema 初始化失败时,它会向错误日志写入一个非特定的初始化失败警告。现在它会打印有关内存分配失败的更具体的消息。(漏洞#25996291)
-
当优化器选择松散索引扫描时,即使唯一索引没有索引扩展,具有唯一索引的表也可能出现不正确的结果。(错误#25989915、错误#86165、错误#26532061、错误#87207)
参考资料:此问题是 Bug #21749123、Bug #78244 的回归。
对于
XA COMMIT
,预提交处理可能会在诊断区域中设置一个错误,该错误未在调用方正确报告,从而导致引发断言。(错误#25978684,错误#86142)MIN_VALUE
Performance Schema表 的列variables_info
在 32 位 big-endian 平台上显示不正确的值。(缺陷号 25967079)当优化器排除与临时表关联的子查询时发生内存泄漏。(漏洞#25951134)
当被视为只读的视图或派生表具有不被视为只读的嵌套引用时,可以引发更新断言。(缺陷 #25832861,缺陷 #85796)
服务器自动生成的证书和密钥文件可能具有不正确的访问模式。(缺陷号 25832856)
对
INFORMATION_SCHEMA
TABLES
和STATISTICS
表的查询,如果使用索引条件下推进行评估,可能会下推内部数据字典函数,从而导致引发断言。(缺陷 #25820175,缺陷 #85765)ST_AsText()
可以读取释放的内存。(漏洞 #25818451)CREATE USER IF NOT EXISTS
如果用户存在,则不会写入二进制日志。如果用户在从服务器上不存在,这可能会导致不一致的复制行为。发生了类似的问题ALTER USER IF EXISTS
。为了避免不一致,这些语句现在被写入二进制日志。(漏洞 #25813089,漏洞 #85733)无效的
utf8
输入字符串导致堆缓冲区溢出错误。(错误#25811623,错误#25946444)竞争条件使得通过同时从多个会话中保留变量而导致服务器退出成为可能。(缺陷号 25768813)
插件可以创建或删除表,但在卸载或卸载插件时
INFORMATION_SCHEMA
,引用表的视图 未被验证。INFORMATION_SCHEMA
(错误#25761992,错误#85579)mysql向文件写入了一些密码相关的语句
.mysql_history
。(缺陷号 25750609)对内部内存缓冲区的不正确处理可能会导致服务器退出。(漏洞#25737271)
在启用了 GTID 的只读服务器上,
DROP TEMPORARY TABLE IF EXISTS
与不存在或过滤表相关的语句可能会将不必要的事务写入二进制日志并创建不必要的 GTID。在这种情况下,丢失的临时表之前被假定为事务性的,导致语句被拆分。现在,MySQL 检查临时表是否存在,以及它的DROP TEMPORARY TABLE
语句是否记录在二进制日志中。如果不是这种情况,则不会创建 GTID。感谢 Laurynas Biveinis 提供补丁。(错误#25656992,错误#85258)MeCab 全文解析器插件无法在 Windows 上加载。(漏洞#25633175)
SET_TIME
Performance Schema 表 的列variables_info
未正确初始化。(漏洞 #25608115)执行包含从某些语句的内容创建表的语句的存储过程
SELECT
可能会导致内存泄漏。(缺陷号 25586773)性能模式无法检查客户端连接的最大主机长度。(漏洞 #25510805)
对于空间函数,当在不同的 SRID 中给定参数时,一些集合操作会产生 SRID 0 的结果。(漏洞 #25510403)
较大
--ssl-cipher
的值可能会导致客户端程序退出。(漏洞#25483593)在准备存储过程调用期间缺少参数计数检查可能会导致服务器退出。(漏洞 #25398451,漏洞 #84512)
UNION DISTINCT
用于处理具有大量列 的递归公用表表达式的临时表现在使用MEMORY
引擎而不是InnoDB
. (缺陷号 25190109)如果 MySQL
root
用户帐户被重命名,访问INFORMATION_SCHEMA
视图的查询将返回一个错误,指出指定为定义者的用户不存在。为避免此错误,新的预留帐户'mysql.infoschema'@'localhost'
现在DEFINER
用于INFORMATION_SCHEMA
查看。(漏洞 #25185947,漏洞 #84027)当
UPDATE
需要一个主键大于 1024 字节的临时表并且该表是使用创建InnoDB
的时,服务器可以退出。(缺陷号 25153670)SET DEFAULT ROLE
不像其他账户管理报表那样是交易性的。(漏洞#25122897)mysqlpump
将gtid_executed
表包含在mysql
系统数据库的转储中,导致在gtid_executed
重新加载转储后重新启动服务器时位置丢失。mysqlpump
不再转储gtid_executed
表。(漏洞 #25109007)对于几何计算,无效的输入参数可能会导致结果缓冲区不正确,并导致引发断言或服务器退出。(缺陷号 25062396)
IFNULL(decimal, int)
GROUP BY
在包含临时表并使用临时表执行的查询中使用时,小数点后可能会丢失一位数字 。(缺陷 #25051195,缺陷 #83699)对于某些查询,例如涉及 的查询, 可能会错误地计算
UNION
列宽 ,从而导致. (漏洞 #25050090,漏洞 #83667)GROUP_CONCAT()
group_concat_max_len
改进了性能模式表事件的审计日志记录,
global_variables
以便不报告具体化但未报告给 SQL 层的行的事件。(缺陷号 24970428)ST_Buffer()
可能会返回无效结果或为某些本应生成有效输出几何的输入引发错误。(错误#24947868、错误#26735293、错误#25662426)对于启用了 AddressSanitizer 或 Undefined Behavior Sanitizer 的构建,在 Performance Schema 计时器初始化期间可能会发生被零除。(漏洞#24785784)
严重依赖元数据锁定 (MDL) 子系统的操作会导致性能下降。在存在大量 MDL 票证的情况下,遍历 MDL 票证列表非常耗时。(缺陷 #24734971,缺陷 #83143)
-
当
binlog_format
是ROW
或MIXED
时,不记录对临时表的操作。以前,此规则的例外情况是,当连接在会话结束时终止时,会为会话中DROP TEMPORARY TABLE IF EXISTS
打开的任何临时表记录该语句。对于基于行的复制,此行为会导致不必要地写入二进制日志,并为启用这些功能的 GTID 添加事务序列号。现在,当在会话中创建临时表时,将跟踪二进制日志记录格式。
DROP TEMPORARY TABLE IF EXISTS
如果创建临时表时基于语句的格式有效,则仅在会话结束时记录该语句,因此记录该语句CREATE TEMPORARY TABLE
。如果在创建表时使用了基于行或混合格式的二进制日志记录,DROP TEMPORARY TABLE IF EXISTS
则不会记录该语句。感谢 Laurynas Biveinis 提供补丁。(错误#24670909、错误#83003、错误#28606948)
并发
INSERT
、ALTER TABLE
和DROP DATABASE
操作可能会导致死锁。(漏洞 #24510948,漏洞 #82704)在某些情况下,该
audit_log
插件可能会递归地锁定互斥量,从而导致服务器无响应。(漏洞 #24437533)在某些情况下,即使存在带析取的谓词, 优化器也会为查询选择松散索引扫描 (
QUICK_GROUP_MIN_MAX_SELECT
) 。 当子句中的条件导致多个不相交的范围树GROUP BY
时,通过不执行范围扫描来解决此问题。WHERE
(漏洞#24423143)当优化器在生成的列上选择索引来获取值时,可能会出现不正确的结果。(错误#24345509,错误#29451999)
现在所有平台都包含调试符号包
apt
(以前,它们仅在 Debian 9 上可用)。(错误#24008883,错误#27990381)使用
SQL_MODE=''
,UNIX_TIMESTAMP(COUNT(1))
返回NULL
而不是预期的 0。(漏洞 #23529242)-
BLOB
当从具有带约束 的索引虚拟列的表中删除行时,NOT NULL
生成的列表达式NULL
在被删除的行之一中计算为,未正确执行NULL
到其等效项的转换。NOT NULL
(漏洞#23321196)参考资料:另请参阅:Bug #23037025、Bug #21345972。
设置
MYSQL_GROUP_SUFFIX
环境变量没有效果。(漏洞 #23072792)在生成的列评估期间缺少对错误处理的检查可能会导致服务器退出。(漏洞 #23021693)
要检查表是否为空,
ALTER TABLE
执行表扫描,这是低效的。(缺陷号 22688065)ALTER TABLE
当 a 处于活动状态时 未能获取表空间元数据锁LOCK TABLES
可能会导致引发断言。(缺陷 #22486020,缺陷 #79820)当常量表达式包含对其要替换的列的引用时,不再执行常量传播。(缺陷号 20964700)
如果使用连接缓冲(例如,使用块嵌套循环算法),具有许多左连接的查询会很慢。(缺陷 #18898433,缺陷 #72854)
REGEXP
未能找到\0
字符串表达式中某个字符之后出现的匹配项。(错误#17541193,错误#70470)从涉及聚合的视图中进行选择并
WITH ROLLUP
可能导致虚假的 Columncol_name
cannot be null错误。(缺陷 #11755860,缺陷 #47693)COALESCE()
可以改变FLOAT
字段的值。(缺陷 #11751705,缺陷 #42666)在某些情况下,服务器用来确定是否使用抽样的行估计可能不准确。这是因为直方图过程假设表中行数的估计是最新的,尽管它没有被(例如)
INSERT
或DELETE
语句更新。现在直方图过程请求更新的行数。(缺陷 #88710,缺陷 #27197709)无法终止长时间运行的正则表达式匹配。(漏洞 #88676,漏洞 #27183583)
优化器
SET_VAR
提示(请参阅 变量设置提示语法)设置cte_max_recursion_depth
被忽略。(漏洞 #88594,漏洞 #27153338)处理范围框时,如果找到范围框的第一行,则不会存储其位置。这可能会导致从帧缓冲区中检索行失败。(缺陷 #88568,缺陷 #27149369)
-
启用时,服务器未
LOAD DATA
正确 处理由 激活的触发器--skip-log-bin
。(错误#88516,错误#27128534)参考:这个问题是 Bug #27041382 的回归。
执行 XA 事务和作用于视图的存储过程未正确执行。(缺陷 #88326,缺陷 #27058931)
当表包含长度为零的列时,优化器在某些情况下可能会分配一个记录缓冲区,该缓冲区太小而无法容纳查询读取的列。(漏洞 #88283,漏洞 #27041288)
包含无效语法的触发器,后跟
INSERT
未指定列列表的触发器,无论如何都尝试插入新行。(漏洞 #88274,漏洞 #27041382)对于具有多个表达式的
LAST_VALUE()
和帧, 窗口函数并不总能产生正确的结果 。ORDER BY
(漏洞 #88186,漏洞 #27010574)-
对先前问题的修复导致聚合数据类型被设置为
VARCHAR
每当结果类型为字符串且列大小大于 255 个字符(最大长度为CHAR
)。这导致数据类型出现问题,例如JSON
其结果类型是字符串,但支持长度超过 255 个字符的字段值。现在,在这种情况下,VARCHAR
当聚合列的类型为CHAR
orBINARY
(均在内部表示为字符串)但其大小超过CHAR
. (漏洞 #88073,漏洞 #26960106)参考资料:此问题是 Bug #83895、Bug #25123839 的回归。
ORDER BY
包含引用参数 的列表的准备好的语句并不总是被正确处理。(错误#87863,错误#26867652)DENSE_RANK()
由于缓存比较器的过早初始化,在使用缓冲时分区中的第一行无法正常工作ORDER BY
。(漏洞 #87760,漏洞 #26802696)-
优化器选择了一个复合索引进行
ref
访问,其中只能使用键的第一部分。复合密钥是合适的,但被认为成本较高。这是因为,当在同一个索引上的ref
访问和 访问之间进行选择时,我们更喜欢是否满足某些条件,其中之一是选择避免 -access 如果它具有过于乐观或不切实际的低成本,这可能发生在 非常低的。即使对访问行数 的估计比对访问的估计更可靠,也会这样做。(错误#87613,错误#26727773)range
range
ref
records_per_key
range
ref
参考资料:另请参阅:Bug #23259872。
当存储函数与表列值一起用作
WHERE
谓词中的参数时,其内部not_null_tables
属性被错误地设置为非空值。如果此谓词应用于外连接操作并且其中一个参数来自外连接的内表,则有时会(错误地)使用该谓词将外连接转换为内连接。根据 SQL 标准,只有具有该RETURNS NULL ON NULL INPUT
属性的函数才应该以这种方式运行。由于 MySQL 当前未实现此属性,因此存储函数已更改,因此它们不再实现该RETURNS NULL ON NULL INPUT
行为。(漏洞 #86922,漏洞 #26389402)视图或派生表在使用执行列聚合的 定义时包含不正确的数据
SELECT
,并且其结果使用 筛选HAVING
。(漏洞 #86840,漏洞 #26360114)服务器处理触发器和生成的列不正确。(漏洞 #86637,漏洞 #26251621)
BLOB
对返回 a (或基于BLOB
such 的类型) 的子查询进行分组的查询JSON
有时无法找到组边界,因此返回不正确的结果。(错误#78787,错误#21974696)