MySQL 8.0版本说明/ MySQL 8.0.19的更改(20-01-13,一般可用性)

MySQL 8.0.19的更改(20-01-13,一般可用性)

有关升级、降级、平台支持等的一般信息,请访问https://dev.10bet靠谱mysql.com/doc/relnotes/mysql/8.0/en/

重要的

使用MySQL安装程序安装的MySQL 8.0.19存在一个问题,如果在服务器配置步骤中选择了MySQL企业防火墙,则会阻止服务器启动。如果服务器启动失败,请单击取消结束配置过程并返回仪表板。您必须卸载服务器。

解决方法是运行MySQL安装程序没有MySQL企业防火墙选中。然后使用手动安装的说明安装MySQL企业防火墙(参见正在安装或卸载MySQL企业防火墙)。这个问题在MySQL 8.0.20中得到了纠正。

账户管理笔记

  • MySQL现在允许管理员配置用户帐户,以防止由于密码错误而导致多次连续登录失败,从而导致帐户临时锁定。可对每个帐户配置所需的失败次数和锁定时间FAILED_LOGIN_ATTEMPTS而且PASSWORD_LOCK_TIME选项的创建用户而且改变用户语句。看到密码管理.(Bug #27733694, Bug #90169)

审计日志记录

  • 分析表语句现在生产审计事件。(错误# 29625461)

  • 审计日志连接事件现在包括客户机传递的任何连接属性。连接属性日志记录支持新型XML日志文件格式和JSON格式,但不支持老式XML格式。看到审计日志文件格式

编译的笔记

  • 微软的Windows操作系统:的最低版本CMake从命令行编译现在是3.15。(Bug #30332632, Bug #96954)

配置说明

  • FPROFILE_GENERATE而且FPROFILE_USECMake选项可用于在GCC中试验剖面引导优化(PGO)。看到cmake / fprofile.cmake在MySQL源发行版中获取有关使用它们的信息。这些选项已经在GCC 8和GCC 9以及Clang中进行了测试。

    启用FPROFILE_USE还使WITH_LTO(链接时间优化)。(Bug #30089834, Bug #96314, Bug #30133324, Bug #96410, Bug #30164113, Bug #96486)

  • Innodb_system_rows_readInnodb_system_rows_insertedInnodb_system_rows_deleted添加了状态变量来计数行操作InnoDB属于系统创建的模式的表。新的状态变量与现有的状态变量相似Innodb_rows_readInnodb_rows_insertedInnodb_rows_deleted状态变量,用于计数上的操作InnoDB既属于用户创建的模式也属于系统创建的模式的表。

    新的状态变量在复制环境中非常有用relay_log_info_repository而且master_info_repository变量被设置为表格对象上执行的操作会导致slave上的行操作计数更高slave_master_infoslave_replay_log_info,slave_worker_info表,它们属于系统创建的mysql模式。为了有效地比较主行和从行操作计数,现在可以使用新的状态变量提供的计数数据排除系统创建模式中的表上的操作。

    感谢Facebook的贡献。(Bug #27724674, Bug #90148)

弃用和删除说明

  • 设置hash_join优化器开关(见optimizer_switch系统变量)不再有任何效果。这同样适用于HASH_JOIN而且NO_HASH_JOIN优化器提示。优化器开关和优化器提示现在都已弃用,并将在MySQL的未来版本中删除。

    这也解决了一个问题选择不同的…与汇总并不总是返回所有不同的行。(Bug #27549694, Bug #30471809)

  • 支持(2)数据类型在MySQL 5.7.5中被删除,只剩下一年而且(4)作为年值数据的有效规范。因为一年而且(4)是语义相同的,指定显示宽度是不必要的,所以(4)现在已弃用,将在未来的MySQL版本中删除对它的支持。的输出中包含数据类型定义的语句不再显示的显示宽度一年.此更改适用于表、视图和存储例程,并影响显示创建而且描述语句,从INFORMATION_SCHEMA表。

    描述语句和INFORMATION_SCHEMA查询时,在以前的MySQL 8.0版本中创建的对象的输出不受影响,因为已经存储在数据字典中的信息保持不变。这个例外不适用于从MySQL 5.7升级到8.0,因为所有数据字典信息都是重新创建的,因此数据类型定义不包括显示宽度。

    (无证)无符号属性一年现在也已弃用,对它的支持将在未来的MySQL版本中删除。

错误处理

  • 关于XA崩溃恢复的错误消息被修改为指示XA上下文,以将它们与非XA崩溃恢复消息区分开来。(Bug #30578290, Bug #97743)

  • 以前,服务器为尝试使用返回此错误消息数据加载本地当地的能力禁用:此MySQL版本不允许使用此命令.这是误导,因为错误条件与MySQL版本无关。服务器现在返回错误代码ER_CLIENT_LOCAL_FILES_DISABLED这信息:禁止加载本地数据;这必须在客户端和服务器端都启用.(Bug #30375698, Bug #29377985, Bug #94396)

功能和操作说明

  • 以前,用户定义函数(udf)不考虑字符集或字符串参数或返回值的排序规则。实际上,字符串参数和返回值被视为二进制字符串,这意味着只有包含单字节字符的字符串参数才能被可靠地处理。

    UDF行为在默认情况下仍然是一样的,但是编写UDF的接口已经扩展,使UDF能够确定字符串参数的字符集和排序规则,并返回具有特定字符集和排序规则的字符串。这些功能对于UDF编写者来说是可选的,他们可以根据需要利用它们。看到用户定义函数字符集处理

    在与MySQL一起分发的udf中,那些与以下特性和扩展相关的udf已被修改以利用新功能:MySQL企业审计、MySQL企业防火墙、MySQL企业数据屏蔽和去识别、MySQL密匙环(仅通用密匙环udf)和组复制。修改只适用于有意义的地方。例如,返回加密数据的UDF为目的返回二进制字符串,而不是字符串。

    udf的字符集功能是使用mysql_udf_metadata组件服务。有关该服务的信息,请参阅MySQL Server Doxygen文档10bet官方网站https://dev.10bet靠谱mysql.com/doc/index-other.html(搜索s_mysql_mysql_udf_metadata而且udf_metadata_imp)。MySQL Keyring UDF的源代码可以在社区源码发行版中找到,如果第三方UDF作者希望修改自己的UDF以支持字符集,可以将其作为示例进行检查。

INFORMATION_SCHEMA笔记

密匙环的笔记

  • 一个新的秘密key类型可用,用于使用MySQL密匙环存储敏感数据的通用用途。密匙环进行加密和解密秘密存储和检索时作为字节流的数据。的秘密密钥类型由所有密钥环插件支持。看到支持的密钥环密钥类型和长度

日志记录笔记

  • SIGUSR1信号现在导致服务器刷新错误日志、一般查询日志和慢查询日志。一个用于SIGUSR1是在不连接到服务器的情况下实现日志轮换(要刷新日志,需要一个具有重新加载特权)。服务器响应SIGUSR1是响应的子集吗SIGHUP,使SIGUSR1被用作更多的轻量级清除某些日志而不清除其他日志的信号SIGHUP效果,例如刷新线程和主机缓存以及将状态报告写入错误日志。看到Unix信号处理MySQL

包装的笔记

  • 二进制包包括旋度而不是连接到系统旋度图书馆已升级使用旋度7.66.0.(错误# 30356844)

  • zstd与MySQL绑定的库已经从1.3.3版本升级到1.4.3。MySQL使用zstd库支持连接压缩。(错误# 30236685)

  • 对于包含OpenSSL共享库的包类型,它们现在也包含在下面lib /私人如果包中有需要OpenSSL的private-to-MySQL库。(错误# 29966296)

SQL语法笔记

  • 重要的变化:MySQL现在根据SQL标准支持显式表子句和表值构造函数。这些现在已分别实现为表格声明和声明,每一项都在这里简要说明:

    • 表格table_name相当于SELECT * FROMtable_name,并且可以在任何与之相同的地方使用选择将接受陈述;这包括联结,联合,插入……选择语句,取代语句,创建表……选择语句,子查询。

      您可以使用命令表格,它还支持限制带有可选抵消;这些子句在a中起同样的作用表格正如他们所做的那样选择.下面两个语句产生相同的结果:

      表t ORDER BY c LIMIT 10 OFFSET 3;SELECT * FROM t ORDER BY c LIMIT 10 OFFSET 3;
    • 关键字,后跟一系列行构造函数(行()),以逗号分隔。它可用于以符合sql的方式向类提供行值插入语句或取代声明。例如,以下两个语句是等价的:

      INSERT INTO t1 VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);INSERT INTO t1 VALUES (1,2,3), (4,5,6), (7,8,9);

      你也可以选择表值构造函数就像处理表一样,但要记住在这样做时必须提供表的别名。使用列别名,你也可以选择单独的列,像这样:

      mysql> SELECT a,c FROM (VALUES ROW(1,2,3), ROW(4,5,6)) AS t(a,b,c);+---+---+ | c |  | +---+---+ | 1 | 3 | | 4 | 6  | +---+---+

      你可以雇佣选择连接、联合、子查询和其他构造中的语句,您通常期望在这些构造中能够使用这些语句。

    有关更多信息和示例,请参见TABLE语句,值语句,以及插入……SELECT语句创建表……SELECT语句加入条款联盟条款,子查询.(错误# 77639)

  • 以前,它是不可能使用的限制在递归选择递归公共表表达式(CTE)的一部分。限制现在在这种情况下支持,以及可选的抵消条款。下面是一个递归CTE的例子:

    WITH RECURSIVE cte AS (SELECT CAST("x" AS CHAR(100)) AS FROM DUAL UNION ALL SELECT CONCAT("x",cte.a) FROM cte WHERE LENGTH(cte.a) < 10 LIMIT 3 OFFSET 2) SELECT * FROM cte;

    该语句在mysql客户:

    +-------+ | 一个  | +-------+ | xxx | | xxxx | | xxxxx  | +-------+

    指定限制这种方式可以使CTE的执行比在最外层更有效选择,因为只生成所请求的行数。

    有关更多信息,请参见递归公共表表达式.(Bug #92857, Bug #28816906)

  • 检查约束在MySQL 8.0.16中实现,ALTER TABLE支持检查下降而且改变检查作为MySQL对标准SQL的扩展,用于修改检查约束,但不支持更通用的(和SQL标准)下降的约束而且改变约束用于修改任何类型的现有约束的语法。现在支持这种语法;约束类型由约束名称确定。

  • MySQL现在支持别名而且条款的插入……重复密钥更新语句获取要插入的行及其列。考虑这样一个语句:

    INSERT INTO t VALUES(9,5), (7,7), (11,-1) ON DUPLICATE KEY UPDATE a = a + VALUES(a) - VALUES(b);

    使用别名对于插入的行,您现在可以重写语句,并返回引用中的行别名重复密钥更新条款,像这样:

    INSERT INTO t VALUES (9,5), (7,7), (11,-1) AS new ON DUPLICATE KEY UPDATE a = a + new。——new.b;

    使用相同的行别名,另外,还使用列别名而且n对于插入行的列,可以省略行别名,只使用列别名,如下所示:

    INSERT INTO t VALUES (9,5), (7,7), (11,-1) AS new(m,n) ON DUPLICATE KEY UPDATE a = a + m - n;

    行别名必须与表名不同;列别名必须彼此不同。

    看到插入……重复键更新语句,以获取更多信息和示例。

sys模式笔记

线程池的笔记

X插件笔记

  • X Plugin无法在使用GCC 9的Debian上编译。的——no-as-needed添加了链接器选项,为该问题提供了一个解决方案。(错误# 30445201)

  • 使用X协议查询Information Schema表触发器可能导致返回错误或不返回某些行。(错误# 30318917)

  • 在MySQL 5.7.14中,mysqlx命名空间参数被引入X协议StmtExecute请求,取代了xplugin参数,因此已弃用。X Plugin继续支持已弃用的xplugin向后兼容的命名空间。在MySQL 8.0.19中,xplugin命名空间现在已被删除。如果xplugin命名空间从这个版本开始使用,对于未知的命名空间将返回一个错误消息。X插件Mysqlx_stmt_execute_xplugin状态变量,它计算的数量StmtExecute收到有关xplugin命名空间,从MySQL 8.0.19不再使用。

增加或更改的功能

  • 微软的Windows操作系统:在此之前,系统\ !)命令mysql命令行客户端只适用于Unix系统。它现在也可以在Windows上运行。例如,系统cls\ !cls可用于清除屏幕。(Bug #11765690, Bug #58680)

  • JSON:当使用JSON_SCHEMA_VALID ()指定一个检查限制在包含一个或多个JSON列的表上,并且遇到验证失败时,MySQL现在提供关于此类失败原因的详细信息。一个新的错误ER_JSON_SCHEMA_VALIDATION_ERROR_WITH_DETAILED_REPORT包含此信息的已实现,该信息可在mysql客户端通过发行显示警告当一个插入语句将被服务器拒绝。

    有关更多信息和示例,请参见JSON_SCHEMA_VALID()和CHECK约束.有关更多一般信息,请参见检查约束

  • 整数数据类型的显示宽度规范在MySQL 8.0.17中已弃用,现在在其输出中包含数据类型定义的语句不再显示整数类型的显示宽度,只有以下几个例外:

    • 类型是非常小的整数(1).MySQL连接器假设非常小的整数(1)列起源于布尔列;这一例外使他们能够继续做出这种假设。

    • 类型包括补零属性。

    此更改适用于表、视图和存储例程,并影响显示创建而且描述语句,从INFORMATION_SCHEMA表。

    描述语句和INFORMATION_SCHEMA查询时,在以前的MySQL 8.0版本中创建的对象的输出不受影响,因为已经存储在数据字典中的信息保持不变。这个例外不适用于从MySQL 5.7升级到8.0,因为所有数据字典信息都是重新创建的,因此数据类型定义不包括显示宽度。(Bug #30556657, Bug #97680)

  • 到复制从的复制连接以及用于分布式恢复的Group Replication连接现在都具有针对TLSv1.3协议的完整客户端配置选项。在支持TLSv1.3但这些配置选项不可用的MySQL版本中,如果对这些连接类型使用TLSv1.3,则无法配置连接中的客户端(启动分布式恢复的复制从端或Group replication加入成员)。这意味着连接中的服务器(复制主服务器或Group replication现有成员,作为分布式恢复的提供者)必须允许使用至少一个默认启用的TLSv1.3密码套件。从MySQL 8.0.19中,您可以使用配置选项为这些连接指定任何密码套件的选择,如果需要的话,只包括非默认密码套件。

    新的配置选项如下:

    (错误# 29960735)

  • Debian包现在包含了更通用的系统支持,更好地支持手动mysqld执行。(Bug #29702050, Bug #95163)

  • Group Replication插件使用内部会话与MySQL Server交互,执行SQL API操作。控件指定的客户端连接限制以前计算这些会话max_connections服务器系统变量。如果在启动组复制或试图执行某个操作时,服务器已达到此限制,则操作将不成功,组复制或服务器本身可能会停止。从MySQL 8.0.19开始,组复制与MySQL Server的交互使用了一个新的组件服务来单独处理内部会话,这意味着它们不计入max_connections限制,如果服务器已达到此限制,则不拒绝。(错误# 29635001)

  • 重复键错误信息已扩展为包含键的表名。以前,重复键错误信息只包含键值和键名。感谢Facebook的贡献。(Bug #28686224, Bug #925308)

  • mysql客户端以交互模式操作——binary-as-hex选项现在默认启用。此外,输出从状态(或\ s当选项是隐式或显式启用时,命令包括这一行:

    二进制数据表示为:十六进制

    若要禁用十六进制表示法,请使用——skip-binary-as-hex(错误# 24432545)

  • MySQL现在支持带时区偏移量的datetime字面量,例如“2019-12-11 10:40:30-05:00”“2003-04-14 03:30:00 + 10点',“2020-01-01 15:35:45 + 05:30 ';当将这些值插入时,将尊重这些偏移量,但不存储它们时间戳而且DATETIME列;也就是说,在检索值时不显示偏移量。

    支持的时区偏移范围为13:59+夏令时间、包容。时区名称,例如“CET(中央东部东京)”“美国/阿根廷/ Buenos_Aires”,包括特殊值“系统”,在datetime字面量中不支持。此外,在这个上下文中,对于小于10的小时值,前导0是必需的,MySQL拒绝偏移量“0”是无效的。

    带时区偏移量的Datetime字面量也可以用作预备语句中的参数值。

    作为这项工作的一部分,允许的数值范围time_zone系统变量已经改变,所以现在也是13:59+夏令时间、包容。

    有关更多信息和示例,请参见DATE、DATETIME和TIMESTAMP类型,MySQL服务器时区支持.(Bug #83852, Bug #25108148)

  • 从MySQL 8.0.19开始,通过X协议连接发送的消息支持压缩。如果服务器和客户端同意使用压缩算法,则可以压缩连接。默认情况下,X协议宣布支持缩小lz4,zstd压缩算法。您可以通过设置new来禁用这些算法中的任何一个mysqlx_compression_algorithms系统变量只包含您允许的。如果客户端在能力协商期间没有请求压缩,X协议总是允许未压缩的连接。注意,X协议允许的压缩算法列表独立于MySQL服务器公布的压缩算法列表运行,X协议不返回到使用MySQL服务器的压缩设置。您可以使用新的X Plugin状态变量来监视X协议的消息压缩效果。

  • 对于多线程从(复制从)slave_parallel_workers设置为大于0的值),设置slave_preserve_commit_order = 1确保事务在从服务器上的执行和提交顺序与在从服务器的中继日志中出现的顺序相同,在从服务器上保留与在主服务器上相同的事务历史。以前,这种设置需要在从机上启用二进制日志记录和从更新日志记录,以及相关的执行成本和磁盘空间需求。现在,slave_preserve_commit_order = 1可以在没有二进制日志和没有从更新日志的从机上设置。这使您能够保留从服务器上的提交顺序,并避免事务序列中的间隙,而不需要二进制日志记录的开销。

    如果使用了基于语句的复制,并且事务性和非事务性存储引擎都参与在主服务器上回滚的非xa事务,则可能会限制在从服务器上保留提交顺序。通常,在主服务器上回滚的非xa事务不会复制到从服务器,但在这种特殊情况下,可能会将事务复制到从服务器。如果出现这种情况,没有二进制日志记录的多线程从服务器就不会处理事务回滚,因此在这种情况下,从服务器上的提交顺序与事务的中继日志顺序不同。

  • MySQL 8.0.18版本引入了指定PRIVILEGE_CHECKS_USER复制区域通道帐号(使用改变主语句),当应用复制事务时,MySQL针对该语句进行特权检查。的使用PRIVILEGE_CHECKS_USERAccount可以保护复制区域通道不受未经授权或意外使用特权或不需要的操作的影响。当使用特权检查保护复制通道时,强烈建议使用基于行的二进制日志记录。

    在MySQL 8.0.19中,一个新的设置REQUIRE_ROW_FORMAT为复制区域通道添加的,这使通道只接受基于行的复制事件。您可以指定REQUIRE_ROW_FORMAT使用一个改变主语句为使用特权检查保护的复制区域通道强制基于行的二进制日志记录,或为没有使用这种方式保护的通道增加安全性。通过只允许基于行的复制事件,REQUIRE_ROW_FORMAT阻止复制应用程序执行创建临时表和执行等操作数据加载INFILE请求,它保护复制区域通道免受一些已知攻击载体的攻击。基于行的二进制日志记录(binlog_format =行)必须在复制主机上使用REQUIRE_ROW_FORMAT是集。

    组复制已经需要基于行的二进制日志记录,因此从MySQL 8.0.19开始,组复制的通道是自动创建的REQUIRE_ROW_FORMAT设置后,您就无法更改这些通道的选项。该设置还应用于升级时的所有组复制通道。

    mysqlbinlog有一个新的——require-row-format选项,该选项强制基于行的复制事件mysqlbinlog的输出。方法保护的复制通道将接受使用此选项产生的事件流REQUIRE_ROW_FORMAT选择。

  • MySQL在为表分区构造表空间名和文件名时使用分隔符字符串。一个# p #分隔符字符串位于分区名称前面# sp #分隔符字符串位于子分区名称前面,如下所示:

    schema_nametable_name# p #partition_name# sp #subpartition_nametable_name# p #partition_name# sp #subpartition_name.ibd

    历史上,分隔符字符串一直是大写的(# P #而且# SP #),而小写(# p #而且# sp #)在Windows等不区分大小写的文件系统上。为了避免在区分大小写和不区分大小写的文件系统之间迁移数据目录时出现问题,现在所有文件系统上的分隔符字符串都是小写的。不再使用大写分隔符字符串。

    此外,根据用户指定的分区或子分区名称(可以用大写或小写指定)生成的分区表空间名称和文件名现在都是用小写生成(并在内部存储),而不管lower_case_table_names设置以确保不区分大小写。例如,如果用这个名称创建一个表分区PART_1,生成的表空间名称和文件名为小写:

    schema_nametable_name# p #part_1table_name# p #part_1.ibd

    在升级期间,MySQL现在检查和修改,如果有必要:

    • 磁盘上和数据字典中的分区文件名,以确保小写分隔符和分区名称。

    • 分区数据字典中的元数据,以解决以前的错误修复程序引入的相关问题。

    • InnoDB以前的错误修复程序引入的相关问题的统计数据。

    在表空间导入操作期间,如果需要,将检查和修改磁盘上的分区表空间文件名,以确保小写分隔符和分区名称。

    参考文献:参见Bug #26925260, Bug #29823032, Bug #30012621, Bug #29426720, Bug #30024653。

  • 的有效采样增加了支持InnoDB用于生成直方图统计的数据。当存储引擎不提供它们自己的时,MySQL使用的默认采样实现需要全表扫描,这对于大型表来说代价很高。的InnoDB通过避免全表扫描,采样实现提高了采样性能。的sampled_pages_read而且sampled_pages_skippedINNODB_METRICS计数器可用于监测采样InnoDB数据页。看到直方图统计分析

错误修复

  • 重要的变化:更改了以下字符串函数的字符集分辨率:

    以前,这些函数的所有参数的字符集信息都是聚合的,这可能导致格式不正确的结果。这也引起了问题LPAD (),假设输入和输出都是格式良好的。现在,列出的三个函数都始终使用的字符集str,并在执行时将所有其他参数转换为该字符集;如果任何这样的转换失败,该函数将返回一个错误。(错误# 30114420)

    这个问题是:Bug #28197977的回归。

  • 重要的变化:子查询物化不再需要内部和外部类型的严格匹配。当满足以下条件之一时,不同的类型现在可以物化:

    • 内部类型是数值类型(因为总有办法将外部类型转换为数字)

    • 内部类型是临时类型(因为总有办法将外部类型转换为临时类型)

    • 两种类型都是字符串

    (错误# 13960580)

  • NDB集群:一些NDB日志选项的密码屏蔽不完整。(Bug #97335, Bug #30453137)

  • InnoDB:的内部数据结构的初始化依赖于派生的内部变量max_connections设置。InnoDB时,无法调整内部数据结构的大小max_connections启动使用后修改设置设置保存.(错误# 30628872)

  • InnoDB:os_file_get_parent_dir使用GCC 9.2.0编译MySQL时遇到的警告。(Bug #30499288, Bug #97466)

  • InnoDB:试图使用空引用访问大对象(LOB)值会引发断言失败。为了防止这种问题形式的发生,添加了一个检查,在访问LOB引用之前确定它们是否为空。(错误# 30499064)

  • InnoDB:升级数据目录后发生断言失败。准备好的XA事务仍然存在,这阻止了undo表空间的升级。在提交或回滚所有已准备的XA事务之前,包含已准备事务更改的Undo表空间必须保持活动状态。

    准备好的XA事务还防止在重新启动后完成显式的撤消表空间截断操作。(错误# 30489497)

  • InnoDB:尝试在使用大写表名(分区或其他)的Linux上将MySQL 5.7实例升级到macOS上的MySQL 8.0会引发断言失败。MySQL 8.0中的分区文件格式更改阻止了数据目录迁移到不同的平台lower_case_table_names升级时更改了设置,可能导致升级失败。现在报告的不是在这些情况下发生的失败,而是错误。(Bug #30450968, Bug #30450979)

  • InnoDB:在macOS上,尝试将一个带有大写表名的MySQL 5.7实例升级到MySQL 8.0时发生了失败。大写表名没有规范化为小写。报告的错误如下:在InnoDB字典中找不到表而且修复SE数据错误时出错.(错误# 30450944)

  • InnoDB:在Windows上,尝试将带有大写分区表名的MySQL 5.7实例升级到MySQL 8.0时发生失败。打开表返回空指针,在关闭表时导致分割错误。(错误# 30450918)

  • InnoDB:在Windows上,一个mysqld当尝试将一个带有大写分区表名的MySQL 5.7实例升级到MySQL 8.0时,会引发异常。(错误# 30447790)

  • InnoDB:在Windows上,试图将包含大写名称定义的通用表空间的MySQL 5.7实例升级到MySQL 8.0时发生失败。报告的错误如下:修复SE数据时出错而且DD填充失败.(错误# 30446798)

  • InnoDB:在lob相关代码中引入本地小事务(mtr)会导致恢复期间的断言失败。(错误# 30417719)

  • InnoDB:尝试在Windows上使用大写分区表名的MySQL 5.7实例升级到Linux上的MySQL 8.0时发生失败。MySQL 8.0中的分区文件格式更改阻止了数据目录迁移到不同的平台。现在报告的不是失败,而是错误。(错误# 30411118)

  • InnoDB:重复更新相同的压缩LOB数据会导致表空间文件的大小增加。(错误# 30353812)

  • InnoDB:temptable_max_ram当达到限制时,TempTable存储引擎错误地报告了内存不足的错误,而不是退回到基于磁盘的存储。(Bug #30314972, Bug #96893)

  • InnoDB:导入加密表并重新启动服务器后,试图访问该表时返回以下错误:错误3185 (HY000):无法从密匙环中找到主密钥,如果一个密匙环插件加载并初始化成功,请在服务器日志中检查.在使用目标主密钥加密表空间密钥后,没有将其写入磁盘。(错误# 30313734)

  • InnoDB:内部InnoDBdict_create_foreign_constraints ()删除解析SQL语句和执行外键相关DDL检查的函数。随着MySQL 8.0中数据字典的引入以及随后将外键相关的DDL检查重新定位到SQL层,该函数变得多余。

    切除dict_create_foreign_constraints ()函数还处理了以下外键问题:

    • 圆点周围的空格(方法不允许使用完全限定的引用表名InnoDB解析器。

    • 同时添加外键和删除分区ALTER TABLE不允许发表声明。的InnoDB解析器没有检测到新的表版本不再分区。

    • 外键约束不能引用命名模式中的表辅助.解析引用表名的函数无法识别编码了AUX等特殊名称。

    • 忽略外键定义中的条件注释。

    此外,还向SQL层添加了一个检查,以检测在执行的早期阶段在表上创建多个同名外键的尝试ALTER TABLE声明。(Bug #30287895, Bug #22364336, Bug #28486106, Bug #28703793, Bug #16904122, Bug #92567, Bug #11754659, Bug #46293)

  • InnoDB:当试图合并空间索引的非叶页时,比较函数发现两条记录相等。该函数无法处理此意外情况,导致长时间的信号量等待和最终的断言失败。(错误# 30287668)

  • InnoDB:释放大对象(LOB)页所需的本地获取的闩锁可能会导致死锁,如果后续调用者试图在释放该页之前获取同一页的闩锁。类似地,在回滚相关操作期间在压缩或未压缩LOB上获得的锁存可能会由于锁存顺序问题而导致死锁。(错误# 30258536)

    参考文献:这个问题是:Bug #29846292的回归。

  • InnoDB:正在清除压缩LOB页面的清除线程与正在使用删除标记的记录的更新线程之间的竞争条件导致断言失败。(错误# 30197056)

  • InnoDB:一个表空间导入操作,由于定义源表和目标表时使用不同的数据目录子句报告了描述不足的模式不匹配错误。此外,如果一个. cfg文件不存在,则相同的操作将引发断言失败。现在,在由于数据目录不匹配而终止导入操作之前,在这两种情况下都会报告更有用的错误消息。(Bug #30190199, Bug #30190227, Bug #20644698, Bug #76142)

  • InnoDB:试图清除大于缓冲池的LOB值时,清除操作失败。(错误# 30183982)

  • InnoDB:将外部存储的LOB数据移动到内联存储的更新操作未能将旧的LOB数据标记为可清除的。(Bug #30178056, Bug #96466)

  • InnoDB:索引键部件排序顺序信息未存储到. cfg使用的元数据文件ALTER TABLE……导入表空间操作。因此,索引键部分排序顺序被假定为升序,这是默认的。因此,如果导入操作中涉及的一个表用DESC索引键部分排序顺序与其他表不一致。为了解决这个问题,. cfg文件格式已更新,以包括索引键部件排序顺序信息。(错误# 30128418)

  • InnoDB:环保署使用的准则btr_cur_will_modify_tree ()函数不充分,该函数检测正在修改的记录是否需要修改树结构。(错误# 30113362)

  • InnoDB:在具有大量表的实例上,由于在启动时进行表空间文件扫描以检索空间id,启动速度较慢。多线程扫描只在表空间文件数量超过50,000的情况下启动,并且读取三个表空间页以检索空间ID。为了提高启动时间,现在为表空间文件扫描分配了额外的线程,并且只读取第一个表空间页来检索空间ID。如果在表空间的第一页上找不到空间ID,就会读取三页来确定空间ID,和前面一样。(Bug #30108154, Bug #96340)

  • InnoDB:在不区分大小写的文件系统上启动失败,错误提示为相同的表空间ID找到了多个文件。文件路径比较无法识别这一点innodb_data_home_dir而且datadir路径是相同的,因为路径有不同的字母大小写。(错误# 30040815)

  • InnoDB:访问存储引擎时发生错误mysql.innodb_index_stats而且mysql.innodb_table_stats在Linux上升级MySQL 8.0.13实例,使用分区表和一个lower_case_table_names = 1设置为MySQL 8.0.14或MySQL 8.0.15。持久优化器统计表包含重复的条目。(错误# 30012621)

    这个问题是Bug #26925260的回归。

  • InnoDB:创建表空间失败,错误提示表空间已经存在。这个错误是由于先前的失败造成的创建表空间在该操作中,DDL失败,但由于在事务提交之前禁用了回滚,相关更改没有回滚。事务成功提交后,回滚现在是禁用的。(Bug #29959193, Bug #95994)

  • InnoDB:未跟踪属于导入表空间的更改页面。(错误# 29917343)

  • InnoDB:在不区分大小写的文件系统上从MySQL 5.7升级到MySQL 8.0时,由于表空间名称冲突,导致在升级过程中重命名全文搜索辅助表失败。(错误# 29906115)

  • InnoDB:回滚的插入插入的LOB值大于缓冲池的操作导致死锁。(Bug #29846292, Bug #95572)

  • InnoDB:通过禁止会话临时表不必要的隐式到显式二级索引锁转换,解决了代码回归问题。(错误# 29718243)

  • InnoDB:在清除删除标记的记录时,当光标位于损坏的页面上时,表空间导入操作引发断言。当遇到损坏的页面时,导入操作将被终止并报告错误,而不是断言。(Bug #29454828, Bug #94541)

  • InnoDB:删除标记的行能够在部分回滚完成之前获得外部读锁。外部读锁阻止了部分回滚期间隐式锁向显式锁的转换,导致断言失败。(错误# 29195848)

  • InnoDB:在执行undo表空间截断操作时发生服务器退出后,在启动时打印警告消息,指出无法为undo表空间页恢复doublewrite页。对于被截断的undo表空间,不再打印警告消息。(错误# 28590016)

  • InnoDB:在只读模式下(innodb_read_only =对),显示创建表输出不包括关于外键约束的信息。(Bug #21966795, Bug #78754)

  • 分区:当从MySQL 8.0.16或更低版本升级带有子分区表的数据库并执行时修改表添加列,就会出现断言或错误。(Bug #30360695, Bug #97054)

  • 分区:在将分区表从MySQL 5.7升级到MySQL 8.0的过程中,当分区函数使用前缀键时,会忽略前缀长度,而考虑完整的列长度。因此,该表可能被错误地拒绝升级,因为发现其分区字段长度太大。(Bug #29941988, Bug #95921)

  • 分区:ALTER TABLE……交换分区可能导致索引损坏。这是因为服务器假定在分区表中创建索引的顺序与未分区表的顺序相同。这导致交换了错误的索引数据。(错误# 29706669)

  • 复制:当成员加入或重新加入复制组时,如果group replication在分布式恢复过程中(加入成员从现有在线成员接收状态传输)检测到错误,它会自动切换到新的捐赠者,并重试状态传输。成员在放弃之前重试的次数由group_replication_recovery_retry_count系统变量。性能架构表replication_applier_status_by_worker显示导致上次重试的错误。以前,只有在组成员配置了并行复制应用程序线程时才显示此错误slave_parallel_workers系统变量)。如果组成员配置了单个应用程序线程,则在内部线程每次重试后清除错误重置的奴隶操作,所以无法查看。的输出也是如此显示奴隶状态命令是单个还是多个应用程序线程。的重置的奴隶在重试分布式恢复后不再执行操作,因此始终可以查看导致上一次重试的错误。(Bug #30517160, Bug #30517172, Bug #97540)

  • 复制:当对复制区域通道进行特权检查时,如果从端相关表中的列比主端多,则会引发断言。检查现在引用事件中的列数,而不是表定义中的列数。(错误# 30343310)

  • 复制:当复制组成员离开组时,原因可能是停止GROUP_REPLICATION发出或由于错误,Group Replication现在会停止二进制日志转储线程,以便前一个组成员不能将不需要的二进制日志数据发送给组中仍然存在的成员。(错误# 30315614)

  • 复制:控件中保存的复制连接参数mysql.slave_relay_log_info表现在保存,以防服务器崩溃或在发出后故意重新启动重置的奴隶但在发行之前开始的奴隶.此操作适用于PRIVILEGE_CHECKS_USER用于复制权限检查的帐户设置(在MySQL 8.0.18中引入)和REQUIRE_ROW_FORMAT设置(在MySQL 8.0.19中引入)。注意,如果relay_log_info_repository =文件在服务器上设置(这不是默认值并且已弃用),则在这种情况下不保留复制连接参数。(错误# 30311908)

  • 复制:当指定复制区域通道安全时PRIVILEGE_CHECKS_USER一个不应该有ACL权限的帐户格兰特语句将导致复制应用程序停止。在这种情况下,行为是正确的,但提出了断言。该断言现在已被删除。(错误# 30273684)

  • 复制:在使用克隆操作进行配置后启动组复制时,执行重置的主人,或者从中继日志中删除部分事务,重置所有奴隶在内部用于清除服务器上任何不需要的状态。然而,在MySQL 8.0.18中,这导致任何PRIVILEGE_CHECKS_USER为要删除的组复制区域通道指定的帐户。重置的奴隶现在改为使用,它不会删除帐户。(错误# 30262225)

  • 复制:对于多线程复制从端,设置slave_preserve_commit_order = 1现在保留语句的顺序如果存在当有关对象不存在时。以前,这些更新可能在中继日志中先于它们的事务之前提交,这可能会导致从中继日志中执行的事务序列出现空白。(错误# 30262096)

  • 复制:对复制区域通道进行权限检查时,设置会话值所需的权限sql_require_primary_key没有检查系统变量。现在检查开始了。(错误# 30254917)

  • 复制:当失败的复制组成员试图重新加入少数派组,但被禁止时,可能会发生内存泄漏。(Bug #30162547, Bug #96471)

  • 复制:当组成员重新加入复制组时,它通过检查中继日志来启动分布式恢复过程group_replication_applier通道用于它已经从组接收到的任何事务,并应用这些事务。然后,加入成员从现有的在线成员发起状态传输,这可能从远程克隆操作开始。在此之前,group_replication_applier在启动远程克隆操作时,没有显式地停止通道,因此应用程序当时可能仍在应用现有事务,这可能导致错误。的group_replication_applier通道现在在请求远程克隆操作之前停止,并在分布式恢复进程转移到从提供者的二进制日志进行状态传输时重新启动。(Bug #30152028, Bug #96447)

  • 复制:如果停止GROUP_REPLICATION当成员的XCom端口被阻塞,XCom线程挂起,关闭没有完成时发出。《XCom》在这种情况下终止了。(错误# 30139794)

  • 复制:当Group Replication在单主模式下运行,并且选择了一个新的主服务器时,此时记录的消息将提供新选择的主服务器gtid_executed集合,以及复制应用程序检索的gtid集合。(错误# 30049310)

  • 复制:slave状态日志mysql.slave_relay_log_info(中继日志信息日志)和mysql.slave_worker_info(从工作者日志)现在在本地或远程克隆操作中从提供者复制到接受者。从状态日志保存了可以用于在克隆操作之后正确恢复复制的信息,包括从哪里重新启动复制的中继日志位置PRIVILEGE_CHECKS_USER帐户设置,和新REQUIRE_ROW_FORMAT设置。注意,中继日志本身不会从提供者复制到接收者,而只是在这些表中保存的有关中继日志的信息。还要注意ifrelay_log_info_repository =文件在服务器上设置(这不是默认值并且已弃用),则不克隆从状态日志;只有当表格是集。

    在此补丁之前,通过克隆操作提供的复制从机上发生了以下与复制相关的行为:

    • 如果默认复制区域通道是从服务器上的唯一通道,则它将无法启动,因为由于缺少中继日志信息,它被认为没有初始化。

    • 任何PRIVILEGE_CHECKS_USER没有对提供程序上的复制通道应用的帐户设置,必须重新指定。

    • 使用GTID自动定位的复制通道(由MASTER_AUTO_POSITION选择在改变主语句)能够自动恢复复制。

    • 使用基于二进制日志文件位置的复制的复制通道(由MASTER_LOG_FILE而且MASTER_LOG_POS选项改变主声明)必须有MASTER_LOG_FILE而且MASTER_LOG_POS在重新启动复制之前手动重新应用的选项,以便正确恢复。如果通道被配置为在服务器启动时自动启动复制,那么如果没有重新应用选项,它们将尝试从头启动复制。因此,它们很可能试图复制已经通过克隆操作复制到从服务器的数据,导致复制停止,并可能损坏从服务器上的数据。

    有了这个补丁,在克隆操作提供的复制从机上将发生以下与复制相关的行为:

    • 默认复制区域通道现在总是可以在克隆操作之后启动,如果它被配置为这样做的话。

    • 所有频道现在都有捐赠者的PRIVILEGE_CHECKS_USER账户设置和REQUIRE_ROW_FORMAT设置。

    • 类指定的使用GTID自动定位的复制通道MASTER_AUTO_POSITION选择在改变主语句)仍然能够自动恢复复制。对于使用GTID自动定位的组复制通道,其内部等效于重置的主人语句现在用于确保以最佳方式恢复复制。

    • 使用基于二进制日志文件位置的复制的复制通道现在具有正确的MASTER_LOG_FILE而且MASTER_LOG_POS克隆后的选项。因为中继日志本身没有克隆,所以这些通道现在尝试在重新启动复制之前使用克隆的中继日志信息执行中继日志恢复过程。对于单线程从服务器(slave_parallel_workers设置为0),那么在没有任何其他问题的情况下,中继日志恢复应该会成功,从而使通道能够正确地恢复复制。对于多线程从服务器(slave_parallel_workers大于0),则中继日志恢复很可能失败,因为它通常不能自动完成,但会发出一个信息丰富的错误消息,数据不会被损坏。

    (Bug #29995256, Bug #30510766)

  • 复制:时,在多线程复制从机上可能发生内部死锁relay_log_space_limit系统变量被设置为限制从服务器上中继日志的大小,协调线程获得与此限制和日志结束位置相关的锁。(错误# 29842426)

  • 复制:如果复制组成员异常停止并立即重新启动(例如,因为它是由mysqld_safe),它会自动尝试重新加入组group_replication_start_on_boot =对是集。以前,如果重新启动和重新加入尝试发生在成员的前一个化身被逐出组之前,则该成员不能重新加入。现在,在此场景中,组复制自动使用组通信系统(GCS)特性为成员重试10次重新加入尝试,每次重试之间有5秒的间隔。这应该涵盖大多数情况,并允许有足够的时间将前一个化身驱逐出组,让成员重新加入。请注意,如果group_replication_member_expel_timeout如果将系统变量设置为在成员被驱逐之前指定较长的等待时间,则自动重新加入尝试可能仍然无法成功。(错误# 29801773)

  • 复制:如果使用改变主语句,该语句没有指定主日志文件名和主日志位置,然后在此之前关闭开始的奴隶发出,然后用期权重新启动——relay-log-recovery设置时,复制未启动。发生这种情况是因为在尝试中继日志恢复之前,接收器线程没有启动,因此在中继日志中没有日志旋转事件可以提供主日志文件名和主日志位置。在这种情况下,从服务器现在跳过中继日志恢复并记录一个警告,然后继续启动复制。(Bug #28996606, Bug #93397)

  • macOS:在macOS上,配置MySQL-DWITH_SSL =系统引起的mysql_config输出不正确地包含内部CMake静态SSL库的名称。(Bug #30541879, Bug #97632)

  • macOS:在使用Ninja的macOS上构建时,多次尝试创建符号链接可能会失败。(错误# 30368985)

  • 微软的Windows操作系统;JSON:在Windows平台上,用于多值索引的内存在包含它的表被删除后不会被释放。(错误# 30227756)

  • 微软的Windows操作系统:在Windows上,-DWITH_SSL =系统如果安装了草莓Perl,则无法找到已安装的OpenSSL头文件。(错误# 30359287)

  • 微软的Windows操作系统:在Windows上,-DWITH_SSL =系统选项不能工作,如果通往系统OpenSSL库的路径名包含空格。现在已经处理好了。同时,-DWITH_SSL = yes被喜欢-DWITH_SSL =系统和其他平台一样。(Bug #30261942, Bug #96739)

  • 微软的Windows操作系统:由于编译错误,MSVC 2019产生了乱码源文件名。的工作方法CMake为此实现了配置。(Bug #30255096, Bug #96720)

  • JSON:中更新值JSON方法将字符串元素替换为包含与类相同字节序列的二进制字符串utf8mb4字符串的表示没有影响。

    这个问题的根本原因是由于MySQL 8.0.17中实现了多值索引,导致JSON字符串和JSON不透明值之间的比较行为发生了变化,在此之前,JSON字符串和JSON不透明值从未被认为是相等的。更改后,如果二进制数据匹配,则认为它们相等。

    对这一变化的分析表明,它是不必要的;此外,新的行为与现有的JSON值比较文档相冲突。10bet官方网站通过恢复原始行为可以修复此问题。(错误# 30348554)

  • JSON:一个视图使用JSON_TABLE ()没有保留编码JSON路径参数的字符集。这意味着,如果用与定义视图的字符集不同的字符集来计算视图,就可能产生错误的结果。这是通过确保JSON_TABLE ()在这种情况下,保留原始字符集。(错误# 30310265)

  • JSON:在JSON列上添加函数索引改变了用于比较字符串的排序规则,导致选择该列的同一查询返回的结果与不使用索引获得的结果不同。(错误# 29723353)

  • JSON:如果第一个参数JSON_TABLE ()常量在存储过程的执行期间(而不是在准备期间),在随后再次执行语句时不会重新计算它,导致每次在第一次执行过程之后返回一个空结果。(Bug #97097, Bug #30382156)

  • JSON:在某些情况下,例如查询使用力指数,读表的代价为DBL_MAX;这是四舍五入2 e308这对于JSON解析器来说太大了,因此不可能使用诸如从INFORMATION_SCHEMA中选择JSON_EXTRACT(跟踪,'$**.table_scan')。OPTIMIZER_TRACE.在这种情况下,值大于1.5 e308四舍五入并打印为1 e308代替。(Bug #96751, Bug #30226767)

  • 从MySQL 5.7升级到MySQL 8.0克隆实例操作失败,错误如下:错误3862 (HY000):克隆捐赠者错误:1016:不能打开文件:'./undo001'。升级过程在内存中留下孤立的undo表空间。感谢Satya Bodapati的贡献。(Bug #30602218, Bug #97784, Bug #30239255, Bug #96637)

  • thread_pool插件在性能模式表的整数列的定义中使用显示宽度。这导致将警告写入错误日志,因为整数列显示宽度现在已弃用。(错误# 30597673)

  • MySQL优化器的散列连接算法使用连接缓冲区来存储中间结果。如果缓冲区溢出,服务器将使用溢出到磁盘算法(将其中一个散列连接操作数写入临时文件)来优雅地处理此问题。如果其中一个操作数是推入连接操作的成员表,则此策略与所有子结果行的推入连接要求相冲突,即只要它们的推入连接祖先之一是连接计算中的当前行,就使用嵌套循环读取,这在某些情况下可能导致返回不正确的查询结果。(错误# 30573733)

  • 访问INFORMATION_SCHEMA。的观点表没有正确地限制到正确的用户。(错误# 30542333)

  • 在创建哈希连接期间用于查找的哈希值时,服务器不尊重垫的空间属性,这意味着“foo”而且“foo”不匹配时使用垫的空间排序。这是通过将所有字符串填充到与可能最长的字符串相同的长度来解决的,其中可能最长的字符串是从数据类型长度说明符推导出来的NCHAR (NVARCHAR (N.(错误# 30535541)

  • 当检索包含小数列,将列值转换为通过文本协议传输的字符串,这是一个瓶颈。负责这种转换的函数的性能在某些情况下提高了50%,这在内部测试中得到了反映。(错误# 30528427)

  • FORMAT_PICO_TIME ()函数被调用以处理多个行参数是在一行中找到的,之后的每个结果都被设置为.(错误# 30525561)

  • 中报告的事件持续时间events_xxx表可以对于计时器开始值和结束值相等的事件,而不是0。(错误# 30525560)

  • 添加一个限制子句对括号内的查询抑制了括号内的锁定子句。例如,这个查询不会锁定表:

    (选择…更新)限制…;

    添加一个限制子句在括括号的查询之外用于覆盖限制子句在括号内。然而,外限制抑制命令也在括号内。例如,对于这个查询,命令抑制:

    (选择…ORDER BY……a) LIMIT b;

    现在来看内锁命令子句不受外部约束限制条款。(Bug #30521098, Bug #30521803)

  • 当优化器从常数表中提取条件以进行早期计算时,它不包括在哪里计算成本高的条件,包括涉及存储函数的条件。当提取的条件由于只涉及const表而求值为true时,整个在哪里条件被错误地删除。现在,在这种情况下,检查昂贵的条件是执行之前的任何删除在哪里条件。(错误# 30520714)

  • 当使用横向物化派生表时截然不同的,派生表没有像预期的那样为每个外部行重新物化。(错误# 30515233)

  • 解释分析使用公共表表达式时未能正确工作用递归.(错误# 30509580)

  • GNU黄金加载程序可能在某些平台上导致内存耗尽。现在,默认情况下只在Intel 64位平台上使用它。(Bug #30504760, Bug #96698)

  • 一些Linux平台的开销很高解释分析由于使用了系统调用libstdc + +而不是clock_gettime ().(错误# 30483025)

  • 在Solaris 11.4上,无法构建LDAP身份验证插件。(错误# 30482553)

  • 的查询成员()操作人员并不总是被正确处理。(错误# 30477993)

  • 在Visual Studio下,Boost编译失败,原因是针对vc++ 2013 bug的Boost解决方案,该bug已被修复。使用MySQL编译Boost的解决方法现在已经被修补。(Bug #30474056, Bug #97391)

  • 当从辅助引擎检索包含许多整数的大型结果集时,将整数转换为通过文本协议发送的字符串可能会成为瓶颈。为了避免这个问题,已经改进了执行这种转换的内部函数的性能。(错误# 30472888)

  • Docker包缺少LDAP身份验证插件。(错误# 30465247)

  • 修正了一个错别字mysys / my_handler_errors.h错误消息。感谢Nikolai Kostrigin的贡献。(Bug #30462329, Bug #97361)

  • GTID表更新时innodb_force_recovery启用导致调试断言失败。(Bug #30449531, Bug #97312)

  • MySQL在Protobuf 3.10上编译失败。(Bug #30428543, Bug #97246)

  • 在系统启动期间缓冲的日志行可能丢失。(Bug #30422941, Bug #97225)

  • 如果mysql.user系统表被重命名,服务器可以退出。(错误# 30418070)

  • 调用不使用主机名指定的角色可能导致服务器退出。(错误# 30416389)

  • 当半连接内的其他表依赖于这个表时,在决定是否拉出一个半连接表时,只考虑那些作为基表的半连接表;嵌套连接中的那些被忽略。(错误# 30406241)

    参考文献:参见Bug #12714094, Bug #11752543, Bug #43768。

  • Ubuntu平台上的AppArmor配置文件无法读取OpenSSL配置。(错误# 30375723)

  • 一些Fedora 30包缺少过时的信息,可能导致升级现有MySQL安装时出现问题。(Bug #30348549, Bug #96969)

  • 对象中的默认加密改变模式语句导致模式默认字符集和排序规则重置为系统默认值。(Bug #30344462, Bug #96994)

  • 用两种方式声明的列AUTO_INCREMENT而且默认的值表达式(不允许的组合)可能引发断言或导致服务器退出。(错误# 30331053)

  • 秀奖助金在某些情况下,匿名用户可能导致服务器退出。(错误# 30329114)

  • 最大的()而且至少()不总是正确处理时间值。(错误# 30326848)

    这个问题是Bug #25123839的回归。

  • 分区对象中的子分区列表没有序列化,因此没有包含在序列化字典信息(SDI)中。为了解决这个问题,添加了对子分区字典信息的序列化和反序列化的支持。此bug的补丁还包括小的SDI代码重构和格式更改。由于格式更改,SDI版本号增加了。(Bug #30326020, Bug #96943)

  • 后执行分析表方法之后执行另一个查询时,给定查询的优化器跟踪会有所不同分析表.(错误# 30321546)

  • innodb_buffer_pool_instances在服务器启动时没有正确初始化,如果它已经设置为using设置保存PERSIST_ONLY.(错误# 30318828)

  • 一个低max_allowed_packet值导致以下错误:错误1153 (08S01)在第1行:得到一个数据包大于'max_allowed_packet'字节.修改了错误消息,以指示所需的最小值max_allowed_packet克隆操作的值。(Bug #30315486, Bug #96891)

  • 当服务器代码试图向客户端发送打算写入错误日志的错误代码时,可能会引发断言。通过发送要发送给客户端的代码来修复这些实例。(错误# 30312874)

  • 创建视图当视图定义的主体包含连接和多个子选择时,并不总是成功。(错误# 30309982)

    这个问题是Bug #25466100的回归。

  • SLES 12 RPM包依赖信息错误,导致MySQL安装失败。(错误# 30308305)

  • 当恢复几何哈希连接块文件中的数据几何列时,服务器不将数据复制到该列,而是存储一个指向数据的指针,该指针位于临时缓冲区中,这意味着几何列在重用该缓冲区时立即指向随机数据。现在,服务器总是将数据从这个缓冲区复制到几何列时执行散列连接。(错误# 30306279)

  • 一些ALTER TABLE操作使用复制算法没有正确处理带有表达式默认值的列。(Bug #30302907, Bug #96864)

  • CONV ()函数并不总是正确地处理返回适当数量的字符。(错误# 30301543)

  • 解析器递归检查不足以防止堆栈溢出。(错误# 30299881)

  • 删除子查询(因为它发生的条件总是false)预计将在解析期间执行,但当子查询不涉及任何表时,服务器将在解析时执行它。这导致后续检查失败,无法确认子查询只是被解析而尚未优化。在这种情况下,服务器还会检查子查询是否已经执行。(错误# 30273827)

  • 对于调试版本,如果试图向空临时表添加带有无效表达式default的列,则会引发断言。(错误# 30271792)

  • 迭代器树的构造可能产生非层次结构;这可能发生在,例如,b而且ca左连接b左连接c也组成半连接的右侧。迭代器执行器通过在整个查询的顶部添加weedout来解决这个问题,这意味着它对于迭代器与行id交互也是必要的,它们需要行id来存储和恢复它们。并不是所有的案例都这样做,导致了错误的结果。现在,在构造任何受影响的迭代器之前,只要知道添加了顶级杂草清除,就会立即通知迭代器。(错误# 30267889)

  • 消除了SQL层和数据字典之间的外键处理代码重复。一个副作用是,现在一些错误消息的信息量更大,更清晰。(Bug #30267236, Bug #96765)

  • 在启动期间,服务器可能不正确地处理持久变量的不正确选项值,从而导致服务器退出。(错误# 30263773)

  • 在一些涉及物化半连接的查询中,当使用迭代器执行器时,条件在物化之外求值,导致使用低效的查询计划,有时还会产生错误的结果。(错误# 30250091)

  • ALTER TABLE中的列重命名的语句检查约束可能导致错误的错误消息。(错误# 30239721)

  • 选择语句,一个var_name子句位于锁定子句之前是合法的,但解析器拒绝了它。(Bug #30237291, Bug #96677)

  • 用读锁刷新表时导致死锁为备份锁定实例语句以前在同一会话中执行,并且存在并发的修改数据库语句运行在针对(隐式或显式)指定的同一数据库的另一个会话中用读锁刷新表声明。(错误# 30226264)

  • 缓慢的查询日志记录可能会导致不使用经典客户机/服务器协议的连接出现服务器出口。(错误# 30221187)

  • 添加了没有显式名称的外键的语句在作为预备语句或在具有无理由重复外键名称错误的存储程序中重新执行时失败。(Bug #30214965, Bug #96611)

    这个问题是:Bug #30171959的回归。

  • 通过并发执行多个会话插入……重复密钥更新语句放入一个表中AUTO_INCREMENT列,但没有指定AUTO_INCREMENT值时,插入可能会因惟一索引违反而失败。(Bug #30194841, Bug #96578)

  • 客户端程序可以从插件库外部加载身份验证插件。(Bug #30191834, Bug #30644258)

  • 在表扫描和索引查找之间切换时,AlternativeIterator没有重置处理程序,这可能导致断言失败。(错误# 30191394)

  • 设置open_files_limit设置为较大的值,或者当操作系统rlimit的值较大但不等于时设置该值RLIM_INF可能导致服务器内存不足。作为此修复的一部分,服务器现在为有效的open_files_limit取值为最大无符号整数值。(Bug #30183865, Bug #96525)

  • 完全合格的推荐信INFORMATION_SCHEMA表可能会失败,这取决于其中的字母大小写INFORMATION_SCHEMA是指定的。(错误# 30158484)

  • 执行时间超过35天的慢查询可能导致mysql.slow_log系统表需要修理表操作。(Bug #30113119, Bug #96373)

  • 对象指定的套接字,MySQL不支持发送systemd通知消息NOTIFY_SOCKET环境变量,如果变量命名为抽象名称空间套接字。(错误# 30102279)

  • 使用设置PERSIST_ONLY将布尔系统变量设置为数值将导致服务器无法重新启动。(Bug #30094645, Bug #30298191, Bug #96848)

  • 对前一个问题的修复包含两个方面TABLE_LIST一个不幸的构造函数。其中一个产生了TABLE_LIST对象从一个表格表示临时表的对象。在此之前,表名与别名相同;更改为从表格对象。由于对于临时表,表名是一个文件路径,因此可能会超过的限制MDL_key名称,导致断言失败。通过重新引入专门的构造函数来修复,这些构造函数的行为方式与修复前相同。(错误# 30083125)

    参考文献:这个问题是:Bug #27482976的回归。

  • UNIX_TIMESTAMP ()存储函数内发生错误,后续函数调用的小数秒数可能不正确。(Bug #30034972, Bug #96166)

  • 当公共表表达式包含不确定性表达式时(例如使用RAND ()),并且公共表表达式在外部查询中被引用了不止一次,在某些情况下它会被合并。这导致公共表表达式为每个引用返回不同的结果。在这种情况下,没有合并公共表表达式,而是将其物化。(错误# 30026353)

  • 在调试构建MySQL开始在Linux与一个lower_case_table_names = 1设置,丢弃分区表的表空间后,从MySQL 8.0.16的本地升级导致了一个严重的错误。日志含义数据字典中存储的分区表空间名称无效,MySQL 8.0.17中为分区表空间准备的元数据锁密钥与存储在mysql.tablespaces表格(错误# 30024653)

  • 杀死查询可以在目标语句之后终止该语句。(错误# 29969769)

  • lower_case_table_names = 2显示表可能无法显示大写名称的表。(错误# 29957361)

  • 当试图对生成的列使用无效表达式升级表时,报告的错误消息没有提供足够的信息。错误消息现在包括生成的列名和用于创建生成的列的表达式。(Bug #29941887, Bug #95918)

  • 试图显示无法解析的视图可能导致服务器退出,而不是错误。(错误# 29939279)

  • 的时态字面量检查错误创建表语句可能导致服务器退出。(Bug #29906966, Bug #95794)

  • 将意外值写入mysql.global_grants系统表可能导致服务器退出。(错误# 29873343)

  • LAST_EXECUTED的价值INFORMATION_SCHEMA。事件表被错误地报告为UTC,而不是事件时区。(Bug #29871530, Bug #95649)

  • keyring_encrypted_file_password在服务器启动时在命令行上设置,密码值可以对系统实用程序可见。(错误# 29848634)

  • 改变了lower_case_table_names从MySQL 5.7升级到MySQL 8.0时设置的错误可能会导致模式或表名字母大小写不匹配而导致失败。如果lower_case_table_names = 1,表和模式名称现在由升级过程检查,以确保所有字符都是小写的。如果发现表名或模式名包含大写字符,则升级过程失败并报错。相关信息请参见为升级准备安装.(Bug #29842749, Bug #95559)

  • 试图在系统资源暂时不可用时为并行读操作生成线程会引发系统错误。(Bug #29842749, Bug #95559)

  • 与一个锁表语句生效时,对锁定表的元数据更改可能导致Performance Schema或显示对象中挂起的会话变量的查询opening_tables状态。(Bug #29836204, Bug #92387)

  • 一个选择使用一个在哪里表格的条件一个和(BC(或…)导致一个不可能的范围导致计划外退出服务器。(错误# 29770705)

  • 对于json格式的审计日志记录,id字段现在可能包含大于65535的值。以前,随着日志记录活动的增加,每秒可以执行超过65536个查询,超过了允许的16位id值。(错误# 29661920)

  • 不完整的连接包可能导致客户端无法正确初始化身份验证插件名称。(错误# 29630767)

  • 来自解析器的内存不足错误可以被忽略,从而导致服务器退出。(错误# 29614521)

  • 在Linux上,当禁用并重新启用Performance Schema文件检测时,可能会引发断言。(错误# 29607570)

  • 对于定义为a的列主键在一个创建表语句中,作为表达式给出的默认值将被忽略。(Bug #29596969, Bug #94668)

  • TABLE_ENCRYPTION_ADMINMySQL 8.0.16中添加的特权被错误地授予系统定义的mysql.session用户在升级。(Bug #29596053, Bug #94888)

  • 对于使用OpenSSL加密的连接,性能模式没有报告套接字级别的网络I/O。此外,网络I/O在服务器处于闲置状态没有被性能架构报告。(Bug #29205129, Bug #30535558, Bug #97600)

  • 当查询使用合并到外部查询块中的子查询时(由于派生表的半连接转换或合并),并且子查询本身包含一个带有聚合函数的子查询,该聚合查询块与它的基本查询块不同,查询有时可能无法返回任何行,除非第二次执行或之前执行刷新表.这是因为,在合并时,所使用的表的信息和聚合函数的聚合信息没有正确更新。在引发此错误报告的情况下,这意味着包含标量子查询的比较操作被视为用于执行的const,因此范围优化器试图对其求值,标量子查询包含一个MIN ()函数引用尚未读取的外部引用。因此,在填充聚合器对象时,它基于未初始化的数据,导致不可预测的结果。(错误# 28941154)

  • 改变了mandatory_roles系统变量可能导致秀奖助金在并发会话中产生错误的结果。(错误# 28699403)

  • 的失败keyring_aws初始化导致SSL套接字初始化失败。(错误# 28591098)

  • 在某些条件下,启用read_onlysuper_read_only系统变量没有阻塞用户执行的并发DDL语句超级特权。(Bug #28438114, Bug #91852)

  • 对于较慢的查询日志记录,使用Slow_queries与文档相反,除非启用了慢速查询日志,否则不会实现。10bet官方网站(Bug #28268680, Bug #91496)

  • 当前的集团计划得到了改进,以便允许每个间隙属性具有相等谓词的分离。来自不同属性的谓词必须彼此连接,以便利用这种增强。

    我们感谢Facebook的贡献。(Bug #28056998, Bug #15947433)

  • 在某些情况下,长整型数字的参数地板()而且天花板()函数被解析为错误的类型。(错误# 27125612)

  • mysqlpump退出,而不是转储包含无效视图的数据库,但如果存在无效视图,但不位于任何要转储的数据库中,则该操作也会失败。(错误# 27096081)

  • 外键信息现在从数据字典检索,而不是从InnoDB.(错误# 25583288)

  • 中的外键定义创建表而且ALTER TABLE语句InnoDB如果语句被包装在条件注释中(例如/ * !50101年……* // * !...* /)。(Bug #21919887, Bug #78631)

  • ——log-raw选项现在在运行时作为log_raw系统变量。系统变量在启动时设置为选项值,并且可以在运行时设置以更改密码屏蔽行为。(Bug #16636373, Bug #68936)

  • 解释分析中未执行子查询选择列表,因此在计算时间或成本时没有考虑到它们。(Bug #97296, Bug #30444266)

  • 的嵌套集合,包含外部引用的内部标量子查询没有返回相同的结果选择表达式在右手边,当使用单个选择这是等价的。(Bug #97063, Bug #30381092)

  • 物化子查询可能根据是否使用索引产生不同的结果。(Bug #96823, Bug #30289052)

  • 方法指定的时间超过,查询终止MAX_EXECUTION_TIME提示,根据查询的不同阶段,产生的错误也不同。特别是,如果查询在文件排序期间终止,则引发的错误为ER_FILSORT_ABORT,尽管在这种情况下,查询应该总是以ER_QUERY_TIMEOUT.这使得捕获此类错误并正确处理它们变得不必要地困难。

    此修复将删除错误代码ER_FILSORT_ABORT而且ER_FILESORT_TERMINATED.(Bug #96537, Bug #30186874)

  • 如果存储过程的参数名为成员数组如果在定义它时没有引用参数名,则定义它的数据库无法升级到8.0.17或8.0.18。(Bug #96288, Bug #30084237)

    参考文献:参见Bug #96350, Bug #30103640。

  • 当函数如合并()IFNULL ()通过一个长整型数字列值,将此函数的负返回值转换为无符号出乎意料地取得了零。

    感谢Oleksandr Peresypkin的贡献。(Bug #95954, Bug #29952066)

  • 解释输出显示选择已优化的表对于使用MAX ()在索引列上,但是如果MAX ()它显示了在用户函数中调用的同一列使用索引代替。(Bug #94862, Bug #29596977)