MySQL 8.0版本说明/ MySQL 8.0.20的更改(2020-04-27,一般可用性)

MySQL 8.0.20的更改(2020-04-27,一般可用性)

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

账户管理笔记

编译的笔记

  • Solaris:Clang和GCC现在可以用于在Solaris上编译MySQL,尽管它们都是实验性的,目前不能用于生产代码。(错误# 30562248)

  • 在EL7和EL8上,CMake配置调整为查找GCC 8之前的GCC 9。因为libmysqlclient附带MySQL发行版,客户端应用程序基于libmysqlclient在这些平台上受到影响,可能需要重新编译。(错误# 30722756)

  • 在Windows上,CMakeVisual Studio的编译器版本检查已更新,以表明Visual Studio 2019是当前支持的版本。版本检查可以通过运行CMake-DFORCE_UNSUPPORTED_COMPILER = 1)(错误# 30688403)

弃用和删除说明

  • JSON:以前,这是可以指定的在空而且在错误子句中的任意一个顺序调用JSON_TABLE ()函数。这与SQL标准背道而驰,该标准规定当在空是指定的,它必须总是在任何在错误条款。为此,指定在错误之前在空已弃用,尝试这样做会导致服务器发出警告。对非标准语法的支持将在MySQL的未来版本中被删除。

  • max_length_for_sort_data系统变量现在已弃用,因为优化器的更改使其过时且不起作用。

    参考文献:参见Bug #30473261。

  • 的使用值()中的新行值插入……重复密钥更新语句现在已弃用,并将在未来的MySQL版本中删除。相反,应该像MySQL 8.0.19和更高版本中实现的那样,为新行及其列使用别名。

    例如,这里显示的语句使用值()要访问新的行值:

    INSERT INTO t1 (a,b,c) VALUES(1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

    从今以后,您应该使用类似于下面的语句,为新行使用别名:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new ON DUPLICATE KEY UPDATE c = new.a+new.b;

    或者,你也可以为新行及其每一列使用别名,如下所示:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new(m,n,p) ON DUPLICATE KEY UPDATE c = m+n;

    有关更多信息和示例,请参见插入……重复键更新语句

JSON的笔记

  • rapidjsonMySQL包含的库已升级到2020年1月16日的GitHub快照。修复了在Mac OS X上从快照构建时遇到的编译器错误。(错误# 30898701)

日志记录笔记

  • 发送一个SIGHUP信号将不再导致服务器向错误日志写入状态报告。服务器响应执行的其他操作SIGHUP继续做下去。看到Unix信号处理MySQL

    同样的,mysqladmin调试不再导致写入状态报告。(错误# 30578923)

  • log_sink_jsonjson格式的错误日志接收器现在包含一个ts日志消息中的(时间戳)。该值是一个整数,表示从epoch (“1970-01-01”就是UTC)。看到错误日志输出格式

优化器的笔记

  • 现在在任何使用嵌套块循环的时候都可以使用散列连接。这意味着哈希连接可以用于以下类型的查询:

    • 内部non-equi-joins

    • Semijoins

    • Antijoins

    • 左外连接

    • 右外连接

    这是在MySQL 8.0.18所做工作的基础上构建的,并消除了实现中的一个限制,即哈希连接只能用于至少具有一个等连接条件的查询。此外,内部连接和外部连接(包括半连接和反连接)现在都可以使用批处理键访问(BKA),它以增量方式分配连接缓冲区内存,以便单个查询不需要使用它们实际不需要的大量资源进行解析。有关更多信息,请参见批处理键访问连接

    此修复程序完成了用迭代器执行器替换以前版本MySQL中使用的执行器的任务,包括替换管理表单查询的旧索引子查询引擎在哪里价值(选择表格在哪里条件对于那些未转换为半连接的查询,以及转换为相同形式的查询,这些查询依赖于来自旧执行器的内部信息。

    有关更多信息和示例,请参见散列连接优化.(Bug #30528604, Bug #30473261, Bug #30912972)

  • 该版本实现了几个新的索引级优化器提示,其功能与使用SQL关键字的现有索引提示非常相似力指数而且忽略指数.这是为了替换等价的索引提示,在未来的MySQL版本中,索引提示将被弃用(并最终删除)。下面列出了新的提示,并对每个提示进行了简要描述:

    • JOIN_INDEX:强制MySQL对任何可用的访问方法使用指定的索引,例如裁判范围index_merge,等等。这等价于连接的力索引索引提示。

      NO_JOIN_INDEX:导致服务器忽略任何访问方法的指定索引。对应的指数提示是忽略连接索引

    • GROUP_INDEX:使服务器使用指定的索引进行索引扫描集团操作。相当于力指数组由

      NO_GROUP_INDEX:强制MySQL忽略用于索引扫描的指定索引集团操作。对应的指数提示是忽略组by的索引

    • ORDER_INDEX:使MySQL使用指定的索引对行进行排序。它相当于命令的力索引

      NO_ORDER_INDEX:禁止服务器使用指定的索引进行行排序。相当于忽略order by的索引

    • 指数:作为…的组合JOIN_INDEXGROUP_INDEX,ORDER_INDEX,强制服务器对任何和所有作用域使用指定的索引。相当于力指数

      NO_INDEX:作为…的组合NO_JOIN_INDEXNO_GROUP_INDEX,NO_ORDER_INDEX;也就是说,它强制MySQL忽略任何和所有作用域的指定索引。它相当于索引提示忽略指数

    考虑使用索引提示在具有指定列和索引的表上执行以下查询:

    SELECT a,b FROM t1 USE INDEX FOR ORDER BY (i_ab)

    使用这个版本中引入的索引级优化器提示,这个查询可以像下面这样重写:

    SELECT /*+ ORDER_INDEX(t1 i_ab) */ a,b FROM t1 ORDER BY a;

    可以使用新的索引级优化器提示选择更新,删除语句。(这与使用索引提示不同力指数忽略指数,只能与选择而且更新)。因此,像下面这样的语句是可能的:

    UPDATE /*+ INDEX(t1 i_ab) */ t1 SET d = 1 WHERE a = 1 AND b = 2 AND c = 3DELETE /*+ INDEX(t1 i_a,i_c) */ FROM t1 WHERE a = 1 AND b = 2 AND c = 3;

    可以在同一个注释中指定多个提示,像这样:

    DELETE /*+ INDEX(t1 i_a) JOIN_INDEX(t1 i_c) */ FROM t1 WHERE a = 1 AND b = 2 AND c = 3;

    索引级优化器提示可以与其他优化器提示同时使用。当您这样做时,首先应用索引级提示;任何其他优化器提示的效果都局限于索引级提示允许的索引集。

    索引级提示也可以在创建视图时使用,如下所示:

    CREATE VIEW v1 AS SELECT /*+ NO_INDEX(t1 i_a,i_b) */ a FROM t1 WHERE b IN (SELECT /*+ NO_INDEX(t1 i_ab,i_b) */ a FROM t1 WHERE a > 3);

    如果在与索引提示相同的语句中使用这些索引级优化器提示,则会忽略索引提示。

    新的索引级优化器提示等价于力指数而不是使用索引;换句话说,使用一个或多个索引级优化器提示意味着只有在无法使用一个命名索引查找表中的行时才使用表扫描。使MySQL使用与给定实例相同的索引或索引集使用索引,你可以使用NO_INDEXNO_JOIN_INDEXNO_GROUP_INDEXNO_ORDER_INDEX,或者两者的某种组合。

    有关更多信息和示例,请参见索引级别的优化器提示

包装的笔记

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

  • 对于RPM包,comp_err实用程序已移动到以及子包并标记为测试组件。(错误# 30716034)

  • 的捆绑libedit库已升级到3.1版本。(Bug #28939380, Bug #20770875, Bug #22930525, Bug #22332089, Bug #27433491, Bug #27285445)

  • 捆绑的LZ4库已升级到1.9.2版本。这修复了某些问题,如错误#30369643产生一个mysqlpump运行时错误。

    参考文献:参见Bug #30369643。

性能模式笔记

  • Performance Schema收集与会话相关的错误统计信息,这些错误只能在全局范围内发生,而不能在每个会话中发生。现在不再这样做,减少了错误插装的内存开销。此外,针对全局错误的行不再包含在每个线程、帐户、用户或主机报告的错误摘要中。(错误# 30311574)

可插入身份验证

  • 可以将LDAP服务器配置为将LDAP搜索委派给另一个LDAP服务器,这一功能称为LDAP引用。但是,在某些条件下,启用LDAP引用可能导致搜索失败,出现LDAP操作错误。启用MySQL企业版LDAP认证插件以避免引用错误,新的authentication_ldap_simple_referral而且authentication_ldap_sasl_referral已准备系统变量。这些变量使每个插件能够控制LDAP服务器在MySQL身份验证过程中是否应该使用引用。看到LDAP搜索推荐

  • MySQL Enterprise Edition SASL LDAP身份验证插件现在支持GSSAPI/Kerberos作为Linux上MySQL客户端和服务器的身份验证方法。这在应用程序使用Microsoft Active Directory访问LDAP的Linux环境中非常有用,Microsoft Active Directory默认启用了Kerberos。看到LDAP身份验证方法

    该特性可用于Linux的所有RPM和DEB包,但不适用于TAR归档包。

SQL语法笔记

  • 在此之前,条款选择语句可以出现在两个位置中的任何一个:

    • 之前

      Select * into outfile 'file_name“从table_name
    • 在尾随锁定子句之前:

      SELECT * FROMtable_name到输出文件的file_name的更新;

    现在可以出现在第三个位置,在结尾选择声明:

    SELECT * FROMtable_name更新到outfile 'file_name”;

    放置最后是首选位置。锁定子句之前的位置现在已弃用,在未来的MySQL版本中将删除对它的支持。换句话说,但不是在最后选择会产生一个警告。

    此外,还做了一些更改联盟关于.这些联盟变异包含都是语法正确的,并产生相同的结果:

    ...Union select * fromtable_name到输出文件的file_name”;...联盟(select * fromtable_name)到outfile 'file_name”;...Union select * into outfile 'file_name“从table_name;...联合(select * into outfile ')file_name“从table_name);

    然而,最后两个变量令人困惑,就好像它们从命名表而不是整个查询表达式(the联盟).这两个联盟变异包含现在已被弃用,在未来的MySQL版本中将删除对它们的支持。因此:

    • 在查询表达式的尾随查询块中,使用之前会产生一个警告。

    • 在查询表达式的带括号的尾随块中,使用(不管它相对于什么位置)产生警告。

    这些反对意见适用于所有人形式:到输出文件到DUMPFILE,var_list

测试套件的笔记

  • perfschema.idx_compare_replication_applier_status更新测试用例以存储事务重试次数的旧值,并将其与事务重试次数的新值进行比较。感谢Facebook的贡献。(Bug #30810627, Bug #98389)

X插件笔记

  • 如果MySQL服务器实例的客户端连接限制,则由max_connections当X Plugin启动时,到达服务器系统变量,X Plugin无法创建一个会话来获取服务器配置,因此启动失败。X Plugin现在创建一个管理会话(使用mysql_admin_session服务),该服务不受客户端连接限制。(错误# 30894981)

  • 当一个X协议会话因为已经有太多的X协议连接而无法初始化时,错误码为5011无法打开会话是回来了。更相关的错误码是1040太多的连接现在在此情况下返回。(错误# 30753637)

  • 在使用验证模式创建集合时,验证JSON引用的问题导致了一个错误。(错误# 30733330)

  • 在MySQL Server实例与X协议连接到客户端的关闭过程中,X插件中的竞态条件可能导致无效的客户端连接被接受处理。方法设置的超时之前,由于在关闭过程中忽略了无效的客户端以进行客户端超时验证,因此这些客户端会阻塞关闭mysqlx_wait_timeout到达系统变量,默认为8小时。为了防止这个问题,客户端超时验证现在包括处于无效状态的客户端。(错误# 30702685)

  • 当连接到MySQL 8.0服务器时,X Plugin为会话设置了不同的排序规则mysql客户端,这可能导致依赖于排序规则的查询出现问题。X插件现在使用utf8mb4_0900_ai_ci排序规则,它是utf8mb4characterset。(错误# 30516849)

  • 用于X协议连接的工作线程在创建时被标识为系统线程,并分配给SYS_default资源组。这种标识意味着不能为资源管理目的将它们分配给用户资源组。它们现在被标识为用户线程并分配给USR_default资源组。注意,X协议目前不支持创建改变下降,设置资源组语句,但这些语句可以使用经典的MySQL协议连接操作X协议连接线程。(错误# 30059288)

  • X Plugin现在可以在初始化开始时立即访问MySQL系统变量,因此插件安装线程可以自己设置所需的连接,而不是启动一个单独的线程。(错误# 29127302)

增加或更改的功能

  • 重要的变化:以前,包括blob类型大于的任何列TINYBLOB因为排序操作中的负载导致服务器恢复到只排序行id,而不是完整的行;这导致在排序完成后进行第二次传递,从磁盘获取行本身。自JSON而且几何列在内部实现为LONGBLOB,这会导致这些类型的列产生相同的行为,尽管它们几乎总是比4GB的最大值短得多LONGBLOB(甚至是16 MB的最大值MEDIUMBLOB).在这种情况下,服务器现在将这些类型的列转换为打包的插件,就像它所做的一样TINYBLOB而且列,在测试中显示了显著的性能提升。的处理MEDIUMBLOB而且LONGBLOB这方面的栏目保持不变

    这种增强的一个效果是现在有可能内存不足试图对包含非常大(多兆字节)的行进行排序时发生的错误JSON几何列值,如果排序缓冲区大小不足;这可以用通常的方式通过增加的价值来补偿sort_buffer_size系统变量。(Bug #30400985, Bug #30804356)

  • InnoDB:对竞争感知事务调度(争用感知事务调度,cat)算法进行了改进,该算法为等待锁的事务设置优先级。事务调度权重计算现在完全在单独的线程中执行,这提高了计算性能和精度。

    先进先出(FIFO)算法也被用于事务调度,被删除。先进先出算法在CATS算法增强后变得多余。以前由FIFO算法执行的事务调度现在由CATS算法执行。

    一个TRX_SCHEDULE_WEIGHT列已添加到INFORMATION_SCHEMA。INNODB_TRX表,该表允许查询由CATS算法分配的事务调度权重。

    以下INNODB_METRICS添加了用于监视代码级事务调度事件的计数器:

    • lock_rec_release_attempts

      释放记录锁的尝试次数。

    • lock_rec_grant_attempts

      授予记录锁的尝试次数。

    • lock_schedule_refreshes

      分析等待图以更新事务调度权重的次数。

  • InnoDB:将doublewrite缓冲区的存储区域从系统表空间移动到doublewrite文件。将doublewrite缓冲区存储区域移出系统表空间可以减少写延迟,提高吞吐量,并提供放置doublewrite缓冲区页面的灵活性。以下系统变量用于高级双写缓冲区配置:

    有关更多信息,请参见Doublewrite缓冲

  • 解释分析现在可以停止在执行使用杀死查询ctrl - c.(错误# 30787515)

  • 解释格式=树现在显示反演关于窗口函数的信息。(错误# 30770631)

  • 解释格式=树输出得到了改进,以提供更多关于计算过的窗口函数的信息,并与常规聚合提供的信息相匹配。(Bug #30573446, Bug #30582782)

  • 配置的-DWITH_LTO = 1CMake选项现在在macOS上工作。(错误# 30125902)

  • 现在可以在MySQL服务器实例上启用二进制日志事务压缩。当启用二进制日志事务压缩时,将使用zstd算法压缩事务有效负载,然后将事务有效负载作为单个事件(aTransaction_payload_event).当压缩事务有效负载在复制流中发送到副本、其他Group replication组成员或客户端时,它们保持压缩状态mysqlbinlog.它们不会被接收线程解压缩,而是被写入中继日志,仍然处于压缩状态。因此,二进制日志事务压缩在事务发起者和接收者(以及他们的备份)上都节省了存储空间,并且在服务器实例之间发送事务时节省了网络带宽。

    可以在MySQL服务器实例上启用二进制日志事务压缩binlog_transaction_compression系统变量,默认为.你也可以使用binlog_transaction_compression_level_zstd为用于压缩的ZSTD算法设置级别的系统变量。这个值决定了压缩工作量,从1(最低工作量)到22(最高工作量)。

  • 的新选项改变主声明中,REQUIRE_TABLE_PRIMARY_KEY_CHECK,允许复制从端为主键检查选择自己的策略。当选项设置为对于复制区域通道,从端始终使用该值sql_require_primary_key复制操作中的系统变量,需要一个主键。当选项设置为, slave总是使用该值sql_require_primary_key复制操作中的系统变量,因此不需要主键,即使主键需要主键。当REQUIRE_TABLE_PRIMARY_KEY_CHECK选项设置为对于每个事务,从服务器使用从主服务器复制的任何值。

    • 对于多源复制,设置REQUIRE_TABLE_PRIMARY_KEY_CHECK使从机能够跨不同主机的复制通道规范化行为,并为sql_require_primary_key系统变量。使用防止多个主表更新同一组表时主键意外丢失。使用允许可以操作主键的主控器与不能操作主键的主控器一起工作。

    • PRIVILEGE_CHECKS_USER是否设置对通道应用复制权限检查,设置REQUIRE_TABLE_PRIMARY_KEY_CHECK表示用户帐户不需要会话管理级别的特权来设置受限制的会话变量,这些变量需要更改的值sql_require_primary_key以匹配每个事务的主设置。

  • 从MySQL 8.0.19开始,通过X协议连接发送的消息支持压缩。如果服务器和客户端同意使用压缩算法,则可以压缩连接。缺省情况下,服务器允许Deflate、LZ4和zstd压缩算法,或者您可以设置mysqlx_compression_algorithms系统变量只包含您允许的。在MySQL 8.0.19中,X协议对每个算法使用库默认的压缩级别,客户端不能协商这一点。

    从MySQL 8.0.20中,客户端可以在X协议连接的能力协商过程中请求特定的压缩级别。X协议为每个算法设置了最大压缩级别,这将防止服务器同意客户端请求的高压缩级别,如果这将消耗服务器上太多的资源。对于Deflate,最初将最大压缩级别设置为5,对于LZ4设置为8,对于zstd设置为11。您可以使用新的来调整这些设置mysqlx_deflate_max_client_compression_levelmysqlx_lz4_max_client_compression_level,mysqlx_zstd_max_client_compression_level系统变量。

    通过性能测试,还为X协议选择了新的默认压缩级别,这是压缩时间和网络传输时间之间的良好权衡。这些默认值不一定与每个算法的库默认值相同。如果客户端不请求算法的压缩级别,则应用它们。默认压缩级别最初设置为Deflate为3,LZ4为2,zstd为3。您可以使用新的来调整这些设置mysqlx_deflate_default_compression_levelmysqlx_lz4_default_compression_level,mysqlx_zstd_default_compression_level系统变量。

错误修复

  • 不兼容的更改:一些查询使用ST_Contains ()没有返回任何结果,除非> 0是补充道。

    请注意

    对于从早期版本的MySQL升级,应该在具有空间索引的表中重新创建空间索引。

    (Bug #30461595, Bug #97347)

  • 性能:从MySQL 5.7升级到MySQL 8.0后,对具有空间索引的表的某些查询没有有效地执行。(Bug #94655, Bug #29488350)

    参考文献:参见Bug #89551, Bug #27499984。

  • NDB集群:NDB定义了一个SPJ每个拥有根表主分区的节点的Worker。如果该表使用从任何片段副本读取,DBTC把所有SPJ相同的工人DBSPJ实例,它有效地删除了一些使用SPJ工人。(错误# 30639165)

  • NDB集群:执行显示命令使用一个ndb_mgm从NDB 8.0.16或更高版本的客户端二进制文件访问运行NDB 8.0.17或更高版本的管理节点会产生错误消息未知的领域:is_single_user.(错误# 30599413)

    参考文献:参见Bug #16275500。

  • InnoDB:一个创建撤消表空间指定撤消数据文件名而不指定路径的操作从指定的目录中删除了同名的现有撤消数据文件innodb_undo_directory变量。控件指定的目录上执行了文件名冲突检查innodb_undo_directory变量。(Bug #30908328, Bug #98628)

  • InnoDB:在调试版本中,MySQL 8.0.19引入的回归减慢了互斥锁和rw-lock死锁调试检查。(错误# 30886393)

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

  • InnoDB:Valgrind测试抛出一个错误,指示条件跳转或移动依赖于未初始化的值。由于无效的验证逻辑,该错误是假阳性。(错误# 30837136)

  • InnoDB:失踪的壁垒rw_lock_debug_mutex_enter ()(在源文件sync0debug.cc)可能导致线程等待而不被唤醒。(错误# 30819167)

  • InnoDB:为了提高Linux上的服务器初始化速度,posix_fallocate ()现在用于为重做日志文件分配空间。(Bug #30804431, Bug #98342)

  • InnoDB:数据字典表打开函数的锁顺序不正确。(Bug #30782103, Bug #97825)

  • InnoDB:对MySQL 8.0.17中引入的并行读线程功能的更改导致了SELECT COUNT (*)的性能。不必要地从磁盘读取页面。(错误# 30766089)

  • InnoDB:方法对引导线程执行的SQL操作不执行DDL日志记录init_filestartup变量,导致本应在后ddl阶段删除的文件被保留。(错误# 30721214)

  • InnoDB:在具有特定记录数量的表上作为JSON数组强制转换的列上添加索引失败表的密钥文件不正确错误。(Bug #30709525, Bug #98098)

  • InnoDB:Valgrind错误报告未初始化锁- > writer_thread值在条件跳转中使用。(错误# 30694177)

  • InnoDB:内部缓冲池统计计数器(n_page_gets)按页码划分,以避免多个线程访问时发生争用。(Bug #30604841, Bug #97822)

  • InnoDB:表空间导入操作失败,出现模式不匹配错误,原因是. cfg文件和数据字典都包含使用添加的列的默认值算法=即时.只有默认值不同时才会出现错误。(错误# 30561144)

  • InnoDB:缓慢关机未能刷新某些gtid,需要从撤消日志中恢复未刷新的gtid。(错误# 30548229)

  • InnoDB:在为性能模式内存分配分配内存前缀的代码中,错误的对齐要求导致针对macOS和FreeBSD优化的MySQL构建失败。(错误# 30530857)

  • InnoDB:添加虚拟列会引发断言失败,因为为表创建的新数据字典对象缺少数据。(错误# 30524263)

  • InnoDB:检查undo表空间的模式时,没有使用所需的锁存。在检查撤消表空间是否为空时,也没有使用所需的锁存。(错误# 30509134)

  • InnoDB:将更新撤销日志段分配给XA事务,以便在事务执行任何数据修改导致失败之前持久化GTID值。(错误# 30456328)

  • InnoDB:在具有废弃表空间的分区表上执行的查询引发断言失败。(Bug #30437407, Bug #97271)

  • InnoDB:row_upd_clust_rec_by_insert函数将群集索引记录标记为已删除,并将记录的更新版本插入群集索引n_ext值(外部字段的总数)转移到较低级别函数,导致断言失败。(错误# 30437378)

  • InnoDB:在克隆操作期间,在关闭时对数据字典缓冲表的写入太晚,导致失败。未刷新新生成的脏页面。(Bug #30427369, Bug #30405535, Bug #30405535)

  • InnoDB:类执行的操作innodb_buffer_pool_evict调试变量设置为未压缩的导致断言失败。(错误# 30405531)

  • InnoDB:读写锁码(rw_lock_t),控制对布尔值的访问顺序递归标志和编写器线程ID使用GCC内置或os_mutex当内置程序不可用时,修改为使用c++std::原子在某些情况下。感谢来自ARM的Yibo Cai的贡献。(Bug #30401416, Bug #97150)

  • InnoDB:从MySQL 5.7升级到MySQL 8.0时发生失败。类的信息丢失FTS_DOC_ID列和FTS_DOC_ID_INDEX那是落下后的残留全文索引。(错误# 30357954)

  • InnoDB:关于并行扫描的不必要消息被打印到错误日志中。(错误# 30330448)

  • InnoDB:从MySQL 5.7升级到MySQL 8.0,集群索引命名为GEN_CLUST_INDEX被重命名主要的,这会导致将聚集索引的重复条目添加到mysql.innodb_index_stats表格(错误# 30330448)

  • InnoDB:各种内部函数以不一致的方式计算写事件槽。(Bug #30228108, Bug #96519)

  • InnoDB:在特定的情况下,在崩溃恢复的重做日志应用阶段可能不会应用表空间加密密钥信息。(错误# 30209760)

  • InnoDB:文件操作失败导致页面跟踪归档程序失败,进而导致主线程挂起,从而导致断言失败。此外,页面跟踪存档程序仍然处于启用状态innodb_read_only模式。(错误# 30202643)

  • InnoDB:试图导入包含使用添加的表列的表空间时,报告索引损坏错误算法=即时.该错误是由于缺少与立即添加的列相关的元数据。(Bug #30191523, Bug #96477)

  • InnoDB:试图获取LOB记录的事务遇到空LOB引用,导致断言失败。但是,空LOB引用在这个特定的场景中是有效的,因为LOB值还没有完全写入。(错误# 30144303)

  • InnoDB:在并行读操作期间,表加载操作的回滚自动提交禁用会导致服务器退出,因为断言代码没有考虑并行读取期间树形结构更改的可能性。(错误# 30060690)

  • InnoDB:发现回滚段内存对象中维护的当前大小值无效,导致函数断言失败trx_purge_free_segment ().验证例程(trx_rseg_t: validateCurrSize ())来验证当前的大小值。(错误# 29947027)

  • InnoDB:使用无效参数值执行的准备语句会引发断言失败。(错误# 29880907)

  • InnoDB:添加列操作导致断言失败。失败的原因是一个悬浮的指针。(错误# 29866408)

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

  • InnoDB:更新一些InnoDB在Valgrind测试期间,接受字符串值的系统变量会引发无效读错误。(Bug #29717909, Bug #95215)

  • InnoDB:在MySQL 8.0中,由于undo表空间ID值的变化,修改undo表空间的重做日志记录增加了大小,这需要额外的字节。重做日志记录大小的变化导致在有大量写I/O的工作负载下性能下降。为了解决这个问题,我们修改了重做日志格式,以减少修改undo表空间时的重做日志记录大小。(错误# 29536710)

  • InnoDB:额外的信息InnoDB文件写入(包括进度数据)现在被打印到错误日志中。(Bug #29472295, Bug #94634)

  • InnoDB:在具有空间索引的表上插入语句会由于元组损坏而引发记录类型不匹配断言。(错误# 29465567)

  • InnoDB:计算撤消日志记录大小的函数在撤消日志记录损坏的情况下可能计算出错误的长度值,从而导致malloc失败。添加断言代码以检测不正确的计算。(Bug #29448406, Bug #82734)

  • 复制:Group Replication的消息服务使用的线程没有被Performance Schema工具正确注册,因此线程操作在Performance Schema表中不可见。(错误# 30824676)

  • 复制:Group Replication启动和管理用于分布式恢复的克隆操作,但已设置为支持克隆的组成员也可以参与用户手动发起的克隆操作。在MySQL 8.0.20之前的版本中,如果克隆操作涉及正在运行group Replication的组成员,则无法手动启动克隆操作。在MySQL 8.0.20中,只要克隆操作不删除和替换收件人上的数据,就可以做到这一点。因此,启动克隆操作的语句必须包含数据目录子句如果组复制正在运行。(错误# 30798640)

  • 复制:对于组复制区域通道,发出改变主声明的PRIVILEGE_CHECKS_USER选项导致通道的中继日志文件被删除。在这种情况下,已经接收并在中继日志中排队但尚未应用的事务可能会丢失。的改变主语句现在只能在组复制未运行时发出。(错误# 30655369)

  • 复制:如果服务器停止发送消息,Group Replication的故障检测机制就会产生怀疑,如果大多数组成员仍在通信,则该成员最终会被驱逐。然而,故障检测机制没有考虑到这样一种情况:多数群体中的一个或多个成员实际上已经被标记为被驱逐,但尚未被从群体中除名。如果网络不稳定,成员之间经常以不同的组合失去和恢复联系,一个群体就有可能最终将其所有成员标记为驱逐,之后该群体将不复存在,必须重新建立。

    群体复制的群体通信系统(GCS)现在会跟踪被标记为要被驱逐的群体成员,并在决定是否有多数成员时将他们视为可疑成员。这确保至少有一个成员保留在组中,并且组可以继续存在。当一个被开除的成员实际上已经被从群组中除名时,GCS会删除标记该成员被除名的记录,以便该成员可以在有能力的情况下重新加入群组。(错误# 30640544)

  • 复制:正在为二进制日志重写SQL语句,以便敏感信息不会以纯文本的形式出现显示PROCESSLIST语句用于检查查询,则查询在写入二进制日志时可能会损坏,导致复制停止。重写查询的过程现在是私有的,只有在重写完成时才会更新查询线程。(Bug #30569003, Bug #97531, Bug #30654405)

  • 复制:当一个格兰特撤销语句只部分执行,事件将记录在二进制日志中,这将使复制从的应用程序线程停止,以便从可以手动与主线程进行协调。以前,如果失败格兰特撤销语句是会话中执行的第一条语句,则没有对事件应用GTID(因为会话中还不存在缓存管理器),从而导致复制从端出现错误。此外,在a的情况下没有记录事件事件格兰特语句创建了一个用户,但随后失败,因为权限指定不正确,这再次导致复制从端出现错误。这两个问题现在都得到了解决。(Bug #30566518, Bug #30324661)

  • 复制:的压缩现在被触发mysql.gtid_executed表的时候线程/ sql / compress_gtid_table线程在服务器启动后启动,当压缩过程完成时就可以看到效果。(错误# 30541799)

  • 复制:在高负载条件下运行的具有组复制的MySQL服务器上无法访问性能模式表。(Bug #30112711, Bug #30675790)

  • 复制:如果本地组成员的统计信息与组成员的更改同时发生,则从组复制到性能架构的内部查询将失败。为了解决这个问题,内部查询的锁定已经进行了改进。(Bug #30049349, Bug #30791583, Bug #30963553)

  • 复制:如果复制从从与主从的计划外断开,对主从转储线程的引用可能不会从注册从从列表中删除,在这种情况下,访问从从列表的语句将失败。这个问题现在已经解决了。(错误# 29915479)

  • 复制:当涉及分区表时,服务器无法正确处理由于缓存空间不足而无法将行事件写入二进制日志的情况。在这种情况下,将返回适当的错误。(错误# 29848931)

  • 复制:在Group Replication的分布式恢复过程中,如果一个加入成员无法通过组中的任何捐赠者完成远程克隆操作,它将使用来自捐赠者二进制日志的状态传输来检索所有所需的数据。但是,如果最后一次尝试的远程克隆操作被中断,导致加入成员的数据不完整或没有数据,那么随后立即进行的状态传输尝试也可能失败。在远程克隆操作失败后尝试状态传输之前,Group Replication现在检查远程克隆操作尚未达到从加入成员删除本地数据的阶段。属性指定的操作,如果删除了数据,则加入成员将离开组并采取group_replication_exit_state_action系统变量。(Bug #29669099, Bug #29944828)

  • 复制:与设置binlog_format =混合tx_isolation =读取提交,binlog_row_image =全,一个插入……选择涉及事务性存储引擎的查询省略了从写入二进制日志的行映像中带有空值的任何列。这是因为在处理的时候插入……选择语句中,列在选择二进制日志记录格式之前被标记为插入。这个问题现在已经解决了。(Bug #29110804, Bug #93423)

  • 复制:在某些条件下,条件注释的复制可能会失败。(错误# 28388217)

  • 复制:在采取某些操作之前,Group Replication检查服务器上正在运行哪些事务。以前,用于此检查的服务不计算处于提交阶段的事务,这可能导致操作超时。现在,处于提交阶段的事务包含在当前正在进行的事务集中。(错误# 28327838)

  • JSON:JSON_TABLE ()被用作插入语句在严格模式下处理的转换错误在错误条款可能导致插入被拒绝。函数处理错误在错误条款,陈述不应被拒绝,除非错误在错误是指定的。

    通过忽略将值转换为目标类型if时的警告,可以修复此问题空上的错误默认的…在错误已被指定或暗示。(错误# 30628330)

  • JSON:的输出JSON_TABLE ()在视图中使用时并不总是正确的。此修复修复了以下问题:

    • 列名没有加引号,在需要对这些列名加引号时导致语法错误。

    • 有些列类型被误报。

    • 丢失了一些列类型属性,如UNSIGNED。

    • 列字符集和排序丢失。

    (错误# 30263373)

  • JSON:的函数JSON_SCHEMA_VALID ()而且JSON_SCHEMA_VALIDATION_REPORT ()以前检查以确保他们的论点可以转换为JSON每次执行一个包含这些的准备好的语句,这既不高效也没有必要。在这种情况下,检查只在准备语句时执行一次。(Bug #97878, Bug #30622327)

  • 对象的存储对象的特权要求被错误地检查定义者SYSTEM_USER特权。(错误# 31077699)

  • Clang在从MySQL源生成的文档中报告的许多错误已经被纠正。10bet官方网站(错误# 30956093)

  • 在FreeBSD上,krb5包现在是一个依赖项。(错误# 30887620)

  • 如果查询包含对同一个公共表表达式(CTE)的多个引用,并且伪注释跨越了CTE定义的边界,解析器就会失败,出现令人困惑的语法错误消息。(错误# 30871301)

  • 如果使用Debian软件包进行安装,则/var/run/mysqld目录未创建。(Bug #30855015, Bug #98484)

  • mysqlslap当SQL语句返回错误时,没有正确关闭线程。这可能导致尝试释放已经释放的内存。(错误# 30850310)

  • 当X Plugin试图将一个文档添加到一个集合中作为一个重复键的插入或更新时,如果文档在除主键以外的字段中没有满足唯一键约束,则X Plugin返回的错误并没有说明这是问题的原因。现在返回适当的错误。(错误# 30843865)

  • 解析器中转换生成的整数值被提供给需要布尔值的测试。(错误# 30837240)

  • 使用表达式访问一个或多个包含大字符串值的列可能导致内存泄漏。(错误# 30814171)

  • 的目标时,语句不能正常工作删除是一个常见的表表达式。(Bug #30796015, Bug #98330)

  • 使用以下命令启动服务器create_admin_listener_thread启用并没有admin_addressEnabled在服务器关闭过程中导致异常退出。(错误# 30785609)

  • 当一个表在同一列上有一个主键和一个辅助键,但长度不同时,范围优化器会在辅助索引中选择错误的键部分来比较范围值。(错误# 30783011)

  • 在某些情况下,当截然不同的与实参类型不正确的聚合函数一起使用时没有正确传播。(错误# 30782687)

  • 对于使用压缩的复制,如果主服务器重新启动,从服务器可以抛出断言。(错误# 30774692)

  • 对于调试构建,服务器可能退出试图打印优化器跟踪。(Bug #30773218, Bug #98258)

  • mysql_real_connect_nonblocking ()C API函数表现出阻塞行为。(错误# 30771233)

  • 锁表活跃,在处理INFORMATION_SCHEMA查询时,服务器可以尝试锁定内部临时表(不需要锁),从而引发断言。(Bug #30764651, Bug #98221)

  • , mysqldump内部网络超时时间从700秒增加到86400秒,以适应连接到繁忙或无响应的服务器。(Bug #30755992, Bug #98203)

  • 配置与-DWITH_SASL =/ /自定义安装路径无意中造成的libsasl被连接到daemon_memcached插件。(错误# 30755301)

  • 在删除与窗口函数的帧缓冲区相关联的临时表后,帧缓冲区的临时表参数没有被清理,导致与复制字段相关联的字符串缓冲区不能被正确释放。(错误# 30752366)

  • -libs-compatRPM包现在与系统一起构建zlib以避免不受限制的符号输出的问题libmysqlclient.so.18.(Bug #30722389, Bug #98130)

  • 服务器过早退出直方图采样,导致断言失败。处理步骤删除了标记采样操作完成的不必要的布尔变量。(错误# 30717778)

  • 当删除一个在哪里条件,因为其中一个参与条件总是为假,所以没有正确清理物化的派生表,从而导致内存泄漏。(错误# 30712243)

  • 与相同的多次比较几何值并不总是被正确处理。(错误# 30697042)

    参考文献:参见:Bug #30306306。

  • MIN ()而且MAX ()可以为某些查询返回不正确的值,如果在哪里子句包含一个在()子查询是补充道。(Bug #30691682, Bug #98047)

  • 如果MySQL企业防火墙在启动时启用,但白名单和用户表丢失,则服务器启动失败。(错误# 30690181)

  • 对于准备好的语句,如果仍然引用已清理的物化临时表,则重新执行可能会导致服务器退出。(错误# 30674598)

  • ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS而且ER_WARN_DEPRECATED_FOUND_ROWS错误消息被错误地归类到要写入错误日志的消息范围中。它们现在被正确地归类为要发送给客户端的消息。旧的错误现在被指定为OBSOLETE_ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS而且OBSOLETE_ER_WARN_DEPRECATED_FOUND_ROWS在错误日志消息的范围内。(错误# 30673043)

  • 有些子查询内的连接使用了外部查询存在不存在并不总是被正确处理。(错误# 30671329)

  • 查询使用命令常数只允许命令这样的条款不应该对结果有任何影响;这样的查询并不总是被正确处理。(错误# 30669493)

  • 错过了越界登记wild_case_match ()导致指针读取越界。(错误# 30668886)

  • strconvert ()函数之间的转换不安全文件名而且utf8_general_ci字符串。(错误# 30668847)

  • 一些使用固定长度键的文件分类并不总是被正确处理。(错误# 30665034)

  • 当对两个可能非常大的字符串列执行哈希连接时(特别是,列与垫的空间collations), MySQL将整个排序键存储在行中,这需要大量的内存,从而影响性能。现在只存储一个可识别排序规则的散列,附加的相等比较可以防止错误的答案,即使是在64位散列冲突的情况下。(错误# 30664831)

  • 当使用半连接将至少两个表连接到至少另外两个表时,并且连接优化器选择使用松散扫描,则有可能将左边的两个表都放在重复数据删除嵌套循环迭代器下面,从而导致重复数据删除过度。我们通过将跨多个表的松散扫描作为单独的内部结构来解决这个问题。(错误# 30659810)

  • 在一个常量表和零个或多个已知的零表达式,仅一行的派生表可能被错误地解读为有零行。(Bug #30655712, Bug #97967)

  • MySQL 8.0.19补丁设置无效INFORMATION_SCHEMA和数据字典版本号。添加断言代码是为了防止将来的版本信息错误。(Bug #30645158, Bug #97948)

    这个问题是一个Bug #29871530的回归。

  • 在设置迭代器树时,优化器现在过滤掉并随后忽略已知为普通真值的条件。(错误# 30644591)

  • 在一些情况下,显示列在一个临时合并表可能引发断言或导致服务器退出。(错误# 30640463)

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

  • 事件调度程序有内存泄漏。(错误# 30628268)

  • 使用异步C API函数可能会释放已经释放的内存。(Bug #30596999, Bug #97805)

  • 在含有检查限制,某些简单的查询是低效的,因为过多的内存分配和性能模式调用。(错误# 30594613)

  • 在某些情况下,memcached命令可能导致读取未初始化的内存缓冲区,从而导致失败。(错误# 30592346)

  • 之间可能发生竞态条件InnoDB在填充时发出模式和表元数据的请求INFORMATION_SCHEMA。INNODB_TABLES,并且模式被删除,导致用户查询INNODB_TABLES报告一个错误。(错误# 30591967)

  • 客户端库可能被恶意服务器诱导进入无限循环。(错误# 30581726)

  • 使用改变用户重置帐户MAX_USER_CONNECTIONS值直到所有往来账户连接(如果有的话)终止后才生效。(Bug #30578217, Bug #97735)

  • 当优化器设置清除时,它通知作为清除的一部分的所有表,它们应该提供行id。对于合并除草(除草最多返回一行),优化器期望执行程序处理除草时不使用行id。在迭代器执行器中,使用限制1;普通的除草迭代器不处理合并除草,因此总是期望行id。如果在外部连接的右侧出现合并清除,则合并清除将作为普通清除处理,导致迭代器执行器请求表没有提供行id的行id。在这种情况下限制1优化也被应用。(Bug #30566549, Bug #30282693)

  • 设置保存可能由于试图将变量持久化到错误的目录而失败。(错误# 30561982)

  • 在为访问不存在的表的错误条件定义了错误处理程序的存储程序中,如果表不存在,则不会调用处理程序,因为表是在不存在的数据库中命名的。(Bug #30561920, Bug #97682)

  • MySQL使用的重复清除优化策略(参见用半连接转换优化IN和EXISTS子查询谓词)使用它已经看到的行id的内部表,在包含这些id的列上有一个唯一的索引。当唯一索引的键变得太大时(这可能发生在非常大的行id时),服务器就会恢复通过散列键重复数据删除,只在散列字段上使用一个单独的索引(不是惟一的),就像其他临时表一样。由于后一个索引没有正确初始化,受影响的查询没有正确执行,可能导致过早退出。(错误# 30556257)

  • 对于调试版本,在锁表,服务器可能会错误处理实体化临时表并提出断言。(Bug #30476213, Bug #97404)

  • 物化查询块的内部数组SELECT_LEX_UNIT: m_query_blocks_to_materialize没有在执行之间重置,这意味着它指向的对象在第二次执行预备语句时不再有效,从而导致第二次执行失败。(错误# 30438038)

  • 更改列排序规则不会影响惟一索引,直到服务器重新启动。(Bug #30386119, Bug #97103)

  • 当使用角色时,执行存储函数的特权被视为存储过程的特权。结果,它不可能使用执行作为函数的角色特权。(错误# 30376231)

  • 物化子查询包含将列值用作非确定性函数输入的条件,会产生不正确的结果。(错误# 30368937)

  • 应用了几个修复程序InnoDBmemcached插件。这些修复解决了潜在的死锁问题、与连接列表锁存相关的问题以及删除过时的刷新互斥锁。(错误# 30354225)

  • 使用utf8mb4_0900_bin整理是无法与之相比的utf8mb4使用不同排序规则的字符串。现在比较是用utf8mb4_0900_bin两个字符串。(错误# 30350111)

  • 在优化过程中,MySQL删除了所有参数都被认为是相等的条件;例如,< > 1被移除并替换为.在这样做时,包含非确定性参数的条件也被删除了,这导致了一个条件,如兰特()< RAND ()被认为是不可能的条件。现在,优化器不再删除包含非确定性参数的条件。(错误# 30311271)

  • 删除事件可能会干扰事件的调度。(Bug #30301356, Bug #96849)

  • 事件调度器报告了Valgrind构建的警告。(错误# 30301340)

  • 在使用克隆插件时关闭服务器会引发Valgrind错误。(错误# 30248419)

  • 如果mysqld-auto.cnf文件格式错误,服务器没有启动(预期),但没有报告任何错误(预期)。(Bug #30169731, Bug #96501)

  • 更新在没有更新所有匹配行的情况下,语句可能给出不一致的匹配行数(已找到的行),这取决于未更新行的原因。例如,由于通过带有检查选项子句没有被计算为匹配的行,而由于失败而没有更新的行检查约束被计算。为了一致性,失败的行检查选项子句现在被计算为匹配的行。(错误# 30158954)

  • 在克隆目录上重新启动MySQL服务器时,InnoDB报告了一个错误,表明无法为服务器先前删除的统计表找到表空间文件。(错误# 30093799)

  • 服务器没有正确处理a联盟其中一个查询包含使用命令.(错误# 29952565)

  • INFORMATION_SCHEMA查询时,一个竞态条件可能导致在更新动态统计表时多次尝试插入一个键,从而产生重复键错误。(Bug #29948755, Bug #95929)

  • 显示创建视图如果在返回字符串的函数上定义的视图的排序规则组合不合法,则可能失败。(错误# 29904087)

  • 当删除线程时,性能模式可能无法删除线程插装。(错误# 29859605)

  • 的查询在哪里在科学记数法中其谓词包含数值的子句没有被正确处理。

    此外,当字符串到整数的转换不成功时,试图插入指定为字符串的特定整数会导致服务器退出。(Bug #29723340, Bug #30441969)

  • 添加了一个内部接口,用于检索和解析在提供MySQL服务器实例上发生的错误(ER_CLONE_DONOR错误)和检查收件人上的数据是否已被删除。(错误# 29682642)

  • 时,无法从表中删除任何列默认的价值。(错误# 29661106)

  • CONNECTION_CONTROL插件中,Performance Schema工具使用的键除非实际执行相关的代码,否则Performance Schema无法发现这些键。(错误# 29539976)

  • 对于可空列c,优化器现在识别条件c < cc > c,< > c总是false,不需要对每一行求值。感谢Daniel Black的贡献。(对于非空列,优化器已经识别出always-false条件。)

  • 的字符集的重新初始化Index.xml可能导致释放后使用错误。(Bug #28956360, Bug #93276)

  • 以前为减少性能模式内存插装开销而进行的更改产生了意想不到的影响,导致组复制性能下降。(错误# 28719976)

    参考文献:此问题是Bug #27500610的回归。

  • sys模式ps_setup_reset_to_default ()过程使用了MySQL 5.7默认值,而不是MySQL 8.0默认值。(错误# 27636611)

  • 一些连接加密密码不起作用。(错误# 27045306)

  • 在此之前,mysqlpump读了(mysql_dump)而且(客户端)组从选项文件。mysqlpump现在额外读取(mysqlpump)组。的(mysql_dump)组仍然被接受,但已弃用。(Bug #24733245, Bug #83144)

  • 用于对表单的查询选择不同的…ORDER BY……,当命令被下推到连接中的第一个表上时,结果并不总是按照正确的顺序排序。(Bug #98217, Bug #30760534)

  • 没有正确地为用作变长键的项编写指示器,因此假定所有这样的项都不是,当使用某些排序规则时,它被认为等同于空字符串。这个问题的一个明显影响是,有时无法正确执行使用可空字符串的表达式的排序。这样一个查询的例子,其中列c1既包含和空字符串值,如下所示:

    SELECT c1, SUBSTR(c1, 1) AS c2 FROM t ORDER BY c2;

    (Bug #98035, Bug #30687020)

  • 对象中的表达式返回不准确的结果集团子句使用的列名与创建包含此列的表时用于列名的列名不同。使用查询时就是一个例子集团通过id虽然列名如原来所示创建表声明ID

    这是因为,服务器对表达式中的列名与表中的列名进行区分大小写的比较。通过确保按照预期以不区分大小写的方式执行这种比较,可以解决这个问题。(Bug #97628, Bug #98222, Bug #30541701, Bug #30761372)

  • 一个多表更新语句更新一个连接到连接其他两个表的派生表的表时,没有像在MySQL 5.6中那样进行适当优化,而是被视为STRAIGHT_JOIN已与创建派生表的子查询一起使用。(Bug #97418, Bug #30488700)

  • 解释现在使用散列连接而不是块嵌套循环,因为后者不再存在,几乎在所有情况下都被散列连接所取代。(Bug #97299, Bug #30444550)

  • 对复合哈希索引的第一列进行过滤的查询的执行计划错误地使用了该索引,从而产生错误的结果。(Bug #94737, Bug #29527115)

  • 控件中外部查询块的表对列的引用条件的加入没有工作,只能用在在哪里.这个问题的修复意味着像这样的查询现在可以正常工作:

    SELECT c.contact_name FROM customers c INNER JOIN order_details od ON o.order_id = od。折扣);

    在此之前,这必须重写如下所示:

    SELECT c.contact_name FROM customers c INNER JOIN order_details od ON 1 WHERE o.order_id = od。折扣);

    对相同的其他表的引用条款的加入,与查询中的一样SELECT * FROM t1 CROSS JOIN (t2 LEFT JOIN t3 ON t1.c=3),不是外部引用,仍然被禁止。在这种情况下,需要一个横向连接,像这样:SELECT * FROM t2 LEFT JOIN t3 ON t1.c=3.(Bug #35242, Bug #96946, Bug #11748138, Bug #30350696)

  • 用于构建服务器的OpenSSL版本与MySQL的其他部分(如库或插件)使用的版本可能不匹配。这可能导致某些特性无法工作,例如LDAP身份验证插件。现在使用相同版本的OpenSSL构建所有内容。

  • 以前在MySQL 8.0中优化不可能的表达式的工作,例如a = b和错误的作为当这样的表达式作为外部连接条件出现时,可能会导致执行效率较低,因为连接被解释为一个跟随过滤器的笛卡尔积。(Bug #8202, Bug #89739, Bug #97552, Bug #11745046, Bug #27581277, Bug #30520749)

    参考文献:参见Bug #98206, Bug #30756135。