MySQL 8.0版本说明/ MySQL 8.0.17的更改(2019-07-22,一般可用性)

MySQL 8.0.17(2019-07-22,通用可用性)

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

审计日志记录

  • 加密MySQL企业审计日志文件的加密和解密操作使用MySQL密匙环中存储的密码。以前,只存储一个密码。生成新密码使旧密码不可访问,使MySQL企业审计无法读取用旧密码加密的日志文件。MySQL企业审计现在在密匙环中实现密码历史记录,其中包括密码存档和过期功能。审计日志插件在每个加密的日志文件名中都包含读取文件所需的密码ID。若要启用密钥环中的旧存档密码的过期和删除,则新的audit_log_password_history_keep_days系统变量可用。看到配置审计日志特性

C API的笔记

  • 以下是C API的更改:

    • HOSTNAME_LENGTH从60改为255,从包括/ mysql_com.h包括/ my_hostname.h

    • USER_HOST_BUFF_SIZE感动的包括/ mysql_com.hsql /认证/ auth_common.h

    (错误# 29590300)

字符集的支持

  • utf8mb4字符集有一个新的二进制排序规则,utf8mb4_0900_bin,这与现有的不同utf8mb4_bin二进制排序如下:

    • 对于排序权重,utf8mb4_bin使用代码点,可能添加前导零字节,而utf8mb4_0900_bin使用utf8mb4编码字节。这两种排序方法的排序顺序是相同的,但排序顺序是utf8mb4_0900_bin要快得多。

    • 的pad属性。utf8mb4_bin垫的空间,而对于utf8mb4_0900_bin它是没有垫.因此,业务涉及utf8mb4_0900_bin不要添加尾随空格,这两种排序规则涉及带有尾随空格的字符串的比较可能不同。

    有关更多信息,请参见Unicode字符集

组件的笔记

  • 一个新的mysql_current_thread_reader组件服务可用于使组件获得当前线程的句柄。例如,该服务通过将其线程句柄传递给其他服务,使组件能够访问当前会话的属性。有关该服务的信息,请参阅MySQL Server Doxygen文档的组件子系统部分,可在以下网站获得10bet官方网站https://dev.10bet靠谱mysql.com/doc/index-other.html

配置说明

  • 中的源文件mysys_ssl目录已移动到mysys目录和mysys_ssl图书馆不再建了。(错误# 29488066)

  • MySQL配置现在需要一个最小值CMake3.5.1的版本。(错误# 29337090)

  • MySQL中主机名的最大长度从以前的60个字符增加到255个ASCII字符。例如,这适用于数据字典中与主机名相关的列,mysql系统模式,性能模式,INFORMATION_SCHEMA,sys模式;的MASTER_HOST改变主声明;的宿主显示PROCESSLIST语句输出;帐户名中的主机名(如在帐户管理报表中使用的主机名)定义者属性);和主机名相关的命令选项和系统变量。

    警告:

    • 允许的主机名长度的增加会影响在主机名列上有索引的表。的表mysql索引主机名的系统模式现在具有显式ROW_FORMAT的属性动态以容纳较长的索引值。

    • 一些文件名值的配置设置可能基于服务器主机名构造。允许的值受到底层操作系统的限制,它可能不允许文件名足够长,包括255个字符的主机名。这会影响general_log_filelog_errorpid_filerelay_log,slow_query_log_file系统变量和相应的选项。如果基于主机名的值对操作系统来说太长,则必须提供显式的较短值。

    • 虽然服务器现在支持255个字符的主机名,但是使用——ssl-mode = VERIFY_IDENTITY选项受OpenSSL支持的最大主机名长度限制。主机名匹配涉及SSL证书的两个字段,它们的最大长度如下:Common name:最大长度64;主题备选名称:最大长度按照rfc# 1034。

    希望主机名最多为60个字符的应用程序应该进行调整,以考虑到这一变化。(Bug #13548245, Bug #63814, Bug #27925782, Bug #90601, Bug #27955121, Bug #29584642, Bug #29602081, Bug #94907)

调试记录

  • MySQL服务器是一个多线程应用程序,它使用许多内部锁定原语,如互斥锁。为了检测锁获取死锁并确保运行时执行不存在死锁,MySQL现在支持LOCK_ORDER工具。这允许将锁顺序依赖图定义为服务器设计的一部分,并允许服务器运行时检查以确保锁获取是非循环的,并且执行路径符合图。LOCK_ORDER支持包括:

    • 一个lock_order_dependencies.txt定义服务器锁顺序依赖关系图的文件。

    • 一个WITH_LOCK_ORDERCMake选项,配置MySQL是否使用LOCK_ORDER工具构建。

    • 在服务器执行期间配置LOCK_ORDER工具操作的一组系统变量。

    • 一个——lock-order选择mysql-test-run.pl它控制在测试用例执行期间是否启用LOCK_ORDER工具。

    要使用LOCK_ORDER工具,必须在启用工具的情况下从源代码构建MySQL。看到LOCK_ORDER工具.它用于调试服务器,而不是用于生产使用。

弃用和移除说明

  • 浮动(D而且双(D语法指定类型列的位数浮动而且(以及任何同义词)是一个非标准的MySQL扩展。此语法已弃用,在未来的MySQL版本中将删除对它的支持。(Bug #25328973, Bug #84363)

  • 对于字符串数据类型,二进制属性是一个非标准的MySQL扩展,它是指定二进制(_bin)列字符集的排序规则(如果没有指定列字符集,则为表默认字符集的排序规则)。在MySQL 8.0中,这种非标准的使用二进制是模糊的,因为utf8mb4字符集有多个_bin针对性,所以二进制属性已弃用,将在未来的MySQL版本中删除对它的支持。应用程序应该调整为使用显式_bin排序。

    的使用二进制要指定的数据类型或字符集保持不变。

  • 非标准c风格的& &||,操作符是标准SQL的同义词,操作符已经被弃用,对它们的支持将在未来的MySQL版本中删除。使用非标准运算符的应用程序应该调整为使用标准运算符。

    请注意

    使用||已弃用,除非PIPES_AS_CONCAT启用SQL模式。在这种情况下,||表示sql标准的字符串连接操作符)。

  • 补零属性对于数值数据类型已弃用,对于整数数据类型也已弃用display width属性。支持补零以及整数数据类型的显示宽度将在未来的MySQL版本中删除。考虑使用另一种方法来产生这些属性的效果。例如,应用程序可以使用LPAD ()函数转换为所需宽度的零填充数字,或者它们可以将格式化的数字存储在字符列。

  • 无符号属性对于类型的列已弃用浮动,小数(以及任何同义词)和对它的支持将在未来的MySQL版本中删除。考虑使用简单的检查约束替换为此类列。

  • AUTO_INCREMENT不支持类型的列浮动而且(以及任何同义词),并将在未来的MySQL版本中删除。考虑删除AUTO_INCREMENT属性,或将它们转换为整数类型。

  • SQL_CALC_FOUND_ROWS查询修饰词和伴随词FOUND_ROWS ()函数现在已弃用,并将在未来的MySQL版本中删除。作为替换,考虑使用限制,然后第二个查询用COUNT (*)和不限制来确定是否有额外的行。例如,代替这些查询:

    选择sql_calc_found_rows * fromtbl_nameWHERE id > 100 LIMIT 10;选择FOUND_ROWS ();

    可以使用以下查询:

    SELECT * FROMtbl_nameWHERE id > 100 LIMIT 10;SELECT COUNT(*) WHERE id > 100;

    COUNT (*)需要进行某些优化。SQL_CALC_FOUND_ROWS导致某些优化被禁用。

安装说明

  • 服务器启动时的自动升级可能需要一段时间才能完成。为了在systemd环境中获得更好的状态通知,服务器现在在升级开始和结束时向系统通知套接字发送消息。(状态可以用服务器mysqld状态)(错误# 29493201)

密匙环的笔记

  • keyring_aws插件已经更新到使用最新的AWS SDK,因此它可以与OpenSSL 1.1兼容。

包装的笔记

  • 的下载大小和磁盘占用mysql-community-serverLinux包、调试二进制文件和插件已经移动到这些平台的单独包中:

    • EL8 Fedora:mysql-community-server带有调试二进制文件和相关插件的包现在被拆分为mysql-community-server没有调试二进制文件或插件的包mysql-community-server-debug带有调试二进制文件和插件的包。

    • Debian:mysql-community-server带有调试二进制文件和相关插件的包现在被拆分为mysql-community-server没有调试二进制文件或插件的包mysql-community-server-debug带有调试二进制文件的包mysql-community-test-debug用调试插件进行打包。

    在所有情况下,调试包都依赖于相应的mysql-community-server包中。(Bug #29769061, Bug #28647754, Bug #92415, Bug #29702765, Bug #95169, Bug #29681301)

性能模式笔记

  • 改进了编译时的性能模式版本检查,以防止与服务器版本不兼容。(错误# 29550156)

  • 以前,RWLOCK的性能模式工具将优先级读/写锁命名为rwlock(因此无法区分普通锁和优先级锁),也没有收集有关所执行的解锁操作类型的信息。现在命名优先级读/写锁prlock,这样他们的活动就开始了等待/同步/ prlock.此外,还提供了关于解锁操作的信息。(错误# 29270712)

插件的笔记

  • 不是所有的插件都能正常运行,如果加载早期在服务器启动顺序中使用——early-plugin-load选项(即,之前InnoDB初始化)。然而,InnoDB需要密匙环后端插件对加密表进行操作。要使插件能够指示服务器它们是否可以提前加载,一个新的PLUGIN_OPT_ALLOW_EARLY标志可以在插件描述符中使用。看到服务器插件库和插件描述符.MySQL发行版中包含的Keyring插件现在有PLUGIN_OPT_ALLOW_EARLY国旗使因为InnoDB需要它们,但标志不限于密匙环插件。它可以为其他能够在服务器启动序列早期成功初始化的插件设置。

    该标志对是否可以在服务器启动时加载插件没有影响——plugin-load——plugin-load-add选项,或在运行时使用安装插件声明。

    所有使用MySQL发行版8.0.17之前编译的插件都没有设置这个标志。当加载这些到8.0.17之前的服务器时,这并不重要,但尝试使用——early-plugin-load将8.0.17之前的MySQL发行版编译的插件二进制文件加载到8.0.17或更高版本的服务器将会失败。这些插件必须根据MySQL 8.0.17或更高版本重新编译。(Bug #29040456, Bug #93550)

X插件笔记

  • 方法createIndex ()方法不支持双(M, D)由于MySQL 8.0.16中的回归,用于指定双精度值的语法。(错误# 29748841)

  • X协议对参数编码为八位字节的消息的处理被纠正为支持非标量数据,如字符串数组。(错误# 29721046)

  • 当SSL连接的主机名身份验证处于激活状态时(——ssl-mode = VERIFY_IDENTITY), X协议没有在服务器证书颁发机构(CA)证书中检查与主题可选名称(san)的匹配。这可能导致不必要的连接请求被拒绝,因为它们使用了指定为SAN的有效主机名,而不是证书的Common name值。(错误# 29691694)

  • 当预备语句与X Plugin一起使用时,使用不是在在修改或查找操作中产生无效的JSON,导致错误。(错误# 29259501)

  • 在Windows上,X Plugin记录了一些不必要或信息不足的消息。这些信息已被适当删除或改进。(错误# 27839153)

  • X Plugin的SQL函数列表已过时,已更新以添加新函数并删除不再可用的函数。(错误# 26574971)

增加或更改的功能

  • InnoDB;JSON:InnoDB现在支持多值索引JSON数组。多值索引是指多个索引记录可以指向同一数据记录的索引。这对索引很有用JSON等文件{“用户”:“Bob”、“zipcode”:(94477、94536)}其中,如果希望搜索所有邮政编码,则需要为文档中的每个邮政编码设置两个索引记录。我们可以创建这样的索引zipcode使用一个数组创建索引这样的陈述:

    CREATE INDEX zip ON t1((CAST(data->'$.)邮政编码' AS UNSIGNED ARRAY)))

    实际上,这是一个使用把()函数扩展了该函数数组关键字来启用JSON数组转换为SQL数据类型数组。该表达式必须是有效的JSON表达式,并且必须指向JSON文档中的数组,这样才能有效。支持的所有类型说明符把()可以用except for二进制而且JSON.的这种用法把()函数只支持InnoDB,并且仅用于在上创建多值索引JSON数组。

    作为这项工作的一部分,MySQL添加了一个新功能JSON_OVERLAPS ()还有一个新的成员()操作人员JSON文件,如下所述:

    • JSON_OVERLAPS ()比较两个JSON文档。如果它们包含任何共同的键值对或数组元素,函数返回TRUE (1);否则返回FALSE(0)。如果两个值都是标量,则函数执行一个简单的相等性测试。如果一个参数是JSON数组,另一个是标量,则标量被视为数组元素。因此,JSON_OVERLAPS ()作为…的补充JSON_CONTAINS (),它指示是否在两者中都存在所有键值对或数组元素JSON文档。

    • 成员()测试第一个操作数(标量或JSON文档)是否是作为第二个操作数传递的JSON数组的成员,如果是则返回TRUE(1),如果不是则返回FALSE(0)。不执行操作数的类型转换。

    MySQL优化器为任何合适的查询自动使用多值索引——也就是说,在其在哪里条款中的任何一个JSON_CONTAINS ()JSON_OVERLAPS (),或成员()在JSON列中的数组上。的输出可以查看是否实际使用了这样的索引解释对于给定的查询。

    多值的索引,提供关于多值索引的更详细信息,包括示例。有关JSON_OVERLAPS ()而且成员(),有使用示例,见搜索JSON值的函数

    请注意

    数组而且成员现在是保留词,不能在没有标识符引用的情况下用作标识符。

  • 微软的Windows操作系统:现在,一条新的警告消息提醒dba,在Windows上使用MySQL命名管道建立的连接限制了连接器对命名管道请求的权限。

    在此之前,named_pipe_full_access_group系统变量被设置为映射到内置Windows的值每一个人组(SID S-1-1-0)。但是,这个组不是理想的,应该用一个组来替换,该组限制了无法对MySQL命名管道请求更少权限的连接器的成员资格。

    如果字符串值被赋给,则新的警告将在启动时写入错误日志named_pipe_full_access_group‘* *’每个人都(或Windows系统语言的等效版本)和命名管道都是启用的。此外,警告被写入错误日志,并在系统变量重置为每一个人在运行时组。

  • X DevAPI:集合对象中,以下方法已弃用,并计划在未来的版本中删除:

    • Collection.find()。()

    • Collection.modify()。()

    • Collection.remove()。()

    任何集合依赖于其中()方法中的表达式应更新其中()方法应直接在适当的().remove (),.modify ()方法。

  • JSON:MySQL现在使用两个函数支持JSON模式验证JSON_SCHEMA_VALID ()而且JSON_SCHEMA_VALIDATION_REPORT (),两者都根据符合JSON模式规范草案4的JSON模式验证JSON文档。JSON_SCHEMA_VALID ()如果文档对模式进行验证,则返回true,否则返回false。JSON_SCHEMA_VALIDATION_REPORT ()返回一个JSON文档,包含关于验证结果的详细信息。

    对于这两个函数,下面的语句都适用:

    • 要求属性的支持。

    • 支持正则表达式(无效表达式将被静默忽略)。

    • 模式中的外部资源和$ ref关键字不支持。

    有关更多信息,包括示例,请参见JSON模式验证函数

  • time_zone会话变量现在是可提示的SET_VAR优化器提示。(错误# 29776464)

  • 的次要版本libmysqlclient.soC客户端库已增加到1(21.0到21.1),以表示添加了新的符号。这样做是为了纠正MySQL 8.0.16版本中的一个疏忽。为了解决兼容性问题,所有符号的版本都是不变的。这意味着库的文件名是libmysqlclient.so.21.1.17,而库中的所有符号都被标记为21_0(从8.0.16版本不变)。(Bug #29584073, Bug #29642146)

  • 感谢Josh Braden, Daniël van Eeden, Simon Mudd和周梦康,他们对MySQL源代码中的注释和消息做出了更正。(Bug #29403708, Bug #94464, Bug #29428435, Bug #94527, Bug #29262200, Bug #94049, Bug #29468128, Bug #94625)

  • mysql客户端程序现在发送os_user而且os_sudouser连接属性(如果可用),以指示运行程序的操作系统用户的名称和SUDO_USER环境变量,分别。有关连接属性的一般信息,请参见性能模式连接属性表.感谢Daniël van Eeden对本专题的贡献。(Bug #29210935, Bug #93916)

  • 优化器现在转换a在哪里条件有不是在(子查询不存在(子查询在(子查询)是不对的,或存在(子查询)是不对的嵌入到反连接中,从而删除子查询。这与现有的类似为空不存在)外部连接优化;看到解释了额外的信息,以查询更多资料。

    此外,半连接实体化现在可以用于在哪里条件有在(子查询)是正确的,或存在(子查询)是正确的,或当条件属于左连接,例如SELECT * FROM t1 LEFT JOIN t2 ON t2。(SELECT * FROM t3).看到用半连接转换优化IN和EXISTS子查询谓词

    同样作为这项工作的结果,MySQL现在能够简化表单的条件(x为真)为假作为x不为真,与最初编写的条件相比,它可以更快地进行测试,也更容易进行优化。(错误# 29027883)

  • 中显示的密码哈希值认同输出子句显示创建用户可能包含对终端显示和其他环境有不利影响的不可打印字符。启用新print_identified_with_as_hex系统变量的原因显示创建用户将此类哈希值显示为十六进制字符串而不是常规字符串字面量。即使启用了此变量,不包含不可打印字符的散列值仍然显示为常规字符串字面量。为了与此更改兼容,创建用户而且改变用户现在接受指定为常规字符串字面量或十六进制字符串的哈希值。(Bug #28053446, Bug #90947)

  • 在MySQL 8.0中lower_case_table_names变量只能在初始化MySQL服务器时配置。因为在Debian和Ubuntu上使用APT执行的MySQL服务器安装会为您初始化MySQL服务器,所以没有机会启用MySQL服务器lower_case_table_names.要解决这个问题,您现在可以使用debconf-set-selection实用程序使lower_case_table_names(设置lower_case_table_names = 1)在使用APT安装MySQL之前。

    要启用lower_case_table_names在使用APT安装MySQL之前,执行以下命令:

    shell> sudo debconf-set-selections <<< "mysql-server mysql-server/lowercase-table-names select Enabled

    (Bug #27948395, Bug #90695)

  • 服务器现在在启动时更好地检查SSL服务器证书,并在发现问题时向错误日志写入警告。(错误# 25945005)

  • 创建的文件的掩码请求选择……到输出文件选择……到DUMPFILE从0666改为0640。的LOAD_FILE ()函数不再要求文件是世界可读的,只要求服务器可读。(错误# 24513720)

  • , mysqldump选项——set-gtid-purged控件是否设置@@GLOBAL.gtid_purged语句添加到, mysqldump输出。语句更新的值gtid_purged在重新加载转储文件的服务器上,添加来自源服务器的GTID集gtid_executed系统变量。一个新的选择——set-gtid-purged =评论现在是可用的。设置此值时,如果在备份的服务器上启用了gtid,设置@@GLOBAL.gtid_purged被添加到输出中(除非gtid_executed为空),但它会被注释掉。的值gtid_executed在输出中可用,但是在重新加载转储文件时不会自动采取任何操作。与评论,你可以控制使用gtid_executed手动设置或通过自动设置。例如,如果要将数据迁移到已经拥有不同活动数据库的另一台服务器上,您可能更喜欢这样做。感谢Facebook的贡献。(Bug #94332, Bug #29357665)

  • MySQL现在支持显式转换为浮动,真正的使用任意一个函数把()将().有关更多信息,请参见强制转换函数和运算符.(Bug #30524, Bug #11747058)

  • InnoDB现在支持重做日志归档。复制重做日志记录的备份工具有时可能在备份操作进行时无法跟上重做日志生成的速度,导致重做日志记录丢失,因为这些记录被覆盖了。重做日志归档特性通过按顺序将重做日志记录写入归档文件来解决这个问题。备份工具可以根据需要从存档文件复制重做日志记录,从而避免潜在的数据丢失。

    有关更多信息,请参见重做日志进行归档

  • 的附加索引选项JSON数据,InnoDB现在支持多值索引。多值索引是定义在包含值数组的列上的辅助索引。

  • MySQL现在提供了一个允许克隆的克隆插件InnoDB数据本地或从远程MySQL服务器实例。本地克隆操作将克隆数据存储在MySQL实例运行的同一服务器或节点上。远程克隆操作通过网络将克隆数据从提供MySQL服务器实例传输到启动克隆操作的接收服务器或节点。

    克隆插件支持复制。除了克隆数据之外,克隆操作还从提供端提取并传输复制坐标,并将其应用于接收端,从而支持使用克隆插件来提供Group replication成员和复制从端。使用clone插件进行配置要比复制大量事务快得多,效率也高得多。Group Replication成员还可以配置为使用克隆插件作为替代恢复方法,以便成员自动选择从种子成员检索组数据的最有效方式。

    有关更多信息,请参见克隆插件,用于分布式恢复的克隆

  • Group Replication为组中的成员版本实现的兼容性策略现在考虑成员的MySQL Server版本的补丁版本。以前,只考虑主版本。使用补丁版本意味着Group Replication可以在组重新配置和升级过程中更好地维护混合版本组的复制安全性。

    当成员第一次加入组或在其升级后加入组时,当选择捐献者进行状态转移时,以及当发生主要成员选择时,将应用兼容性策略。运行MySQL 8.0.16或更低版本或MySQL 5.7的成员在这些情况下只考虑主版本。对于主要成员的选举,为了让所有成员做出相同的决定,运行MySQL 8.0.17版本的成员调整他们的策略以匹配运行较低版本的成员(如果组中有)。

    在多主模式组中,运行多个MySQL Server版本的成员处于在线状态,例如在滚动在线升级过程中,group Replication现在自动管理运行MySQL 8.0.17版本的成员的读写和只读状态。如果一个成员离开组,运行当前最低版本的成员将自动设置为读写模式。将在单主模式下运行的混合版本组更改为在多主模式下运行时,使用group_replication_switch_to_multi_primary_mode ()UDF,组复制自动设置成员为读写或只读模式取决于他们的MySQL服务器版本。

    在从一个补丁版本升级到另一个补丁版本的在线升级过程中,改进的兼容性策略会影响组成员的行为,就像以前从一个主要版本升级到另一个主要版本的行为会受到影响一样。对于多主模式的组,在升级过程中,读写模式的成员数会减少,但在升级完成后,组复制会自动管理其读写状态。对于单主模式组,如果希望主模式保持为主模式,则必须最后升级主模式。

  • 在分布式恢复期间,组复制现在可以使用远程克隆操作将状态转移到加入成员。远程克隆操作允许您向组中添加新成员,而无需预先手动将组的数据传输到服务器。要使用此功能,您必须在捐赠者和加入成员上安装Clone插件,并授予BACKUP_ADMIN将复制用户的权限设置为分布式恢复,并设置为新group_replication_clone_threshold将系统变量调整到合适的水平。Group Replication自动配置所需的克隆插件设置并管理远程克隆操作。当克隆完成并且连接成员已经重新启动时,通过从提供者的二进制日志复制,将正在进行远程克隆操作时组应用的事务转移到连接成员,以完成分布式恢复。

  • 事务期间保存在二进制日志事务和语句缓存中的数据在存储缓存的内存缓冲区中以不加密的格式保存。如果数据超过了内存缓冲区中的可用空间,则将数据写入磁盘上的临时文件。从MySQL 8.0.17,当二进制日志加密在服务器上是活动的(binlog_encryption =对),用于二进制日志缓存的临时文件现在使用AES- ctr (AES Counter模式)进行流加密。因为临时文件是易变的,并且绑定到单个进程,所以使用单层加密对它们进行加密,使用一个随机生成的文件密码和初始化向量,它们只存在于内存中,从不存储在磁盘或密匙环中。在每个事务被提交之后,二进制日志缓存被重置:内存缓冲区被清除,用于保存二进制日志缓存的任何临时文件被截断,一个新的文件密码和初始化向量被随机生成,用于下一个事务。当服务器在正常关机或意外停止后重新启动时,也会进行此重置。

  • 不完全SQL谓词具有这种形式在哪里价值,在这价值是列名或常量表达式,且不使用比较运算符。MySQL现在在内部将任何这种类型的谓词重写为在哪里价值< > 0在上下文化阶段,以便查询解析器、查询优化器和查询执行器只需要使用完整的谓词。这种变化的主要可见效果是,对于布尔值,解释现在显示输出真正的而且,而不是1而且0

  • InnoDB通过更好地利用读线程,通过减少并行扫描期间发生的预取活动的读线程I/O,以及通过支持并行扫描分区,提高了用于大型数据集的并行读线程性能。

    控件控制并行读线程特性innodb_parallel_read_threads变量。现在的最大设置是256,这是所有客户机连接的线程总数。如果达到线程限制,连接将退回到使用单个线程。

  • mysqlbinlog现在支持——压缩(或- c)选项,以启用客户端/服务器协议中的压缩。

错误修复

  • NDB集群:NDB集群的编译时间compile_cluster通过删除运行MySQL集群不严格需要的软件组件的选项,构建脚本已经得到了改进。(错误# 29355872)

  • NDB集群:试图改变NDB表的列属性(例如COLUMN_FORMAT)使用ALTER TABLE算法=原地被拒绝,这是正确的行为,但这引发了误导性的错误消息。(错误# 28929906)

  • InnoDB:试图终止正在执行行计数的进程时发生失败。(错误# 29939617)

  • InnoDB:由于在MySQL 8.0.14中引入了回归,从MySQL 5.7或MySQL 8.0.14之前的MySQL 8.0版本到MySQL 8.0.16的大小写敏感文件系统上的本地升级失败了,因为有分区表和lower_case_table_names = 1.失败是由与分区表文件名相关的大小写不匹配问题引起的。引入回归的修复被恢复,这允许从MySQL 5.7或MySQL 8.0.14之前的MySQL 8.0版本升级到MySQL 8.0.17,以正常工作。然而,在MySQL 8.0.14、8.0.15和8.0.16版本中仍然存在回归。

    从MySQL 8.0.14、8.0.15或8.0.16升级到MySQL 8.0.17的区分大小写文件系统在将二进制文件或包升级到MySQL 8.0.17后启动服务器时,如果存在分区表,则会失败,出现以下错误lower_case_table_names = 1

    从服务器版本升级version_number在区分大小写的文件系统上使用分区表和lower_case_table_names == 1可能会导致问题,因此禁止使用。要升级,请使用命令行选项'upgrade=FORCE'重新启动新的服务器版本。升级完成后,请执行'RENAME TABLE 'part_table_namenew_table_name;重命名表new_table_namepart_table_name'为每个分区表。有关进一步信息,请参阅文档。10bet官方网站

    如果在升级到MySQL 8.0.17时遇到此错误,请执行以下解决方法:

    1. 使用以下命令重新启动服务器——升级=力强制升级操作继续进行。

    2. 用小写分区名分隔符标识分区表文件名(# #页# sp #):

      在information_schema中选择file_name。文件名像'%#p#%'或文件名像'%#sp#%'的文件;
    3. 对于标识的每个文件,使用临时名称重命名关联的表,然后将表重命名为其原始名称。

      mysql >重命名表table_nametemporary_table_name;mysql >重命名表temporary_table_nametable_name
    4. 验证分区表文件名中没有带小写分区名分隔符的文件名(应该返回一个空结果集)。

      mysql> SELECT FILE_NAME FROM INFORMATION_SCHEMA> WHERE FILE_NAME LIKE '%#p#%'或FILE_NAME LIKE '%#sp#%';空集(0.00秒)
    5. 运行分析表中的优化器统计信息mysql.innodb_index_stats而且mysql.innodb_table_stats表。

    由于在MySQL 8.0.14、8.0.15和8.0.16版本中仍然存在回归,在区分大小写的文件系统上不支持从MySQL 8.0.14、8.0.15或8.0.16导入分区表到MySQL 8.0.17lower_case_table_names = 1.试图这样做的结果是表缺少表空间错误。(Bug #29823032, Bug #29917793, Bug #95834)

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

  • InnoDB:lock_sys锁-等待函数引起的互斥锁争用(lock_wait_suspend_thread ()而且lock_wait_table_release_slot ())降低。(错误# 29814339)

  • InnoDB:fseg_n_reserved_pages_low ()函数确定由段保留的页数,它没有验证从段索引节点读取的结果。(错误# 29761998)

  • InnoDB:创建事务回滚列表(hit_list)与锁获取调用解耦(lock_rec_lock调用)允许使用不同的锁存方案。(错误# 29753800)

  • InnoDB:禁用性能模式消费者导致改变表空间……加密操作维护。(Bug #29646974, Bug #95005)

  • InnoDB:已修改错误消息以删除对.frm这些文件在MySQL 8.0中没有被使用。(错误# 29639655)

  • InnoDB:后台线程可以在undo表空间完全初始化和设置加密标志之前检查undo表空间的加密状态。(错误# 29600309)

  • InnoDB:表名解析函数调用在解析序列化字典信息(SDI)表名时返回false,因为这些表名没有格式化为包含数据库名。保存数据库名称的缓冲区未初始化,导致Valgrind错误。(错误# 29550527)

  • InnoDB:为动态元数据日志记录预留的迷你事务(mtr)日志缓冲区空间不足。(错误# 29524260)

  • InnoDB:争用感知事务调度(CATS)实现中的不准确性在MySQL的UBSan构建中引发了带符号整数溢出错误。(Bug #29508517, Bug #91959)

  • InnoDB:rw-lock实现中内存屏障不足导致ARM死锁。

    感谢来自Arm Technology的Yibo Cai的贡献。(Bug #29508001, Bug #94699)

  • InnoDB:INFORMATION_SCHEMA。INNODB_TABLESPACES加密启用undo表空间加密后未更新列。(Bug #29492911, Bug #94665)

  • InnoDB:由于对包含正斜杠字符(/)的模式或表名的错误解析,无法访问重新定位的表,服务器错误地将其解释为目录分隔符。(错误# 29492113)

  • InnoDB:应用了各种修复和修订InnoDBmemcached的源代码。(错误# 29485891)

  • InnoDB:要启用全局访问,值innodb_directories变量现在在内部作为全局变量而不是静态变量存储。(错误# 29471990)

  • InnoDB:在调试版本中,thd_innodb_tmpdir ()函数不接受NULL参数。(错误# 29471846)

  • InnoDB:文件空间分配代码中的减法操作错误地将结果存储为无符号变量,导致断言失败。(错误# 29466680)

  • InnoDB:在移动或删除默认的undo表空间并使用新的表空间重新启动服务器之后innodb_undo_directory值,MySQL在新的位置重新创建了undo表空间,但未能更新数据字典中的undo目录路径。(错误# 29461900)

  • InnoDB:在恢复期间回滚事务时访问了以前释放的LOB页。(错误# 29440408)

  • InnoDB:在恢复期间,当没有页面要读时,发出了将页面读入缓冲池的请求。添加了一个检查以避免不必要的读请求。(错误# 29440208)

  • InnoDB:MySQL 8.0.14中引入的回归导致了一个无效的(旧的?)表或数据库名称在MySQL实例上创建分区表时出现错误lower_case_table_names = 1.导致倒退的变化已经恢复。(Bug #29426720, Bug #94519)

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

  • InnoDB:一个全文从MySQL 5.7升级到MySQL 8.0后,在MySQL 5.6中创建的索引表在名称中带连字符的数据库中导致启动失败。的表空间文件路径全文在数据字典中没有找到辅助表,并且在随后生成的文件路径中没有正确处理数据库名称中的连字符。(Bug #29411899, Bug #94431)

  • InnoDB:如果重做日志在逻辑上不是空的,并且包含一个单独的块,并且在插入缓冲区合并生成新的重做记录但新记录还没有刷新到磁盘之前,服务器在恢复过程中退出,那么就有可能发生数据丢失。(Bug #29411832, Bug #94448)

  • InnoDB:InnoDB创建路径和文件名超过的表空间时,返回未知的一般错误MAX_PATH限制在Windows。InnoDB现在返回一个更有意义的错误。(错误# 29341634)

  • InnoDB:移动到另一个目录后,找不到撤消表空间文件。(错误# 29328158)

  • InnoDB:参数无法启动服务器通过innodb_buffer_pool_size =违约设置。没有检查默认值是否与相关系统变量设置兼容。(Bug #29267814, Bug #94065)

  • InnoDB:创建表空间……添加数据文件子句不再允许循环目录引用。例如,循环目录引用(/ . .)在以下声明中使用:

    创建表空间ts1添加数据文件ts1。炎症性肠病的any_directory/ . . / ts1.ibd ';

    在Linux上有一个例外,如果前面的目录是符号链接,则允许循环目录引用。例如,上面示例中的数据文件路径是允许的,如果any_directory是一个符号链接。(仍然允许数据文件路径以'开头. . /”。)

    为了避免升级问题,在升级到MySQL 8.0.17或更高版本之前,从表空间数据文件路径中删除任何循环目录引用。查询表空间路径信息INFORMATION_SCHEMA。INNODB_DATAFILES表格(错误# 29157265)

  • InnoDB:在MySQL服务器运行时手动更改系统时间,导致页面清理器线程延迟。(Bug #29138644, Bug #93708)

  • InnoDB:更新语句在遇到错误时并不总是正确地禁用半一致读取,这可能导致调试模式下的断言错误。(错误# 29047894)

  • InnoDB:在清除被删除的行时,管理锁继承的逻辑没有正确地确定应该继承的锁类型,以满足活动事务的约束检查。(错误# 29004362)

  • InnoDB:中执行准备语句时,对隐式打开的数据字典表获得不必要的读锁锁表模式。(错误# 28875646)

  • InnoDB:在日志应用过程中,在优化表操作,InnoDB未在检查虚拟列索引更新之前填充虚拟列。(错误# 28834208)

  • InnoDB:从聚集索引复制数据的操作执行错误,导致空间索引使用指向聚集索引的过时指针的空间行。(错误# 28758961)

  • InnoDB:一个插入涉及生成虚拟机的操作列导致用不正确的值更新辅助索引。(错误# 28652826)

  • InnoDB:配置innodb_data_file_path而且innodb_temp_data_file_path使用设置PERSIST_ONLY =默认值错误地将变量值设置为NULL。(错误# 28590014)

  • InnoDB:一个创建表……替代选择操作了lock_rec_get_rec_not_gap(锁)断言失败。该操作在事务对象上设置了一个标志,指示a取代操作被请求,但在更新相关视图之前没有清除标志,导致后续插入操作将被解释为取代操作,导致使用错误的行锁。(Bug #28523025, Bug #92068)

  • InnoDB:super_read_only启用,企图重命名表临时表上的操作引发断言而不是返回错误。(Bug #28490368, Bug #91975)

  • InnoDB:由于在虚拟索引前缀搜索期间读取了未初始化的字节,报告了Valgrind错误。(错误# 28184025)

  • InnoDB:InnoDB创建系统表空间大于2GB时,初始化失败。处理步骤(错误# 27538464)

  • InnoDB:如果全文缓存大小超过全文缓存大小限制,则不会释放同步数据时获取的全文缓存锁。(错误# 25289359)

  • InnoDB:INNODB_METRICSmetadata_table_reference_count计数器报告负值。(Bug #20584149, Bug #75966)

  • InnoDB:使用不同的客户机会话auto_increment_increment值时执行并发插入操作可能导致重复键错误。(Bug #15851528, Bug #67526)

    引用:恢复补丁:Bug #14049391, Bug #65225。

  • 分区:对于分区表,anALTER TABLE语句会导致查询结果不正确:

    • 该语句通过重命名列来交换列,或者直接用重命名列或用删除列/添加一列

    • 在分区表达式中使用了交换的列。

    • 该更改是作为原地操作执行的,不在分区之间重新分配行。

    现在禁止重命名这样的列,除非相同ALTER TABLE语句满足以下条件之一:

    • 该语句使表成为非分区的。

    • 该语句重新定义表分区或分区表达式(这会导致重新分配行的表重构)。这使我们能够支持现有的场景,其中分区表达式在列重命名之后被更新。

    • 分区使用分区键()使用空列列表。它使用主键进行分区,主键跟踪列的重命名。

    (Bug #29541665, Bug #94792)

  • 分区:ALTER TABLE……交换分区失败,出现错误分区和表之间的ROW_FORMAT属性不匹配当分区表的分区使用不同的行格式时,即使要交换的分区使用与非分区表相同的行格式。(错误# 28687608)

  • 复制:当消息碎片用于大型Group Replication消息时(MySQL 8.0.16提供了这一功能,并且是默认的),如果XCom中节点标识符最高的组成员发送的碎片消息被部分传递,并且一个或多个成员在传递剩余的消息片段之前离开了组,那么消息的重新组装将导致Group Replication停止工作。成员的丢失意味着原始发送方的节点标识符在组的新视图中不再有效。为了纠正这个问题,碎片消息的重组现在使用来自上一个被交付的片段的交付信息,它反映了视图更改后的新情况,而不是来自第一个被交付的片段,它反映了视图更改前的旧情况。(错误# 29716639)

  • 复制:对象的组成员数与自动递增间隔之间的差异而发出的错误消息group_replication_auto_increment_increment系统变量,而不是auto_increment_increment系统变量。的价值auto_increment_increment已更改为group_replication_auto_increment_increment当组复制开始时,但仅当auto_increment_increment而且auto_increment_offset有它们的默认值,并且从MySQL 8.0,只在多主模式下。的价值auto_increment_increment始终是检查错误消息的值,现在已更正为提供准确的系统变量名。(错误# 29542425)

  • 复制:的MySQL Server升级后无法启动组复制最小的选项(——升级=最小),它不会升级复制内部所依赖的系统表。以前,在这种情况下,服务器无限期地等待Group Replication启动。现在,通过解除阻塞等待线程并发出预期的错误,可以正确地处理这种情况ER_GRP_RPL_START_GRP_RPL_FAILED.(Bug #29423358, Bug #94515)

  • 复制:在组复制的组通信系统(GCS)中,对正在离开组的成员的怀疑处理的更改(这减少了一些测试用例的执行时间)在恢复失败的情况下导致了问题,因为它导致了恢复失败和视图更改通知之间的循环依赖关系。现在,如果错误导致无法恢复,GCS将以适当的顺序执行处理操作。成员离开组,应用视图更改,然后终止恢复线程。(Bug #29417365, Bug #29628909)

  • 复制:当一个MySQL服务器实例生成的事件被写入另一个实例的二进制日志时,第二个服务器隐式地假定第一个服务器支持与它自己相同数量的二进制日志事件类型。如果不是这样,则事件头处理不正确。这个问题现在已经解决了。感谢Facebook的贡献。(Bug #29417234, Bug #94500)

  • 复制:在Group Replication中,即使组中已经有相同版本的成员,加入的成员也可能错误地将自己识别为与现有复制组不兼容,因为他们会与所有其他成员进行检查,包括最高版本的成员。加入的成员还在兼容性检查中包含了自己的版本。现在,加入的成员只将自己与现有成员的最低版本进行比较,而不计算自己的版本。(Bug #29390946, Bug #94429)

  • 复制:如果一个为备份锁定实例语句用于获取实例级备份锁,然后使用停止奴隶语句发出时,就会在SQL线程等待备份锁时创建死锁停止奴隶语句等待SQL线程完成当前操作。为了防止这种情况的发生停止奴隶进程现在在继续之前尝试获取备份锁,如果无法获取锁则返回错误。(Bug #29386503, Bug #93649)

  • 复制:从MySQL 8.0.13开始,如果任何复制区域通道有打开的临时表,则不能使用设置@@global.binlog_format设置@@persist.binlog_format.以前,如果在实现新限制之后尝试此操作,则会向客户端返回错误的错误消息(引用正在运行的复制区域通道应用程序作为问题,而不是引用已打开的临时表)。现在返回适当的错误消息。(Bug #29370024, Bug #94340)

  • 复制:在反序列化格式描述事件时,二进制日志校验和处理错误。(错误# 29355110)

  • 复制:在使用基于行的复制时,当复制应用程序线程解压缩行更改事件时,将计算所有函数索引的索引值之前图像和的形象。在这种情况下之前图像,这些值是不必要的。因此,为了优化行解包,之前的图像已经删除了这个计算。(错误# 29304076)

  • 复制:当一个内存表在服务器重新启动后隐式删除主服务器上的删除语句,以便slave也清空表。这个生成的事件现在在二进制日志中包含一个注释,因此删除语句很容易识别。感谢Daniël van Eeden的贡献。(Bug #29157796, Bug #93771)

  • 复制:对象中提供了无效的起始偏移量显示binlog事件语句,则返回无效偏移量,取代第一个返回事件的正确起始位置。(Bug #29039732, Bug #93544)

  • 复制:如果在主执行期间出现问题,用于配置在线组的Group Replication udf有时不会返回错误。udf现在还会在开始初始化之前检查Group Replication插件是否正在停止。(Bug #28978767, Bug #93372)

  • 复制:复制可以在一个记录没有找到错误时,值INDEX_SCAN, HASH_SCAN(MySQL 8.0中的默认值)设置为slave_rows_search_algorithms系统变量和一个更新事件包含对表中同一行的两次更新,这些更新没有惟一键,这意味着使用了哈希扫描。在这种情况下,由于行更改,哈希扫描错过了第二次更新。现在,在更新行之后,哈希扫描操作在哈希映射中搜索更新的行,并应用任何进一步的更新。

    当价值TABLE_SCAN, HASH_SCAN设置为slave_rows_search_algorithms系统变量,因此搜索不能使用索引记录没有找到在上述情况下,无论表是否具有惟一的键,都可能发生错误。此外,使用此设置,当在具有惟一键的表上使用散列扫描时,如果更新事件包含两个依赖于顺序的行更新,则更新可能会按顺序应用,导致复制停止并出现重复键错误。为了避免这些问题,文档已经更新为声明值10bet官方网站TABLE_SCAN, HASH_SCAN不应使用。(错误# 28846386)

  • 复制:当在复制从机上启用二进制日志记录时,——replicate-same-server-id而且——log-slave-updates如果服务器是循环复制拓扑的一部分,从服务器上的选项可能在复制中导致无限循环。(在MySQL 8.0中,默认启用二进制日志记录,当启用二进制日志记录时,从更新日志记录是默认的。)但是,使用全局事务标识符(gtid)可以跳过已经应用的事务的执行,从而避免这种情况。因此,对这一备选办法组合的限制现在已被取消gtid_mode =对是集。在任何其他GTID模式下,服务器仍然不会以这种选项组合启动。为了防止在服务器启动后产生问题情况,现在不能将GTID模式更改为其他模式在一个设置了此选项组合的运行服务器上。感谢Facebook的贡献。(Bug #28782370, Bug #92754)

  • 复制:用于组复制的组通信引擎(XCom, Paxos的一个变体)没有以适当的方式处理内存不足错误。如果不能分配内存来为消息生成有效负载的副本,则会记录错误,但消息仍然会被发送,并且有效负载为空。接收成员上的组通信系统(GCS)将该消息丢弃为空,接收成员上的XCom实例接受此操作并没有重试,结果实际上跳过了该消息。这导致在接收成员上设置的GTID偏离组,导致复制错误。如果XCom遇到内存不足错误,它将优雅地终止,这样就不会发生这种情况。(错误# 28702320)

  • 复制:在二进制日志中的查询日志事件中,用于执行的线程ID删除表而且删除语句被错误地识别或根本没有识别。在涉及到临时表的多线程复制从服务器上(临时表需要正确的线程ID,因为它们是特定于会话的),这种遗漏会在使用时导致错误mysqlbinlog重放二进制日志以进行时间点恢复。线程ID现在已正确设置。(Bug #28642318, Bug #92398)

  • 复制:当触发器调用插入更新语句,该语句将列设置为默认值默认的该列的表达式是非确定性的,因此在基于语句的复制下触发触发器时不会引发预期的警告。此外,如果二进制日志记录格式为混合的格式记录非确定性语句声明而不是that used for

    导致触发器触发的语句在解析时检查所触发的语句是否有不确定的。此时,已经解析了触发语句,但尚未解析,因此可以执行的唯一检查是触发语句是否直接引用任何非确定性操作符。当a使用非确定性算符时默认的表达式,在触发语句解析之前,非确定性是不可见的,而解析是在触发触发器时发生的。

    这是通过在确定日志记录格式时添加额外检查来解决的,在这种情况下,如果语句的任何子语句可以写入具有非确定性列的表,则将其标记为不安全的默认的表达式。因为目前还不知道是否默认的表达式将被子语句使用,此检查将该语句标记为不安全的,即使子语句为具有非确定性的列提供显式值默认的表达式。(错误# 28297486)

  • 复制:当从服务器将主状态和连接信息记录到表(master_info_repository =表),这是MySQL 8.0中的默认值mysql.slave_master_info如果服务器处于超级只读模式,则在关闭时不会更新表(super_read_only =对).此时没有向错误日志写入错误,但是在服务器启动后复制失败,因为主日志文件和主日志位置信息已过期。在关闭时更新主信息日志的线程现在像其他复制线程一样被排除在只读检查之外,因此即使服务器处于超级只读模式,它也可以更新表。对于正在关闭的slave的错误处理也得到了改进,因此任何写入slave状态日志的失败都会导致错误日志中的错误。(Bug #27675107, Bug #89987)

  • 复制:如果复制从端试图使用错误的用户名、主机或端口连接到主端,则指定连接失败原因的原始错误消息将被通用消息覆盖。的输出中修正了该问题显示奴隶状态语句和Performance Schema表中replication_connection_status.(错误# 26580064)

  • macOS:对于使用DMG包执行的macOS安装,launchd操作是有问题的:

    • 在此之前,关闭如果通过首选项窗格将MySQL配置为启动时启动,则会导致重新启动。这也影响了mysqladmin关闭命令。以这些方式启动的服务器关闭现在可以正常工作了。

    • 在此之前,重新启动没有工作。现在它可以正常工作了。

    • 以前,如果服务器没有配置为在引导时启动,那么意外的服务器退出不会导致自动重新启动。无论启动时启动配置如何,具有非零退出状态的退出现在都会导致重新启动。

    (错误# 29789857)

  • JSON:MAX ()而且MIN ()用于返回的表达式JSON数据有时将这些值比较为字符串而不是字符串JSON值,导致了意想不到的结果;这一点在JSON值是数字。

    这是因为集团当使用临时表时没有进行索引比较JSON正确的价值观。(错误# 28947381)

  • JSON:JSON_TABLE ()返回错误未知的数据库”当从存储函数执行时。

    这个问题的根本原因是,当从一个选择合并表使用JSON_TABLE (), MySQL只检查派生表。返回的结果表JSON_TABLE ()将其标记为常规表,以便在试图执行查询时,服务器无法打开它。现在MySQL检查要添加的表是否不是一个内部表,也就是说,不是一个派生表JSON_TABLE ()结果表,或对递归公共表表达式的引用。(Bug #92976, Bug #28851656)

  • 与管理选择格兰特报表有时处理不当。(错误# 29900772)

  • 属性,一些外键错误消息可能不同,这取决于用户是否具有GRANT选项特权。(错误# 29868844)

  • 在升级操作期间,如果禁用自动提交,则升级帮助表失败。(Bug #29865428, Bug #95620)

  • 在升级期间将动态分配的字典对象取到vector中table_open_cacheSize导致数据字典表重新打开,触发垃圾收集机制,错误地释放收集的对象。随后尝试访问已释放对象导致段错误。(错误# 29823053)

  • 对于从MySQL 5.7升级到MySQL 8.0,升级过程没有关闭innodb_ * _stats_backup57.ibd文件mysql系统模式,导致后续文件系统操作出错。(错误# 29791350)

  • mysqld——初始化如果文件系统挂载在数据目录挂载点上,并且发现了+文件或目录存在。的发现了+现在在数据目录初始化过程中忽略文件或目录。(错误# 29780434)

  • MySQL升级没有分配AUDIT_ADMIN帐户的特权超级特权。(错误# 29770732)

  • REGEXP_REPLACE ()函数没有在所有情况下正确处理空字符串。(错误# 29763554)

  • 在对存储的程序本地对象进行排序时,可能会引发过于严格的断言。(Bug #29759547, Bug #95062)

  • group_replication_get_communication_protocol ()如果任何组成员处于恢复状态(这是不必要的限制),则用于查询组的通信协议版本的UDF将失败。现在可以使用UDF,前提是它运行的成员处于ONLINE状态,并且与组的大多数成员保持联系。(Bug #29754967, Bug #95306)

  • 对于一些论点重复(),最大长度的计算并不总是正确处理。(错误# 29739778)

  • 更新表的语句检查约束可能无法执行约束。(Bug #29706621, Bug #95189)

  • 对于从RPM或Debian包安装,如果mysql_upgrade_info发现数据目录中的文件存在,但属于,它现在更改为与数据目录相同的所有者。还设置了正确的SELinux文件上下文。(错误# 29704041)

  • 从RPM包安装可能会导致权限不正确的错误日志。(错误# 29702462)

  • 一个mysql_upgrade_info创建的文件。mysql_upgrade程序在上一次升级期间只能修改执行mysql_upgrade程序,导致升级错误。现在发出一个警告而不是一个错误,这允许升级操作继续进行。的mysql_upgrade_info文件已弃用,将在未来的MySQL版本中删除。(Bug #29702060, Bug #95165)

  • 事件发生前,复制组成员无法与组内大多数成员联系group_replication_unreachable_majority_timeout属性指定的自动重新连接尝试次数已用完group_replication_autorejoin_tries系统变量没有成功重新连接,有时无法执行指定的操作group_replication_exit_state_action系统变量。成员尝试使用当前会话执行操作,有时会失败。成员现在确保在使用会话连接到服务器以执行退出状态操作之前对会话进行初始化。(Bug #29698754, Bug #95151)

  • 在执行升级时,更新数据字典表的服务器端SQL语句使用了非默认排序规则,导致升级失败。(Bug #29697670, Bug #95144)

  • 使用以下命令启动服务器——skip-grant-tables和调用ROLES_GRAPHML ()可能通向服务器出口。(错误# 29681975)

  • 选择不同的当使用固定长度键时,没有在所有情况下正确地重复数据删除记录。(错误# 29628699)

  • 使用异步C API函数的客户端程序可以在发生致命错误(如连接失败或接收到过大的包)后访问释放的内存。(错误# 29596244)

  • ST_AsWKB ()函数可能无法执行适当的错误检查。(错误# 29594287)

  • 对于数据目录初始化失败的情况,服务器可以生成一条消息,指示可以删除该目录,即使服务器本身没有创建该目录。该消息现在指示只有服务器创建的目录中的文件才能被删除。(Bug #29594082, Bug #94880)

  • 在MySQL 8.0中keyring_encypted_file插件无法读取MySQL 5.7创建的文件keyring_encypted_file插件。(错误# 29588345)

  • 在启用了未定义行为杀毒器的构建中,在my_strtoll10_mb2 ()而且val_decimal ().(Bug #29585648, Bug #29594951)

  • 服务器在启动时检查授权表结构时产生的一些诊断被写成错误而不是警告。(错误# 29558993)

  • comp_err实用程序可以读取未初始化的数据。(错误# 29550442)

  • 启用审计日志加密可能导致服务器退出。(错误# 29549327)

  • RPM包过时的更新,使成功升级从MariaDB到EL8上的MySQL。(Bug #29549127, Bug #29623146, Bug #29623201, Bug #29659212)

  • 在一个连接的形式左连接t ON哪里t。x=0不是真的MySQL评估是不正确的作为对于一个参数,并拒绝它。这会导致左连接到内连接的无效转换,从而导致结果中缺少行。同样的问题影响了相同形式的连接,但具有不是假的在哪里条件。(错误# 29540230)

  • 如果read_only系统变量已启用,其值未正确应用于对字符集和整理数据字典表的更新。(Bug #29533590, Bug #94769)

  • 的函数STATEMENT_DIGEST ()而且STATEMENT_DIGEST_TEXT ()使用character_set_client同时解析函数的参数而不是参数的字符集。(错误# 29526571)

  • 服务器现在跟踪数据字典的升级以确保这一点INFORMATION_SCHEMA当数据字典表发生更改时,将重新创建视图。(错误# 29513265)

  • 执行STATEMENT_DIGEST ()STATEMENT_DIGEST_TEXT ()可能对数据产生意外的副作用performance_schema.events_statements_summary_by_digest表格(错误# 29512067)

  • 的实现创建表没有执行任何查找或写入操作时,没有为表提供明确定义的起始游标。(错误# 29511318)

  • 当一个表是常量优化的,连接中的任何谓词项条件也应在标记为的表上计算常量来确保行符合条件。

    优化器未能将表标记为常量当它被处理成一个不可能条件,在这种情况下,该表的结果行是扩展的行。

    此修复程序设置const_table标记,并将该行标记为行。它也改变解释对于一个优化为具有不可能ON条件的表的输出,其中结果与其他一样,来自该行的值现在被传播到行列值中常量行。(错误# 29493830)

  • 包含时子查询可能返回多余的行optimizer_switch不包括firstmatch =对.(错误# 29493026)

  • 在某些系统上,RPM包检测操作系统是EL6还是EL7失败。(错误# 29492896)

  • 禁用存储在数据字典中存储在存储引擎私有数据字段中的键的SQL层验证,以允许存储引擎根据需要添加新的键。存储引擎现在负责密钥验证。(Bug #29491593, Bug #94667)

  • 检查返回一些比较行表达式的不正确结果。(错误# 29491083)

  • 当优化包含的表连接时命令而且限制,优化器通过考虑整个连接的扇出来修改第一个表上的选择限制。的扇出计算filter_effect对于每个表,可以设置为COND_FILTER_STALE(-1)表示未知值。优化器实际上没有检查此值,这可能导致负扇出,导致控件中意外的行值为0解释查询的输出。

    现在COND_FILTER_STALEfilter_effectUnknown)被专门检查,如果找到它,扇出也被假定为未知,因此要从第一个表中选择的行数不会被整个连接的扇出修改。(Bug #29487181, Bug #29531472)

  • 做了一个隐含的假设至少()而且最大的()这些函数的参数都是有符号值或无符号值。(错误# 29467577)

  • 一些关于BIT_OR ()函数并不总是被正确处理。(错误# 29459549)

  • 的错误处理user_attributes列的mysql.user系统表可能导致服务器退出。(错误# 29451897)

  • MySQL集群特定的Debian调试包的调试符号路径不正确。(错误# 29446947)

  • 使用Protobuf 3.7.0构建时发生编译失败。(Bug #29436791, Bug #94543)

  • 在Debian和Ubuntu上,MySQL包没有启用mysql.service从本地MySQL包升级后。(错误# 29435592)

  • 当发生错误时,服务器没有正确地关闭共享内存连接,这可能导致意外的服务器行为。(错误# 29435426)

  • 内部JOIN_CACHE: join_record ()方法试图使其操作的所有表处于相同的状态has_row而且null_row标志,在进入时保存状态,在完成时恢复适当的标志。

    这里讨论的问题是在这些旗帜恢复后产生的,因为restore_last_record ()也被调用来恢复任何已处理的记录,这可能导致设置一个null_row根据已保存的状态刚刚恢复的标志。这可以通过调用来解决restore_last_record ()在保存的状态恢复之前,而不是之后,并确保reset_null_row ()如果保存的状态指示null_row一开始并没有立旗。(错误# 29435133)

  • 一些ALTER TABLE语句的使用添加一列没有达到预期的效果。(错误# 29428288)

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

  • 从MySQL 5.7升级到MySQL 8.0时,遇到一个非本地分区表,报错错误消息。的错误消息引用-DWITH_PARTITION_STORAGE_ENGINECMake这个选项在MySQL 8.0中不支持。(Bug #29426632, Bug #94518)

  • 在启动时,服务器没有正确地检查持久变量中的用户名和主机名的长度。(错误# 29420141)

  • 解析器可能会为某些多语句查询泄漏内存。(错误# 29419820)

  • 在EL8上从RPM包安装MySQL与安装的MeCab库发生冲突。(错误# 29413115)

  • 在FreeBSD上,为致命信号转储的堆栈跟踪不能正常工作。(错误# 29408039)

  • derived_merge的值中关闭的开关optimizer_switch系统变量,从中检索基表的信息INFORMATION_SCHEMA。表中显示不适当的信息TABLE_COMMENT列。(Bug #29406053, Bug #94468)

  • 在某些情况下,使用命令在子选择中没有产生预期的结果。(错误# 29402943)

  • 汇总带有通配符的查询(可能还有某些其他通配符查询)可能会导致断言错误。(错误# 29396628)

  • 中的条件。如果具有常数值的函数真正的并不总是正确处理。(错误# 29394833)

  • MySQL 8.0.13中与全文搜索相关的代码更改导致了一个分割错误。(错误# 29393105)

  • mysqlpump是否没有检查参数——结果文件被正确打开,如果发生错误则意外退出。(错误# 29389828)

  • 在没有连接的查询中,直到初始化完成后才启用批处理模式,因此抵消行是在批处理模式之外读取的。这否定了批处理模式的任何性能优势。(错误# 29373972)

  • 重命名函数索引时,服务器没有检查可能的重复索引名称。(错误# 29360763)

  • 系统变量服务没有检查某些操作的输入缓冲区大小。(错误# 29343505)

  • mysql系统模式转储,mysqlpump按行转储某些表,而不是按帐户管理语句转储。(错误# 29343073)

  • 的函数索引的创建联盟子查询导致调试版本中的断言。(错误# 29342245)

  • 非数字参数AVG ()并不总是被正确处理。(错误# 29321764)

  • 具有非常多列的结果集可能导致客户机程序使用所有可用内存。现在客户端库分配的不超过max_allowed_packet用于结果集元数据的字节,如果超出此限制,则返回内存不足错误。如果发生此错误,将是致命的,客户端应该断开连接。(错误# 29316814)

  • 调用mysql_shutdown ()当服务器和客户端来自不同的MySQL系列时,可能会导致客户端退出,因为返回包有效负载的错误解释。(错误# 29315393)

  • 如果使用mysql 4.1之前的协议与服务器通信,客户机程序在读取结果集元数据时可能会失败。(错误# 29304864)

  • 处理程序语句对于已生成列的表并不总是能正确工作。(错误# 29300049)

  • 客户端/服务器协议中的会话跟踪信息可能被错误处理。(错误# 29297652)

  • 类的客户端程序libmysqlclientC客户端库可以在收到好吧包含畸形会话跟踪信息的数据包。(Bug #29297620, Bug #29630735)

  • PAD_CHAR_TO_FULL_LENGTH启用SQL模式,密码更改失败,没有报告警告或错误。(错误# 29287785)

  • 的用户定义函数的初始化代码keyring_aws插件没有正确检查插件是否已初始化。(错误# 29278153)

  • 与聚合函数或窗口函数相比,标量子查询并不总是能够被正确识别和处理。(错误# 29276063)

  • Ubuntu软件包没有禁用初始化脚本的二进制日志记录。(错误# 29263771)

  • 使用无效的排序规则名称可能损坏内部排序规则映射。(错误# 29258979)

  • 单表更新而且删除使用索引表达式的语句在作为准备语句执行时可能导致服务器退出。(错误# 29257254)

  • audit_log插件未记录日志卸载插件audit_log语句。(错误# 29248047)

  • MySQL现在使用打开(O_TMPFILE)在创建立即解除链接的临时文件时。这比以前更有效,并避免了极小的竞态条件可能性。感谢Daniel Black的贡献。(Bug #29215177, Bug #93937)

  • audit_log过滤操作可能会泄漏内存。(错误# 29201747)

  • GRANT选项在某些情况下,特权可能被不当处理。(错误# 29179334)

  • 在此之前,就像比较可能是不正确的,如果其中之一_SQL通配符被用作逃避的性格。现在可以使用这些字符了。(Bug #29175461, Bug #93811)

  • component_sys_variable服务可能无法读取某些系统变量,导致服务器退出。(错误# 29162657)

  • 多个表更新语句在确定要更新的行时可以搜索不正确的生成列值。(错误# 29154379)

  • 如果使用导致内存不足的性能模式参数启动服务器,则启动失败。(Bug #29140212, Bug #93726)

  • 为了与标准SQL保持一致性和遵从性,可以使用ISNULL ()函数现在被打印为为空生成的警告中解释语句。(错误# 29119455)

  • 一些补充的Unicode字符可能被错误地标记为无效的警告消息。(Bug #29110613, Bug #93626)

  • 对于从MySQL 5.7升级到MySQL 8.0,未赋予用户所有动态权限。(错误# 29043233)

  • 当使用子分区时,表序列化字典信息(SDI)不存储在任何表空间文件中。(Bug #29020745, Bug #93499)

  • 删除某些性能模式表的权限被错误地检查。(错误# 29010031)

  • , mysqldump没有包装设置名字utf8mb4而且SET character_set_client = utf8mb4特定于版本的注释中的语句,这可能导致兼容性问题。(Bug #29007506, Bug #93450)

  • 定义为的一个或多个列上创建的惟一索引,优化器未能处理使用该索引的连接eq_ref

    作为修复的一部分,迟了现在还执行过滤,以避免处理比较当势能相等时。(Bug #28965762, Bug #29337233)

  • 对于调试构建,可以通过预期的和实际的排序规则不同的字符串比较引发断言。(错误# 28960901)

  • 服务器没有正确处理子查询,该子查询在转换为半连接之前包含合并的派生表或公共表表达式,而这些表达式又具有在哪里子句使用对索引列的外部引用。(错误# 28955216)

  • 使用派生表的查询,其中包含命令并不总是正确处理。(错误# 28942965)

  • 当客户因不活动超过wait_timeout值时,写入错误日志的消息不清楚。现在ER_NET_WAIT_ERROR,它更具体地说明了问题的原因。感谢Mattias Jonsson的贡献。(Bug #28940167, Bug #93240)

  • 并发执行的冲洗的特权随着创建用户改变用户可能导致服务器死机。(Bug #28937018, Bug #93085)

  • 情况下依赖于索引前缀值的语句比较可能产生不正确的结果。(Bug #28934315, Bug #93215)

  • 当排序消除后调整查询成本以补偿原始成本估计中没有考虑到的排序时,估计有时可能过低,甚至为负数。

    的总成本中添加了排序成本Optimize_table_order: consider_plan (),减去总成本加入:优化()如果发现不需要排序。

    如果consider_plan ()发现排序不需要,它不将排序开销添加到总开销中,但仍然在中记录一个排序开销加入:sort_cost (),这设置为前面考虑的候选计划的排序成本。之后,加入:优化()看到加入对象具有关联的排序成本,并从总成本中减去该成本,因为它也看到不需要排序。由于排序成本来自与所选计划不相同的候选计划,因此估计是不正确的。

    解决办法就是制造consider_plan ()加入:sort_cost如果没有将排序代价加到总代价中,则为0,从而错误地调整了代价加入:优化()不执行。(错误# 28884359)

  • 一些GIS代码在Visual Studio 2017 15.5.6下编译失败。(错误# 28861188)

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

  • 在使用交换这些生成列所依赖的列之后,虚拟生成列上的存储生成列值和索引没有正确更新ALTER TABLE重命名列改变列

    现在禁止为生成的列、生成的默认值和函数索引重命名基列,除非相同ALTER TABLE语句满足以下条件之一:

    • 该语句删除生成的列、生成的默认值或函数索引。

    • 该语句更新相关表达式。这使我们能够支持现有的场景,在这些场景中,生成表达式会根据基列重命名进行更新。

    删除生成的列、生成的默认值或函数索引所依赖的列的限制也以类似的方式放松了。(Bug #28772251, Bug #92727)

  • 生成的列不会将基列排除在仅索引的访问之外。(错误# 28652733)

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

  • 设置PERSIST_ONLY没有妥善处理version_tokens_session系统变量。(错误# 28542569)

  • 对于调试版本,不适当的错误检查创建表语句可能导致引发断言。(Bug #28490361, Bug #91976)

  • MySQL 5.7支持外键开启InnoDB表的父键隐藏了部分引用列,但MySQL 8.0没有。MySQL 8.0现在支持此功能。(Bug #28480149, Bug #91952)

  • 插入……关于重复密钥更新没有考虑活动角色授予的特权。(错误# 28395115)

  • 对于未加载的组件,在启动时用——松如果组件稍后在运行时加载,则不处理前缀。(错误# 28341329)

  • 客户端程序以交互方式请求的长密码可能不能以空结束。(错误# 28121400)

  • 在构建MySQL时,CMake开始下载过程提高通过在目标目录中创建一个长度为零的tar球,该tar球在下载完成时被删除。如果下载中断或超时,则阻止该文件的存在CMake从试图执行下载时开始。现在,如果存在零长度tarball,则在开始下载之前删除它。(错误# 28089173)

  • 当线程进程滴答时间超过最大允许值时,线程池组可能被阻塞。计时时间现在使用更大的数据类型来允许更大的值。(错误# 28072609)

  • 没有正确检查权限改变用户……认同……通过.(错误# 27923149)

  • MySQL不支持OpenSSL会话票证,但没有设置SSL_OP_NO_TICKET标志来通知OpenSSL。旗帜现在已经设置好了。(错误# 27655493)

  • audit_null插件没有正确地检查空事件记录。(错误# 27638290)

  • UpdateXML ()在某些情况下并不总是正确释放内存。(错误# 27312862)

  • 中的空值的名字列的mysql.plugin系统表在启动过程中导致服务器退出。(错误# 27302459)

  • 服务器没有正确检查权限缓存索引语句。(错误# 26173827)

  • thread_pool插件启用,性能架构status_by_thread表中没有数据。(错误# 25933891)

  • GRANT选项特权被视为与数据库操作相关。(错误# 25203933)

  • 修理表存档表可能导致服务器退出。(错误# 23304911)

  • 如果一个安装插件语句在共享库名称中包含无效的UTF-8字符,它会导致服务器挂起(或在调试构建中引发断言)。(Bug #14653594, Bug #23080148, Bug #27167197)

  • 日志记录功能mysql.slow_log当值对于表列来说太大时,系统表可能会失败。现在,日志记录将尽可能地进行,记录可以提供的信息。否则,该行将被丢弃,并将一条消息写入错误日志。(Bug #11748692, Bug #37132)

  • 一个查询使用在哪里date_column像‘year_value失败,错误为1525错误的日期值在Windows平台上。(Bug #95780, Bug #29904751)

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

  • 对先前问题的修复一年值被视为无符号的,但这不允许在涉及减法的计算过程中可能出现负数,这可能导致数据截断错误。(Bug #95045, Bug #29668676)

    这个问题是一个Bug #92209, Bug #28562930的回归。

  • 当使用带有零输入行聚合的派生表时,聚合函数的结果不会正确地复制到临时表中。在多次计算派生表的情况下,例如在执行横向连接时,这将导致不正确的结果。(Bug #94721, Bug #29514504)

  • 没有框架规范的窗口,从具有命令产生了错误的结果。(Bug #94251, Bug #29328529)

  • 函数返回的结果REGEXP_REPLACE ()而且REGEXP_SUBSTR ()使用utf - 16而不是搜索匹配的表达式的字符集和排序。(Bug #94203, Bug #29308212)

  • 一个UNION ALL查询与SUM (常数与使用SUM (代替。(Bug #93922, Bug #29227464)

  • JSON_OBJECTAGG ()在存在重复键时是不确定的,除非窗口对键有顺序(这是预期的行为),但不再在窗口框架中的键-值对仍然出现在结果中。(Bug #93822, Bug #29175262)

  • 限制应用前在带有子选择的查询中。(Bug #93214, Bug #28934388)

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

  • 一个查询涉及集团在一个时间戳列导致键(ER_DUP_ENTRY)错误。这个问题出现在时间戳使用给定的时区设置将值插入到表中,并在更改了时区设置后取回这些值,这样至少插入的一些时间戳值发生在新时区的时间从标准时间更改为日光时间(DST)的小时内,在此期间时间相同时间戳值可以存在两次。现在,服务器将返回错误密钥的重复条目'group_key,如果分组涉及时间戳列,它反而会引发错误对于具有DST的时区,时间上的分组是不确定的。请考虑将此查询切换到UTC。

    另外,建议设置explicit_defaults_for_timestamp以及一个或多个MODE_NO_ZERO_IN_DATEMODE_NO_ZERO_DATE,或MODE_INVALID_DATES作为服务器SQL模式的一部分,以帮助避免这个问题。(Bug #90398, Bug #27970159)