MySQL 8.0版本说明/ MySQL 8.0.21的变化(2020-07-13,一般可用)

MySQL 8.0.21的变化(2020-07-13,一般可用性)

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

在MySQL 10bet官方网站8.0.21的文档中,我们已经开始修改这个术语,这个术语奴隶副本,这个术语白名单allowlist,以及术语黑名单过滤清单.目前产品的语法没有变化,因此这些术语仍然存在于当前代码需要使用它们的文档中。10bet官方网站参见博客文章MySQL术语更新为更多的信息。

账户管理笔记

  • 在创建或更新MySQL用户帐户时,您现在可以设置每个用户的注释和属性。用户注释由作为参数传递给的任意文本组成评论从句与a连用创建用户改变用户声明。用户属性由JSON对象形式的数据组成,作为参数传递给属性子句,用于这两个语句中的任何一个。该属性可以包含JSON对象表示法中任何有效的键-值对。

    例如,下面两条语句中的第一条语句创建一个用户帐户bill@localhost使用注释文本这是Bill的用户账号.第二个语句使用密钥向该帐户添加一个用户属性电子邮件,取值为bill@example.com

    CREATE USER 'bill'@'localhost' COMMENT '这是bill的用户账号';ALTER USER 'mary'@'localhost' ATTRIBUTE '{"email":"bill@example.com"}';

    只有一个评论属性可以用在相同的地方吗创建用户改变用户声明。

    用户注释和用户属性在内部一起存储为一个JSON对象,注释文本作为具有键的元素的值评论.控件检索用户注释和用户属性属性列的INFORMATION_SCHEMA。USER_ATTRIBUTES表;由于这些数据是JSON格式的,你可以使用MySQL的JSON函数和操作符来处理它JSON函数).对现有用户属性的更改将与它的当前值合并,就像您使用的那样JSON_MERGE_PATCH ();新的键值对被添加到属性中,现有键的新值将覆盖它们以前的值。

    要从用户属性中删除给定的键值对,请使用改变用户用户属性”{关键”:零}’

    有关更多信息和示例,请参见创建用户声明改变用户声明,INFORMATION_SCHEMA USER_ATTRIBUTES表

    参考资料:请参见:Bug #31067575。

C API的笔记

  • 每OpenSSL的建议,x509_check_host ()而且X509_check_ip_asc ()C客户端库中的调用分别被替换为X509_VERIFY_PARAM_set1_host ()而且X509_VERIFY_PARAM_set1_ip_asc ()调用。(错误# 29684791)

  • MySQL C API现在支持异步函数的压缩。这意味着MYSQL_OPT_COMPRESSION_ALGORITHMS而且MYSQL_OPT_ZSTD_COMPRESSION_LEVEL选项mysql_options ()函数现在影响异步操作,而不仅仅是同步操作。看到mysql_options ()

编译的笔记

  • 用于服务器版本的Boost库的最低版本现在是1.72.0。(错误# 30963985)

配置说明

连接管理笔记

  • MySQL服务器支持主要用于普通客户机连接的网络接口,以及用于管理客户机连接的可选管理网络接口。以前,主界面和管理界面使用相同的TLS配置,例如用于加密连接的证书和密钥文件。现在可以为管理界面单独配置TLS材料:

    • 有一些新的配置参数专门应用于管理界面。

    • 更改实例重新加载TLS语句扩展为为通道子句,用于指定重新加载TLS上下文的通道(接口)。

    • 新的绩效模式tls_channel_status表公开主界面和管理界面的TLS上下文属性。

    • 为了向后兼容,管理接口使用与主接口相同的TLS上下文,除非为管理接口配置了某些非默认TLS参数值。

    有关更多信息,请参见对加密连接的管理接口支持改变实例声明,tls_channel_status表

弃用和移除说明

  • 分区:不支持带索引前缀的列作为表分区键的一部分;以前,服务器在创建、更改或升级按键分区的表时引用这些列时,会简单地省略这些列,并且没有表明发生了这种省略,除非建议的分区函数只使用带有前缀的列,在这种情况下,语句会失败,并显示一条错误消息,该消息不能确定问题的实际来源。这种行为现在已被弃用,并将在未来的版本中被删除,在建议的分区键中使用任何此类列将导致创建表ALTER TABLE他们被拒绝的陈述。

    当将一个或多个使用索引前缀的列指定为分区键的一部分时,现在会为每个这样的列生成一个警告。此外,当一个创建表ALTER TABLE语句被拒绝,因为建议的分区键中指定的所有列都使用了索引前缀,现在返回的错误消息将清楚地说明语句没有成功的原因。这包括分区函数建议的列通过使用空值隐式定义为表主键中的列的情况分区键()条款。

    有关更多信息和示例,请参见键分区不支持列索引前缀,关键的分区.(Bug #29941932, Bug #29941959, Bug #31100205)

    参考资料:请参见:Bug #29942014。

JSON的笔记

  • 添加了JSON_VALUE ()函数,简化了在上创建索引JSON列。调用JSON_VALUE (json_doc路径返回类型等价于调用JSON_UNQUOTEJSON_EXTRACT (json_doc路径),类型,在那里json_doc是JSON文档,路径JSON路径表达式指向文档中的单个值,并且类型数据类型是否兼容把()返回类型是可选的;如果没有指定返回类型,JSON_VALUE ()返回VARCHAR (512)

    JSON_VALUE ()还支持在空而且在错误与with类似的从句JSON_TABLE ()

    可以在上创建索引JSON列使用JSON_VALUE ()如下所示:

    CREATE TABLE inventory(items JSON, INDEX i1 ((JSON_VALUE(items, '$.name') return VARCHAR(50)))), INDEX i2 ((JSON_VALUE(items, '$.name'))return DECIMAL(5,2)))), INDEX i3 ((JSON_VALUE(items, '$。quantity' RETURNING UNSIGNED))));

    假设项目列包含的值,例如{“名称”:“帽子”,“价格”:“22.95”,“数量”:“17”}”,你可以发出查询,如以下,可以使用这些索引:

    选择项目- > " $。price" FROM inventory WHERE JSON_VALUE(物品,'$.name'返回VARCHAR(50)) = "帽子";SELECT * FROM inventory WHERE JSON_VALUE(items, '$。return DECIMAL(5,2)) <= 100.01;SELECT条目—>“$.name”AS条目,条目—>“$.name”price" AS amount FROM inventory WHERE JSON_VALUE(items, '$。quantity' RETURNING UNSIGNED) > 500;

    有关更多信息和示例,请参见JSON_VALUE ()函数。

优化器的笔记

  • MySQL尝试使用一个有序的索引命令集团具有限制子句,当优化器确定这将导致更快的执行时,重写它所做的任何其他选择。因为进行此确定的算法对数据分布和其他条件做出了特定的假设,所以它可能并不总是完全正确的,而且在某些情况下,为此类查询选择不同的优化可能会提供更好的性能。要处理这种情况,现在可以通过设置optimizer_switch系统变量的prefer_ordering_index旗帜

    有关此标志及其使用示例的详细信息,请参见可切换的优化,限制查询优化

    感谢杰里米·科尔的贡献。(Bug #97001, Bug #30348211)

    参考资料:请参见:Bug #31686878。

  • 一个文档更新删除语句,该语句使用具有(不)(不)存在谓词现在可以在许多情况下使用半连接转换或子查询具体化。这可以在语句不使用时完成限制命令,以及当子查询中使用的任何优化器提示或值允许半连接或子查询具体化时optimizer_switch服务器系统变量。

    您可以看到何时对合格的单表使用半连接优化或子查询具体化删除更新由于…的存在join_optimization对象。还可以通过检查的输出来查看转换的执行情况解释格式=树;如果不执行优化,这显示<不能被迭代器执行器>执行,而多表语句则报告完整的计划。

    作为这项工作的一部分,现在多表支持半一致的读取更新InnoDB表,当事务隔离级别较弱时可重复读取.(Bug #35794, Bug #96423, Bug #11748293, Bug #30139244)

  • 添加了optimizer_switch国旗subquery_to_derived.当此标志设置为,优化器将符合条件的标量子查询转换为派生表上的左外部连接(在某些情况下,是内部连接)。这种优化可以应用于满足以下条件的子查询:

    • 它使用一个或多个聚合函数,但没有集团

    • 它是选择在哪里加入,或条款。

    • 它不是一个相关子查询。

    • 它不使用任何不确定性函数。

    任何而且所有子查询,可以重写使用MIN ()MAX ()也不受影响。

    subquery_to_derived =对,优化还可以应用于作为参数的表子查询不是在存在,或不存在,其中不包含一个集团条款。

    subquery_to_derived标志设置为默认情况下,因为它通常不会提高性能,而且它的主要用途是测试。

    有关更多信息,请参见可切换的优化,以获取更多信息和示例。另请参阅使用合并或物化优化派生表、视图引用和公共表表达式,限制查询优化

  • 基于MySQL 8.0.18所做的工作,服务器现在在查询中执行强制转换,以避免在比较字符串数据类型与数字或时间类型时不匹配;与比较数值类型和时间类型时一样,优化器现在在参数的数据类型与预期数据类型不匹配的表达式和条件中,在项目树中添加强制转换操作。这使得将字符串类型与数字或时态类型进行比较的查询等同于与SQL标准兼容的查询,同时保持与以前版本MySQL的向后兼容性。现在,每当字符串值与数值或时间值进行比较时,使用任何标准的数值比较运算符(>=><< =<>/! =,< = >).

    这种隐式类型转换现在在字符串类型之间执行(字符VARCHAR二进制VARBINARY文本枚举,或)和一个数值类型(短整型非常小的整数MEDIUMINTINT/整数长整型数字小数/数字浮动真正的;而且),将字符串值转换为;如果数值不是类型浮动,或真正的,它也被cast到.一个一年值也被强制转换为当与字符串值(字符串值)比较时。的字符串类型比较时间戳DATETIME值,参数类型转换为DATETIME;当字符串类型与日期值时,字符串被强制转换为日期

    例如,这样的查询SELECT * FROM t1 JOIN t2 ON t1。char_col= t2。int_col重写并执行为SELECT * FROM t1 JOIN t2char_col=强制转换(t2。int_col双),SELECT * FROM t1 JOIN t2 ON t1。varchar_col= t2。timestamp_col是改变了SELECT * FROM t1 JOIN t2varchar_col= CAST(t2。timestamp_colDATETIME)之前执行。

    的输出可以看出什么时候将强制类型转换注入到给定查询中解释分析解释格式= JSON,或解释格式=树解释(传统格式=)也可以使用,但在这种情况下是必要的,在执行解释声明中,发行显示警告查询重写后的查询。

    这一更改不会导致查询结果或性能上的任何差异。

包装的笔记

  • 对于RPM和Debian包,客户端插件从服务器包移到客户端包。此外,客户端插件的调试版本被移到测试包中。(Bug #31123564, Bug #31336340)

  • Windows的MSI包不再包括遗留的服务器数据组件。(错误# 31060177)

  • 捆绑的Protobuf库从3.6.1版本升级到3.11版本。(Bug #31000511, Bug #98852)

  • libevent与MySQL绑定的库升级到2.1.11版本。此外,为WITH_LIBEVENTCMake选项,进行了以下两项更改:

    1. 是的不再是的同义词系统.使用系统代替。

    2. 如果系统指定但没有系统libevent,将不再使用绑定的版本来代替丢失的系统库,并发生错误。

    (错误# 30926742)

  • 与MySQL捆绑的ICU (Unicode国际组件)库已经升级到版本65.1。

可插入身份验证

  • MySQL企业版authentication_ldap_sasl实现SASL LDAP身份验证的插件支持多种身份验证方法,但根据主机系统配置的不同,它们可能并不都可用。新Authentication_ldap_sasl_supported_methods状态变量为受支持的方法提供了可发现性。它的值是一个字符串,由由空格分隔的支持的方法名称组成。例子:“SCRAM-SHA1 GSSAPI”

安全记录

测试套件的笔记

  • mysql-test-run.pl不再接受命令选项的唯一前缀。必须给出完整的选项名称。(错误# 31390127)

  • MySQL测试更新为使用googletest 1.10.0。(错误# 31364750)

  • innodb.innodb_mysql更新测试用例以避免输出行顺序的不确定性。感谢Facebook的贡献。(Bug #30810572, Bug #98377)

  • mysql-test-run.pl现在支持一个——mtr-port-exclude选项,用于指定搜索要使用的可用端口范围时要排除的端口范围。的MTR_PORT_EXCLUDE也可以设置环境变量来达到相同的效果。感谢Facebook的贡献。(错误# 30809607)

  • 除了在接收时中止CTRL+C(SIGINT),mysql-test-run.pl现在还会显示到那时为止失败的测试用例列表。(错误# 30407014)

X插件笔记

  • 当使用美元符号($)引用整个文档时,X Plugin根据使用它的上下文以不同的方式处理引用。现在已经标准化了。(错误# 31374713)

  • 对于全局SQL模式的某些设置,X Plugin的身份验证过程无法接受正确的用户密码。身份验证过程现在独立于全局SQL模式的设置来运行,以确保一致性。(错误# 31086109)

添加或更改的功能

  • 重要的变化:默认情况下,复制源服务器为二进制日志中的每个事件写入一个校验和,由系统变量指定binlog_checksum,默认为该设置CRC32.以前,Group Replication不支持在二进制日志中存在校验和,因此binlog_checksum必须设置为没有一个在配置将成为组成员的服务器实例时。这个需求现在被删除了,并且可以使用默认值。的设置binlog_checksum团队的所有成员不必相同。

    请注意,组复制不使用校验和来验证上的传入事件group_replication_applier通道,因为事件会从多个源写入中继日志,并且在它们实际写入原始服务器的二进制日志之前,也就是生成校验和的时候。校验和用于验证事件的完整性group_replication_recovery通道和组成员上的任何其他复制通道。

  • 性能:改进了执行UNHEX ()函数通过引入一个查找表来将十六进制数字字符串映射到其二进制表示形式。在测试中,这种更改可以将函数的执行速度提高8倍或更多。(错误# 31173103)

  • InnoDB:现在可以使用启用和禁用重做日志记录Alter instance {enable | disable} innodb redo_log语法。此功能用于将数据加载到新的MySQL实例中。禁用重做日志有助于通过避免重做日志写入来加快数据加载。

    INNODB_REDO_LOG_ENABLE特权允许启用和禁用重做日志记录。

    Innodb_redo_log_enabled状态变量允许监控重做日志记录状态。

    看到禁用重做日志

  • InnoDB:在繁忙的系统上截断undo表空间可能会影响性能,因为相关的刷新操作会从缓冲池中删除旧的undo表空间页,并将新的undo表空间的初始页刷新到磁盘。要解决此问题,已删除冲洗操作。

    旧的undo表空间页面现在会在最近最少使用的时候被动释放,或者在下一个完整的检查点删除。在截断操作期间,新的undo表空间的初始页现在被重做记录,而不是刷新到磁盘,这也提高了undo表空间截断操作的持久性。

    为了防止过多的undo表空间截断操作导致的潜在问题,检查点之间在同一undo表空间上的截断操作现在被限制为64个。如果超过了这个限制,undo表空间仍然可以被设置为不活动的,但是它直到下一个检查点之后才会被截断。

    INNODB_METRICS已删除与失效的撤消截断刷新操作关联的计数器。删除计数器包括:undo_truncate_sweep_countundo_truncate_sweep_usecundo_truncate_flush_count,undo_truncate_flush_usec

    看到撤消表空间

  • InnoDB:在启动时,InnoDB根据数据字典中存储的表空间文件路径验证已知表空间文件的路径,以防表空间文件被移动到不同的位置。新innodb_validate_tablespace_paths变量允许禁用表空间路径验证。这个特性适用于不移动表空间文件的环境。禁用表空间路径验证可以提高具有大量表空间文件的系统的启动时间。

    有关更多信息,请参见禁用表空间路径验证

  • InnoDB:方法在数据目录外部创建的表和表分区数据文件数据目录子句现在仅限于已知的目录InnoDB.这一更改允许数据库管理员控制表空间数据文件的创建位置,并确保在恢复期间可以找到数据文件。

    一般的和每个表对应的表空间数据文件(.ibd文件)不能再创建在undo表空间目录(innodb_undo_directory)除非这是直接已知的InnoDB

    对象定义的已知目录datadirinnodb_data_home_dir,innodb_directories变量。

    删除一个InnoDB位于每个表对应的文件表空间中的表删除现有的表空间并创建一个新的表空间。从MySQL 8.0.21开始,InnoDB在默认位置创建新的表空间,如果表空间是用较早的版本创建的,并且当前表空间目录未知,则向错误日志写入一个警告。有截断表在当前位置创建表空间,将目录添加到innodb_directories设置运行之前截断表

  • InnoDB:为了提高操作的并发性,需要访问表和行资源的锁队列,锁系统互斥(lock_sys - >互斥)被分片锁闩所取代,锁队列被分组为表和页锁队列碎片,每个分片都有一个专用的互斥锁来保护。以前,单锁系统互斥保护所有锁队列,这在高并发性系统中是一个争用点。新的分片实现允许对锁队列进行更细粒度的访问。

    锁系统互斥(lock_sys - >互斥)被替换为以下分片锁闩:

    • 全球锁存器(lock_sys - > latches.global_latch),由64个读写锁对象(rw_lock_t).对单个锁队列的访问需要共享的全局锁存以及锁队列碎片上的锁存。需要访问所有锁队列的操作采用一个独占的全局锁存,它锁存所有表锁和页锁队列碎片。

    • 表分片锁存(lock_sys - > latches.table_shards.mutexes),实现为512个互斥锁的数组,每个互斥锁专用于512个表锁队列碎片中的一个。

    • 页面碎片锁存(lock_sys - > latches.page_shards.mutexes),实现为512个互斥锁数组,每个互斥锁专用于512个页面锁队列碎片中的一个。

    性能模式等待/同步/ / innodb / lock_mutex互斥监控单锁系统互斥的仪器被监控新的全局、表分片和页分片锁存的仪器所取代:

    • 等待/同步/ sxlock / innodb / lock_sys_global_rw_lock

    • 等待/同步/ / innodb / lock_sys_table_mutex互斥

    • 等待/同步/ / innodb / lock_sys_page_mutex互斥

  • 在此之前,——disabled-storage-engines选项不忽略选项值中列出的存储引擎周围的空格。引擎名称周围的空格现在被忽略了。(Bug #31373361, Bug #99632)

  • HANDLE_FATAL_SIGNALSCMake选项允许配置Address杀毒器和未定义行为杀毒器构建是否使用杀毒器运行时库来处理致命信号,而不是mysql内部函数。默认选项是对于non-sanitizer构建,洗手液的构建。如果选项是,默认动作用于SIGBUS、SIGILL和SIGSEGV,而不是内部函数。(错误# 31068443)

  • 中重复出现两次或两次以上的列集团(通过别名),结合汇总的行为与MySQL 5.7不同。例子:

    SELECT a, b为a, COUNT(*) FROM t1 GROUP BY a, b WITH ROLLUP;

    这些查询的行为已经被修改,以更好地匹配MySQL 5.7。但是,应该避免使用它们,因为行为可能在将来再次发生变化,或者这样的查询可能是非法的。(Bug #30921780, Bug #98663)

  • comp_err为某些输入文件问题提供更好的错误消息。感谢Facebook的贡献。(Bug #30810629, Bug #98390)

  • MySQL Server Docker容器现在支持在客户端会话中重启服务器(例如,当重新启动语句由客户端执行,或在配置一个InnoDB集群实例).要启用这个重要的特性,容器应该使用码头工人运行选项——重启设置为该值如果执行失败.看到启动MySQL服务器实例获取详细信息。(错误# 30750730)

  • 解释分析现在支持格式选择。目前,是唯一支持的格式。(错误# 30315224)

  • 旋转innodb主键何时不再允许read_onlysuper_read_only启用。(错误# 30274240)

  • 在支持原子DDL的存储引擎上创建表……选择语句现在在使用基于行的复制时作为一个事务记录在二进制日志中。以前,它被记录为两个事务,一个用于创建表,另一个用于插入数据。这种变化,创建表……选择语句现在对于基于行的复制是安全的,并且允许与基于gtid的复制一起使用。有关更多信息,请参见原子数据定义语句支持.(Bug #11756034, Bug #47899)

  • 加载XML现在支持CDATA部分导入的XML文件。(Bug #98199, Bug #30753708)

  • X插件mysqlx_bind_address系统变量现在接受多个IP地址像MySQL服务器的bind_address使X Plugin能够监听多个网络套接字上的TCP/IP连接。

    一个重要的区别是,对于MySQL服务器,地址列表中的任何错误都会阻止服务器启动,但X Plugin(它不是强制插件)不会这样做。使用X Plugin时,如果列出的地址中有一个不能被解析,或者X Plugin不能绑定到它,则跳过该地址,记录一条错误消息,X Plugin尝试绑定到剩余的每个地址。X插件Mysqlx_address状态变量只显示绑定成功的列表中的地址。如果列出的地址都不能成功绑定,X Plugin将记录一条错误消息,说明X协议不能使用。

  • ENGINE_ATTRIBUTE而且SECONDARY_ENGINE_ATTRIBUTE选项被添加到创建表ALTER TABLE,创建索引语法。的ENGINE_ATTRIBUTE选项也被添加到创建表空间而且修改表空间语法。允许为表、列、索引和表空间定义存储引擎属性的新选项被保留以供将来使用。

    以下INFORMATION_SCHEMA添加表是为了查询表、列、索引和表空间的存储引擎属性。值存储在数据字典中。这些桌子留作将来使用。

  • Group Replication组成员现在可以发布一个IP地址列表,加入组成员可以使用这些IP地址建立连接,以便在分布式恢复期间进行状态传输。以前,现有成员的标准SQL客户端连接用于此目的以及客户端通信。相反,发布分布式恢复端点可以改进对网络基础设施中的分布式恢复流量的控制(包括远程克隆操作和来自二进制日志的状态传输)。成员的分布式恢复端点列表使用new指定group_replication_advertise_recovery_endpoints系统变量,并且应用与使用SQL客户机连接进行分布式恢复时相同的SSL需求。

  • MySQL Server的默认日志记录级别省略了信息性日志消息,这些日志消息以前包括了Group Replication的一些重要的生命周期事件,这些事件不是错误情况,比如组成员关系的更改。关于复制组的重要事件的消息现在已被重新分类为系统消息,因此无论服务器日志记录级别如何,它们始终出现在服务器的错误日志中。因此,操作人员可以查看复制组中服务器成员关系的完整历史记录。此外,组通信层上的套接字绑定错误已经从信息重新分类为错误消息。

  • 上的分布式恢复,现在可以指定用户凭据开始GROUP_REPLICATION声明使用用户密码,DEFAULT_AUTH选项。上的分布式恢复使用这些凭据group_replication_recovery通道。当您启用指定用户凭据时开始GROUP_REPLICATION时,凭据只保存在内存中,并由停止GROUP_REPLICATION语句或服务器关闭。这些凭据可以使用改变主语句,它们存储在复制元数据存储库中,因此可以帮助保护Group replication服务器免受未经授权的访问。

    提供用户凭证的新方法与在服务器启动时自动启动Group Replication不兼容。如果以前使用改变主语句中指定的凭据开始GROUP_REPLICATION优先于这些。但是,使用来自复制元数据存储库的凭据开始GROUP_REPLICATION在没有用户凭据的情况下指定,当group_replication_start_on_boot系统变量设置为(包括远程克隆后的分布式恢复操作)。以获得在上指定用户凭据的安全好处开始GROUP_REPLICATION,确保group_replication_start_on_boot被设置为(默认为),并使用a改变主语句清除以前为group_replication_recovery通道。

  • 控件指定的组复制中XCom消息缓存的最大大小的最小设置group_replication_message_cache_size系统变量,已经从大约1 GB减少到134217728字节,或大约128 MB。注意,这个大小限制只适用于存储在缓存中的数据,缓存结构需要额外的50 MB内存。应该对所有组成员设置相同的缓存大小限制。XCom消息缓存的默认大小为1gb,这也是以前的最小设置,没有改变。

    提供较小的消息缓存大小,可以在可用内存有限且网络连接良好的主机上进行部署。拥有非常低的group_replication_message_cache_size如果主机在不稳定的网络上,则不建议设置此选项,因为较小的消息缓存会使组成员在暂时失去连接后更难重新连接。如果某个成员临时缺席期间交换的一些消息由于达到了最大大小限制而从其他成员的XCom消息缓存中删除,则该成员无法使用消息缓存重新连接。它必须离开组并重新加入,以便通过分布式恢复检索事务,这比使用消息缓存要慢,尽管成员仍然可以以这种方式重新加入,而不需要操作员干预。

    注意,在MySQL 8.0.21中,默认情况下,在成员被驱逐出组之前会添加一个5秒的驱逐超时(由group_replication_member_expel_timeout系统变量)。因此,使用此默认设置,XCom消息缓存现在需要以10秒为周期(排除超时加上初始5秒的检测周期)存储组交换的消息,而不是像以前那样以5秒为周期(仅初始5秒的检测周期)。

  • group_replication_member_expel_timeout指定Group Replication组成员在产生怀疑后等待的时间(以秒为单位),然后将怀疑失败的成员从组中驱逐出去。在怀疑产生之前的最初5秒的检测周期不算作这段时间的一部分。

    以前,指定的等待时间group_replication_member_expel_timeout默认为0,这意味着在5秒的检测周期结束后,有嫌疑的成员有义务立即被驱逐。根据用户反馈,等待时间现在默认为5秒,让与组失去联系的成员总共10秒重新连接到组。如果该成员在此期间重新连接,它可以从XCom消息缓存中恢复错过的消息并返回在线自动状态,而不是被驱逐出组,需要自动重新加入程序或手动操作人员干预才能重新加入。

    如果您以前根据成员被驱逐之前的默认时间(仅5秒的检测周期)的预期消息量调整了XCom消息缓存的大小,那么请增加您的group_replication_message_cache_size设置为考虑新的驱逐超时,它将默认时间翻倍至10秒。使用新的默认驱逐超时,您可能开始看到来自GCS对活动组成员的警告消息,指出当前不可达的成员可能需要恢复的消息已从消息缓存中删除。此消息表明某个成员需要使用消息缓存重新连接,而缓存大小可能不足以支持驱逐成员之前的当前等待时间。

  • 组复制的自动重新连接特性现在默认激活。的group_replication_autorejoin_tries系统变量,在MySQL 8.0.16中可用,使一个被驱逐的成员或达到不可达的大多数超时尝试自动重新加入组。这个系统变量最初的默认值为0,因此auto-rejoin没有被激活,现在的默认值为3,这意味着当一个成员被驱逐或无法到达多数超时时,他会三次尝试重新加入这个组。在每次尝试之间,成员要等待5分钟。如果耗尽了指定的尝试次数,而该成员没有重新加入或停止,则该成员继续执行group_replication_exit_state_action系统变量。

    自动重新加入特性最大限度地减少了将成员重新加入组时手动干预的需要,特别是在临时网络问题相当常见的情况下。在自动重新连接尝试期间和之间,成员保持在超级只读模式,并且不接受写入。但是,仍然可以对成员进行读取,随着时间的推移,陈旧读取的可能性越来越大。如果您想要干预使成员脱机,可以在任何时候通过使用停止GROUP_REPLICATION语句或关闭服务器。如果在任何一段时间内都不能容忍过期读取的可能性,则设置group_replication_autorejoin_tries将系统变量设置为0,在这种情况下,每当某个成员被逐出组或达到不可达的多数超时时,就需要操作符干预。

错误修复

  • InnoDB:一个集团操作上的JSON数组列导致MySQL的UBSan构建失败,由于不正确的类型转换。(错误# 31451475)

  • InnoDB:几个InnoDB错误日志消息定义时没有符号值。(错误# 31401028)

  • InnoDB:与doublewrite flush and sync操作相关的数据文件写入失败后,未释放用于单页写入的文件段。(错误# 31370227)

  • InnoDB:取消表空间截断在删除截断操作之前和之后使用相同的空间ID时访问的代码。这种情况不再发生了。被截断的undo表空间将被一个新的具有不同空间ID的undo表空间数据文件所取代。(错误# 31354435)

  • InnoDB:undo表空间的保留空间id的范围从每个undo表空间512增加到400000。(错误# 31340834)

  • InnoDB:控件中插入日志时发生的错误ddl_log不返回表,使操作看起来好像是成功的,并且在执行表空间加密操作时没有注册事务。(错误# 31236217)

  • InnoDB:lob:清洗()函数未能正确释放用于撤消日志记录类型的lob (TRX_UNDO_UPD_DEL_REC),当插入操作修改删除标记的记录时生成。(Bug #31222046, Bug #99339)

  • InnoDB:尝试重建被丢弃的分区后发生关闭错误。(错误# 31215415)

  • InnoDB:内部get_real_path ()函数,负责检索目录或文件路径,被修改为在确定路径是文件还是目录之前去掉末尾分隔符。此外,如果路径不存在,或者不能识别为文件或子目录,如果basename具有三个字母的后缀,该函数现在假定该路径是一个文件。(错误# 31215160)

  • InnoDB:修改了与表空间相关的错误消息。(Bug #31205520, Bug #31205441)

  • InnoDB:为了避免潜在的编译问题,__attribute__((常量)而且__attribute__((纯)从内部删除了属性InnoDB功能。(错误# 31153123)

  • InnoDB:在为直方图采样生成读线程时,没有观察到并行读线程限制,导致断言失败。(错误# 31151218)

  • InnoDB:当为生成直方图统计数据对记录进行抽样时,没有检查事务读视图。(错误# 31151077)

  • InnoDB:一个I/O完成例程无法获得一个LRU列表互斥,因为锁存被另一个线程持有。(错误# 31128739)

  • InnoDB:请求的可附加事务线程InnoDB已被主线程预留的Ticket,导致死锁。此外,服务器无法响应杀了语句。(错误# 31090777)

  • InnoDB:INNODB_METRICS表格AVG_COUNT_RESET定义为模块所有者的计数器的值报告为NULL。的METRIC_AVG_VALUE_RESET字段被错误地标记为NULL。感谢Fungo Wang的贡献。(Bug #31084706, Bug #98990)

  • InnoDB:在启动时,在undo表空间截断操作期间意外停止之后,发现一些回滚段头页已损坏。回滚段头页的加密是在写头页的时候启动的,导致一些头页没有被加密,正如预期的那样。(错误# 31045160)

  • InnoDB:锁具系统的各个方面(lock_sys)代码被重构,问题与lock_syslock_rec_block_validate ()而且lock_test_prdt_pacge_lock ()功能是固定的。的lock_rec_block_validate ()函数反复调用另一个函数,这可能导致在某些情况下无法验证锁。该实现还具有潜在的二次时间复杂度。的lock_test_prdt_page_lock ()函数没有按预期迭代所有锁。(错误# 31001732)

  • InnoDB:内存映射文件的使用temptable_max_ram阈值导致性能下降。(Bug #30952983, Bug #98739)

  • InnoDB:在调试模式下,a删除表对定义错误的表进行的操作压缩条款导致失败。InnoDB没有向调用者返回错误以进行正确处理。(Bug #30899683, Bug #98593)

  • InnoDB:当历史列表长度接近0时,清除线程活动过多,浪费CPU资源并导致互斥锁争用。(错误# 30875956)

  • InnoDB:MySQL 8.0.18中引入的回归会受到影响INFORMATION_SCHEMA。INNODB_COLUMNS查询性能。通过反复获取模式和表数据字典对象来获取分区列信息。(Bug #30837086, Bug #98449)

    这个问题是Bug #93033, Bug #28869903的回归。

  • InnoDB:一个ALTER TABLE……导入表空间操作与. cfg文件失败,导致表的密钥文件不正确错误。的row_import: m_flags成员未初始化。(错误# 30830441)

  • InnoDB:一个删除表丢弃分区后的操作没有移除相关的数据文件,并且删除数据库失败,错误指示无法删除数据库目录。从MySQL 5.7升级到MySQL 8.0时,如果存在一个带废弃分区的分区表,也会失败。的丢弃属性应用于表对象,而不是数据字典中的分区对象,这使所有分区看起来都被丢弃了。(错误# 30818917)

  • InnoDB:服务器间歇故障Ibuf游标恢复失败错误。(Bug #30770380, Bug #91033)

  • InnoDB:一个ALTER TABLE将数据从一个表复制到另一个表的操作将返回列超出范围值错误。的数量的计数器AUTO_INCREMENT多行插入操作所需的行在批量插入操作之后并不总是设置为零。(Bug #30765952, Bug #98211)

  • InnoDB:内部易被诱惑的records_in_range ()处理程序函数包含DBUG_ABORT ()调用,导致在调试构建中断言失败,并导致某些查询在常规构建中结果集为空。(错误# 30716037)

  • InnoDB:btr_cur_pessimistic_update ()函数未能处理由。引起的光标位置更改lob:清洗()调用。(错误# 30712878)

  • InnoDB:期间的类型转换失败删除忽略操作导致断言失败。一个JSON值未转换为期望值。(错误# 30664660)

  • InnoDB:清除操作遇到空LOB引用,导致断言失败。(错误# 30658887)

  • InnoDB:从中释放内存时,未正确计算块大小易被诱惑的存储引擎,导致倒退选择不同的查询性能。(错误# 30562964)

  • InnoDB:使用线程池插件时,TempTable存储引擎出现分段错误。TempTable线程局部变量与为单个客户端连接发出的语句使用不同的线程不兼容。线程局部变量的使用还会导致过多的内存消耗,因为线程局部变量所使用的内存在线程的生命周期中仍然被分配。为了解决这些问题,线程局部变量被缓存机制取代。(Bug #30050452, Bug #31116036, Bug #99136)

  • InnoDB:一个致命的页面仍然固定或肮脏关闭期间发生错误。(Bug #29759555, Bug #95285)

    参考资料:此问题是Bug #29207450的回归。

  • 分区:对分区表的查询,它使用命令,在以下条件下返回无序结果:

    • 该表有一个复合索引,其中一列上有一个前缀。

    • 查询的在哪里子句在带前缀的列上包含相等条件。

    • 带前缀的列是索引中最左边的列。

    • 中使用的列命令是索引中最右边的列。

    • 索引用于处理命令

    感谢韩全安的建议。(Bug #84070, Bug #25207522)

  • 复制:对象设置的全局值group_replication_consistency系统变量,它控制所有用户连接,使用SQL API在Group Replication到MySQL Server模块的内部连接上应用,处理方式与用户连接类似。这有时可能导致组复制报告使用group_replication_consistency错误,例如在分布式恢复时检查克隆插件状态。使用SQL API的组复制内部连接现在配置为使用一致性级别最终,它匹配前面的行为group_replication_consistency选项可用,并且不会导致错误消息。(Bug #31303354, Bug #99345)

  • 复制:如果组的一致性级别(由group_replication_consistency系统变量)设置为之前BEFORE_AND_AFTER,在主故障转移的情况下,可能会发生死锁。主故障转移现在以不同的方式注册,以避免这种情况。(Bug #31175066, Bug #98643)

  • 复制:在Windows上,Group Replication使用Windows API函数SleepConditionVariableCS来等待新的写事件,在Group Replication运行了两天或两天以上后,该函数引起了明显的高CPU占用,这可以通过重启MySQL服务器实例来纠正,但随后又像以前一样增加了。这是由于使用了两个时钟函数来计算timeout,在此之后调用SleepConditionVariableCS函数,随着时间的推移,它们会相对漂移,使超时逐渐变短,并使对该函数的调用更加频繁。该问题已在Windows上通过使用单个时钟的当前时间来计算超时而得到纠正。(错误# 31117930)

  • 复制:如果在进行分布式恢复时停止了组复制,则尝试访问选择为捐赠方的成员的记录可能会导致内存问题。此记录现在与分布式恢复状态一起保存在本地。(错误# 31069563)

  • 复制:当Group Replication的分布式恢复涉及远程克隆操作时,在服务器上设置的用于指示此操作的标志将保持设置,直到服务器实例重新启动。以前,如果在服务器上停止并重新启动Group Replication,则该标志将导致Group Replication清除中继日志文件group_replication_applier通道,这是在远程克隆操作之后启动所需的,以确保不会与克隆的数据表不匹配。如果清除的中继日志文件中有任何未应用的事务,则该成员随后不能用于引导组,尽管它可以通过从另一个成员检索事务成功加入组。Group Replication现在在其第二次或后续启动时忽略该标志,并且只在远程克隆操作后第一次启动时清除中继日志文件。(错误# 31059680)

  • 复制:为避免出现数据不一致的可能性,组复制阻止同一服务器(具有相同地址但具有新的标识符)的新化身加入组,而其旧化身仍然作为成员列出。在此之前,Group Replication的组通信系统(GCS)在尝试向服务器发送消息时将到旧版本服务器的连接视为活动的,只有当套接字返回错误时才能识别连接是不活动的,这可能会花费大量时间。在此期间,服务器的新化身无法加入组,因为现有的成员没有连接到它,因为他们仍在等待到旧化身的连接。现在,GCS只将连接到服务器的连接视为活动的,而消息可以成功发送给它。如果套接字不再可写,则服务器连接被视为不活动,并主动关闭。连接关闭触发组成员尝试重新连接到该服务器地址,在此地址上建立到服务器新化身的连接,从而使新化身能够加入组。(错误# 30770577)

  • 复制:当组复制从单主模式切换到多主模式时,没有广播通知。现在会通知更改以在路由中使用。(错误# 30738896)

  • 复制:当复制源服务器关闭并重新启动时,其内存表变得空虚。若要将此效果复制到副本,则源第一次使用给定的内存表启动后,它通知副本必须清空表删除语句将该表发送到二进制日志。此前,生成的删除语句被写入当前会话的二进制日志语句缓存,这可能导致它与相同GTID下的其他语句一起被记录,或者没有被记录开始而且提交语句。此外,在某些情况下,生成删除语句可以使用用于触发它的事务的GTID。生成的删除语句现在被记录在日志中开始而且提交语句,产生的事务在写入语句缓存后立即刷新到二进制日志中,这样它总是接收自己的GTID,并与其他事务保持隔离。(Bug #30527929, Bug #25681518, Bug #77729)

  • 复制:在MySQL 8.0.14补丁之后,如果一个函数调用包含对临时表的操作,它可以被写入二进制日志的语句格式,当binlog_format =混合是集。这导致了创建临时表如果语句包含函数调用,则语句被错误地写入二进制日志。进一步分析之后,存储函数和触发器中对临时表的操作现在被标记为以语句格式进行二进制日志记录的不安全操作,因为它们极有可能导致复制问题。当binlog_format =混合设置时,这些操作现在以行格式记录。(Bug #30395151, Bug #30320009)

  • 复制:设置group_replication_force_members如果另一个成员已经请求驱逐驱动的成员,则强制为组指定成员的系统变量可能会失败group_replication_force_members操作。控件指定的配置实现的操作group_replication_force_members系统变量强制首先进行任何挂起的组重新配置。如果其中一个成功地驱逐了设置了系统变量的成员,因为在该成员上设置的驱逐超时已经过期,那么操作就会超时并无法完成。为避免这种情况,组复制现在直接执行由group_replication_force_members系统变量,并忽略任何其他挂起的组重新配置。(错误# 29820966)

  • 复制:在MySQL 8.0.14和MySQL 5.7.25中针对涉及系统变量的死锁场景进行的修复binlog_transaction_dependency_tracking而且binlog_transaction_dependency_history_size产生的副作用是,并发更新时,用于事务依赖项跟踪的写集历史记录不受保护。写集历史记录和跟踪模式现在被正确锁定每当他们被访问。(Bug #29719364, Bug #95181)

    参考资料:请参见:Bug #28511326, Bug #91941。

  • 复制:如果一个改变主声明由MASTER_USER指定为空(MASTER_USER = ")时,语句成功并清除复制元数据存储库中先前指定的任何用户名。但是,如果随后从存储库读取信息,例如在自动重新启动Group Replication通道期间,可以用默认用户名替换通道。这个问题现在已经修复了,所以从MySQL 8.0.21开始,设置一个空是一个有效的方法MASTER_USER控件提供用户凭证时使用的用户名开始的奴隶语句或开始GROUP_REPLICATION语句,用于启动复制区域通道。这种方法意味着复制通道总是需要操作员干预才能重新启动,但是复制元数据存储库中不会记录用户凭据。

    的文档10bet官方网站改变主声明也已更正,以澄清,它是可能的具体MASTER_USER = ",只有当您试图使用空凭据启动复制通道时,才会发生由此产生的错误。(错误# 27357189)

  • 复制:Group Replication对到其他组成员的连接的跟踪只考虑入站连接,而不考虑出站连接。这意味着,如果成员A到成员B的传出连接中断(例如由于防火墙配置问题),但成员B到成员A的传入连接完好无损,则成员A将显示成员B的状态为在线,虽然成员A的消息没有到达成员B,但成员B将显示成员A的状态为遥不可及的.现在,如果一个组成员开始从它有活动连接的另一个组成员那里接收ping(在本例中,如果成员a从成员B接收ping),这将被视为连接出现问题的指示器。如果接收到足够的ping,那么ping的接收方(在本例中是成员A)会关闭连接,以便两个成员的连接状态是一致的。(Bug #25660161, Bug #84796)

  • JSON:当表达式和路径传递给JSON_TABLE ()产生一个JSON null,函数将引发一个错误而不是返回SQL是必需的。(错误# 31345503)

  • JSON:在MySQL 5.7和8.0.17之前的MySQL 8.0中,服务器在直接用SQL测试时试图将JSON布尔值转换为对应的SQL值是真的,如下所示:

    CREATE TABLE test (id INT, col JSON)mysql >插入测试值(“{“val”:真}”),(2,'{“val”:假}');mysql> SELECT id, col, col->"$。val" FROM test WHERE col->"$。val”是正确的;+------+---------------+--------------+ | id | |上校上校——>“美元。瓦尔 " | +------+---------------+--------------+ | 1 |{“val”:真}|真的  | +------+---------------+--------------+

    这是在MySQL 8.0.17中所做的工作的结果,以确保SQL条件中的所有谓词都是完整的(即,表单的一个条件)在哪里价值是重写为在哪里价值< > 0),以及a不是在不存在在一个条件在哪里子句转换为antijoin时,在SQL布尔值上下文中对JSON值进行隐式比较。这意味着前面显示的查询在MySQL 8.0.17及以后版本中返回如下结果:

    mysql> SELECT id, col, col->"$。val" FROM test WHERE col->"$。val”是正确的;+------+----------------+--------------+ | id | |上校上校——>“美元。瓦尔 " | +------+----------------+--------------+ | 1 |{“val”:真}真正| | | 2 |{“val”:假}|假  | +------+----------------+--------------+

    在这种情况下,服务器现在也会提供一个警告:在SQL boolean环境中计算JSON值会隐式地比较JSON整数0;如果这不是您想要的,考虑将JSON转换为返回JSON_VALUE的SQL数值类型.因此,现在可以使用以下命令重写查询JSON_VALUE ()如下所示:

    mysql> SELECT id, col, col->"$。从测试> WHERE JSON_VALUE(col, "$。val"返回无符号)为真;+------+---------------+--------------+ | id | |上校上校——>“美元。瓦尔 " | +------+---------------+--------------+ | 1 |{“val”:真}|真的  | +------+---------------+--------------+

    (错误# 31168181)

  • JSON:一个集团服务器并不总是正确地处理对具有多值索引的表的查询。(错误# 31152942)

  • 如果log_error_services,在某些情况下,它可能会在启动期间的错误时间生效。(错误# 31464539)

  • 显示创建用户在某些手动授权表修改之后,可能会导致服务器退出。(错误# 31462844)

  • 部分撤销的内存更新可能会产生不正确的特权。(错误# 31430086)

  • 如果log_error_verbosity是使用设置保存,它没有在服务器启动时及早生效,从而影响InnoDB初始化。(错误# 31410674)

  • 解析器在拒绝生成的列表达式中的子查询之前错误地引发断言。(错误# 31396191)

  • 这个版本为退化哈希连接(即没有连接条件的连接)做了以下两个微优化:

    1. 对于退化哈希反连接或半连接,请添加限制1在构建哈希表时,由于超过这个数的行不能改变结果。

    2. 对于具有非空哈希表的退化哈希反连接,避免扫描外部。

    这些更改一起处理了性能回归,重写哈希反连接导致不存在未被重写以由优化器执行并被替换为零行发现.为了处理使用嵌套循环的情况,在内部使用不相关的子查询不存在不再转化为反连接。

    此修复也适用于子查询常数不是在(non_correlated_subquery.(错误# 31376809)

  • 配置与-DWITH_EDITLINE =系统导致旧库版本的编译失败。(错误# 31366715)

  • 升级捆绑libedit在以前的MySQL发行版中使用该库导致了一个问题CTRL+C(SIGINT)mysql客户需要以下输入在某些情况下生效。(错误# 31360025)

  • 使用两者声明的列AUTO_INCREMENT而且默认的值表达式是不允许的组合,但是ALTER TABLE未能生成错误设置默认(expr上的操作AUTO_INCREMENT列。(错误# 31331454)

  • 可以设置protocol_compression_algorithms将系统变量转换为空字符串。这是不允许的。(错误# 31326231)

  • 当参数不明确时,MySQL服务器内部使用的查找函数返回整数-1;当该值在后续计算中作为参数使用之前被转换为无符号值时,会导致未定义的行为。现在,当函数返回-1时,将作为错误处理,该值不再使用。(错误# 31326120)

  • 在某些情况下,有符号值的否定会导致未定义的行为;为了防止这种情况发生,将被求反的值现在被视为无符号值。(错误# 31325602)

  • WEIGHT_STRING ()函数不总是返回整数参数的正确结果。(错误# 31321257)

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

  • 分配CONCAT (")CONCAT_WS (")将变量设置为,而不是空字符串。(Bug #31320716, Bug #99485, Bug #31413167, Bug #99722)

  • 修正了在某些情况下可以忽略特权限制的问题。(Bug #31306814, Bug #31315692)

  • 某些选择没有正确检查锁定行的语句权限,可能会错误地阻止其他用户。(错误# 31293065)

  • 在执行文件移植时,内部函数有时会返回失败时,即使正在排序的子选择不是空的。(错误# 31281602)

  • 在Windows上重写二进制日志的语句效率很低。(错误# 31260698)

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

  • 在内存中表示匿名用户的不一致可能会导致执行特权授予操作时出现问题。(错误# 31246179)

  • 如果启用了管理连接接口,则竞争条件可能导致在主连接接口上接受Unix套接字文件连接时出现问题。(错误# 31241872)

  • 当一个角色被赋予与管理选项,被授权方只有在激活角色后才能管理角色。(错误# 31237368)

  • 控件中的无效行。default_rolesrole_edges系统表可能会导致服务器错误行为。(错误# 31217385)

  • 组件在运行时反初始化失败可能导致在关闭时将重复消息写入错误日志。(错误# 31217037)

  • 不完全禁止向匿名用户授予角色。(错误# 31215017)

  • 修正了权限升级问题。(错误# 31210226)

  • keyring_hashicorpKeyring插件没有对其配置参数的值进行足够的有效性检查。(错误# 31205363)

  • keyring_hashicorpKeyring插件不允许启用二进制日志加密(通过设置binlog_encryption系统变量)。(错误# 31204841)

  • keyring_hashicorp密钥环插件不允许设置加密密码audit_log插件。(错误# 31197670)

  • 一些查询使用REGEXP_SUBSTR ()与一个命令子句未被服务器正确处理。(错误# 31184858)

  • 应用指针算术的一些实例nullptr被纠正。(错误# 31172750)

  • 如果可用的文件描述符耗尽,mysql_real_connect ()导致客户端退出。(错误# 31151052)

  • 使用killall命令来启动mysqld关闭导致没有记录任何消息来指示关闭的开始。这已被纠正。(错误# 31121907)

  • 调用mysql_real_connect_nonblocking ()使用无效的主机可能导致客户端在调用时退出mysql_close ().(Bug #31104389, Bug #99112)

  • 对于Debian包,删除了可能导致安装失败的Python 2依赖项。(错误# 31099324)

  • 一个潜在的内存泄漏lf_hash_insert ()是固定的。(Bug #31090258, Bug #99078)

  • 在LDAP SASL身份验证插件中,对sasl_client_done ()在某些情况下可能会导致未定义的行为。(错误# 31088206)

  • 启用线程池插件后,高并发性条件可能会导致客户端上下文丢失,从而导致服务器退出。(错误# 31085322)

  • 用于处理的结果集mysql_use_result ()mysql_fetch_row_nonblocking ()没有增加行数,因此在获取所有行之后,mysql_num_rows ()返回的行数不正确。(Bug #31082201, Bug #99073)

  • 删除了不需要的优化存在()这实际上从未被评估过。(错误# 31069510)

  • 对于以——skip-grant-tables选项,使partial_revokes系统变量导致服务器退出。(Bug #31066069, Bug #31202963)

  • 使用带有外部引用的递归公共表表达式的查询可能会返回不正确的结果。(Bug #31066001, Bug #99025)

  • 对于最小字符长度大于1字节的多字节字符集,解析器可能会失败。(错误# 31063981)

  • 在某些情况下,至少()函数可以返回为非空的输入。(错误# 31054254)

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

  • mysql_real_connect_nonblocking ()了,如果MYSQL_OPT_CONNECT_TIMEOUT选项设置。(Bug #31049390, Bug #98980)

  • 最后一次呼叫mysql_fetch_row_nonblocking ()返回空行的C API函数在设置错误时不应该有。(Bug #31048553, Bug #98947)

  • 在Windows上,默认连接类型使用命名管道。用于TCP/SSL连接的非阻塞C API没有考虑到这一点,导致客户端退出。它现在生成一条错误消息,指出问题所在。(错误# 31047717)

  • X插件连接由于用户修改了全局变量而无法进行身份验证audit_log_filter_id系统变量。(错误# 31025461)

  • 加载数据在解析输入文件行时没有忽略隐藏的生成列。(Bug #31024266, Bug #98925)

  • 元数据锁定子系统中的Pinbox耗尽可能会产生一个误导性的错误消息。(Bug #31019269, Bug #98911)

  • 创建表……选择如果包含函数索引,则失败。(Bug #31017765, Bug #98896)

  • 对于X Protocol连接,改进了检查全局会话互斥锁的方法,消除了线程数量增加带来的性能下降。(错误# 31000043)

  • 在某些情况下,执行包含多个子查询的查询可能会导致服务器意外关闭。(错误# 30975826)

  • 显示创建触发器如果失败使用读锁刷新表在的效果。(错误# 30964944)

  • 对底层的某些数据字典表执行了过多的访问检查INFORMATION_SCHEMA视图,导致运行缓慢显示列的性能。为了提高性能,减少了这些检查。

    此外,一些显示语句实现为INFORMATION_SCHEMA查询可以从启用derived_merge国旗的optimizer_switch系统变量。这样的查询现在会在内部临时启用该标志以获得更好的性能,而不考虑标志会话值。影响查询:

    显示模式显示表显示表状态显示列显示键显示事件显示触发器显示过程状态显示功能状态显示字符集显示排序规则

    (Bug #30962261, Bug #98750, Bug #30921214)

  • 两个在其他方面完全相同的查询在使用区分大小写排序规则时分别返回一行和使用不区分大小写排序规则时返回两行。当使用将相同的两个谓词组合在一个查询中时,当只返回一行时,返回了两行。(错误# 30961924)

  • ALTER TABLE在一个显示宽度大于255的列没有完成,即使在其他方面可能。(Bug #30943642, Bug #98523)

  • 服务器检查以yottabytes为单位的数字是否太大而无法打印,通过将该值作为双精度值进行比较ULLONG_MAX,它不能表示为双精度词。这导致了双值的直接上方ULLONG_MAXYottabytes被打印为0 y,错误的转换是由Clang 10报告的。(错误# 30927590)

  • 资源组SQL语句,如创建资源组不能在使用X协议的连接上工作。(错误# 30900411)

  • 秀奖助金可以将函数权限显示为过程权限。(Bug #30896461, Bug #98570)

  • audit_log当多个客户端同时连接时,插件错误处理连接事件。(错误# 30893593)

  • LOCK_ORDER工具报告了空依赖关系图的语法错误。现在允许使用空图。

    LOCK_ORDER工具可能会由于错误处理线程列表维护而出现意外行为。(错误# 30889192)

  • 从MySQL 5.7升级没有授予REPLICATION_APPLIER特权.(错误# 30783149)

  • gen_range ()用户定义函数可能会错误处理其参数,导致服务器退出。(错误# 30763294)

  • 更新处理,将内存中的内部表转换为InnoDB可能导致键长度错误。(错误# 30674616)

  • 在过程或函数级别授予动态权限(总是全局的)的尝试不会产生错误。(错误# 30628160)

  • 表的值构造函数忽略了限制条款。现在已经考虑到这一条款了。例如:取值row (1), row (2), row (3) limit 2输出1和2。(错误# 30602659)

  • 可以定义一个名为(单个星号字符),但是选择‘*’被同等对待SELECT *,使得在查询中无法只选择该列;换句话说,星号字符被扩展为所有表列的列表,即使它被反勾括起来。(错误# 30528450)

  • FROM_DAYS ()函数可能产生超出范围的结果(年份为> 9999)。(Bug #30455845, Bug #97340)

  • 对于调试构建,更改mysql.funcMyISAM(在任何情况下都不推荐使用)导致服务器退出。现在禁止此操作。(Bug #30248138, Bug #96692)

  • 查询的INFORMATION_SCHEMAKEY_COLUMN_USAGE而且TABLE_CONSTRAINTS视图可能会很慢,因为联盟在它们的定义中使用。这些被重写以移动联盟成一个横向表,使优化器能够更好地使用索引。(Bug #30216864, Bug #30766181, Bug #98238)

  • 在某些情况下,a限制子句错误地导致优化器估计需要从表中读取零行。(错误# 30204811)

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

  • 内部包长度函数返回错误的整型值。(错误# 30139031)

  • 的计算, mysqldump长度为插入声明没有考虑到_binary字符集导入器用于VARBINARY字符串。(Bug #29998457, Bug #96053)

  • 在升级使用前缀键定义的分区表期间,打印到错误日志的消息没有提供足够的详细信息。现在将打印指示模式、表、列和前缀长度的详细警告。(错误# 29942014)

    参考资料:请参见:Bug #31100205。

  • mysql_store_result ()可能无法检测到无效数据包。(错误# 29921423)

  • 如果在外键关系中创建子表导致引擎替换,则会引发断言。(Bug #29899151, Bug #95743)

  • mysqltest而且mysql-test-run.pl不再支持——睡眠命令行选项。mysqltest不再支持real_sleep命令。(错误# 29770237)

  • 服务器允许名称超过最大允许长度(255个字符)的主机连接。(错误# 29704941)

  • 在多个表更新这更新了第一个表的键,如果使用临时表策略,可以将重复的条目写入临时表,然后出现一个找不到记录错误。(错误# 28716103)

  • 服务器有时会错误地删除带有集团在优化查询时,即使在外部选择使用此子查询的某些情况下。当子查询也使用聚合函数时,可能会出现这种情况。(错误# 28240054)

  • 的可压缩性NAME_CONST ()功能评估不正确。(错误# 26319675)

  • 当从存储引擎读取行时,除没有更多的记录可能会被忽略,导致以后的问题。(错误# 20162055)

  • 当多表更新使用临时表时,在的输出中没有显示这一点解释格式=树,即使这样的使用可能会对性能产生影响更新这样做的声明。(错误# 17978975)

  • 当执行文件移植以删除重复项时,例如在执行时选择不同的,之后可能需要执行另一种排序来满足命令.在这样的情况下命令被下推到连接的第一个表中,而不是整个连接,最后的排序实际上不会执行。(Bug #99687, Bug #31397840)

  • 在MySQL 8.0.20中完成的重构工作导致了单行缓冲集团如果没有考虑到这样的列可能是外部连接的内部表,因此会有一个需要复制的标志。在一个集团如果没有临时表,这将导致标记为来自下一个输出行而不是前一个输出行,返回的数据是不一致的。(Bug #99398, Bug #31252625)

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

  • 常量折叠代码中的一种逻辑错误,用于类型的常量小数浮动为左操作数和一个整数列值为右操作数产生了不正确的结果。(Bug #99145, Bug #31110614)

  • 谓词比较的查询0-0如果其中至少有一个是浮点值,则返回不正确的结果。(Bug #99122, Bug #31102789)

  • 重新实现了rollup,而不使用片。这修复了以下已知问题:

    • 中重复的一列GROUP BY……与汇总产生错误的结果;也就是说,一个集团的形式组由a, b, a与ROLLUP错误的产生对于结果中的某些列名。

    • 一个GROUP BY……与汇总不需要临时表打印的结果也会产生错误在输出中替换至少一个预期列名。

    (Bug #98768, Bug #99141, Bug #26227613, Bug #29134467, Bug #30967158, Bug #30969045, Bug #31110494)

  • 选择不同的(十六进制(WEIGHT_STRING (varchar_column)))返回截断的结果。(Bug #98592, Bug #30898753)

  • 查询中错误处理的问题MAX ()MIN (),或两者都加a集团子句,意味着这样的查询将继续执行,直到它经历了所有可能的迭代,即使错误应该导致它立即终止。(Bug #98242, Bug #30769515)

  • 的类型传播代码重构后至少()最大的()和其他功能,以及联盟,对如下数据类型的结果类型进行调整枚举还将计算的整数数据类型替换为不能同时容纳有符号值和无符号值的类型。(Bug #95148, Bug #29698617)

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