Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.18 的变化(2019-10-14,正式发布)

MySQL 8.0.18 的变化(2019-10-14,正式发布)

有关升级、降级、平台支持等的一般信息,请访问https://mysql.net.cn/doc/relnotes/mysql/8.0/en/

账户管理注意事项

编译笔记

  • Incompatible Change:my_ulonglong类型不再在 MySQL 源代码中使用。任何使用此类型的第三方代码都应改用uint64_tC 类型。此外,printf()如果用于打印 my_ulonglong变量,格式字符串可能需要调整。(漏洞 #29453827)

  • 为了构建 MySQL 8.0,Protobuf 的最低要求版本现在是 3.0 而不是 2.5。(缺陷号 30141272)

  • 用于服务器构建的 Boost 库的最低版本现在是 1.70.0。(缺陷号 29639344)

  • 宏可DBUG_TRACE用于帮助编写调试代码。它可以方便地替换成对的进入/离开宏。例如,而不是这样写:

    void foo() {
      DBUG_ENTER("foo");
      bar();
      DBUG_VOID_RETURN;
    }

    改为这样写:

    void foo() {
      DBUG_TRACE;
      bar();
    }

    (漏洞 #29589102)

配置注意事项

  • CMake如果可用 ,现在可以使用 fastcov 。fastcovlcovgcov快。这需要 GCC 和gcov 9 或更高版本。(缺陷号 30011512)

  • CMake选项未使用,已被删除 。(缺陷 #29971049,缺陷 #96027)DISABLE_SHARED

  • 用于查找 Protobuf 可执行文件的CMake代码现在可以在将这些文件拆分为多个包的平台上运行。(漏洞 #29953773)

  • 新的CMake选项确定是否启用二进制文件中的部分生成,这使得将它们加载到调试器中的速度更快。默认情况下禁用该选项。如果使用lld或 GNU gold以外的链接器,它没有任何效果 。(缺陷 #29925009,缺陷 #95857)ADD_GDB_INDEX .gdb_index

  • 对于CMake选项,和 选项值未使用且已被删除。(缺陷 #29871520,缺陷 #95654)INSTALL_LAYOUT SLESWIN

  • 系统max_prepared_stmt_count 变量最大值已从 100 万(1,048,576)增加到 400 万(4,194,304)。默认值保持不变,仍为 16,382。

  • MySQL 8.0 不再支持使用 wolfSSL 构建。所有 MySQL 构建现在都使用 OpenSSL。

  • MySQL 不再使用 RE2 库。该库不再与源分发捆绑在一起, CMake 选项已过时。 WITH_RE2

连接管理说明

  • MySQL 现在提供了对压缩使用的更多控制,以最大限度地减少通过连接发送到服务器的字节数。以前,给定的连接要么未压缩,要么使用zlib压缩算法。现在,也可以使用zstd算法 (zstd 1.3),并为 zstd连接选择压缩级别。允许的压缩算法可以在服务器端配置,也可以在连接发起端配置,用于客户端程序和参与主/从复制或组复制的服务器的连接。有关详细信息,请参阅 连接压缩控制

    使用该算法的连接压缩zstd 要求服务器构建有 zstd库支持。新的 CMake 选项指示是使用捆绑库还是系统 库。 WITH_ZSTD zstd

    遗留的压缩控制参数,例如 --compressclient 选项,已被弃用,并将在未来的 MySQL 版本中删除。

    感谢 Facebook 的贡献,其中一些工作正是基于此。

弃用和移除说明

  • 使用MYSQL_PWD环境变量指定 MySQL 密码被认为是不安全的,因为它的值可能对其他系统用户可见。 MYSQL_PWD现在已弃用,将在未来的 MySQL 版本中删除。

  • 系统relay_log_info_file变量和 --master-info-file选项现已弃用,并将在未来的 MySQL 版本中删除。这些用于在设置时指定中继日志信息日志和主信息日志的名称 relay_log_info_repository=FILEmaster_info_repository=FILE 但这些设置已被弃用。中继日志信息日志和主信息日志文件的使用已被崩溃安全从表取代,这是 MySQL 8.0 中的默认设置。

  • slave_rows_search_algorithms系统变量现已弃用,并将在未来的 MySQL 版本中删除。此变量用于控制在为基于行的日志记录和复制准备成批的行时如何搜索行以查找匹配项。INDEX_SCAN,HASH_SCAN已发现 默认设置 对性能而言是最佳的,并且在所有情况下都能正常工作。

  • 并将在未来的 MySQL 版本中删除。该 log_bin_use_v1_row_events系统变量现已弃用,并将在未来的 MySQL 版本中删除。当设置为 时ON,该变量使 mysqld使用版本 1 二进制日志行事件而不是 MySQL 5.6 默认的版本 2 二进制日志行事件写入二进制日志。(默认为 OFF.)使用版本 1 二进制日志行事件启用了运行 MySQL Server 5.5 及更早版本的从属设备的基于行的复制,这不能使用版本 2 二进制日志行事件。

  • WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() 函数现已弃用, WAIT_FOR_EXECUTED_GTID_SET()应改用该函数。这两个函数都在等待,直到所有指定的事务都已应用,或者直到可选的超时已经过去。但是, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()应用于特定的复制通道,并且仅在事务已应用于该通道后才停止,应用程序必须为此运行。相反, WAIT_FOR_EXECUTED_GTID_SET()在服务器上应用指定的事务后停止,无论它们是如何应用的(在任何复制通道上或从任何用户客户端),以及是否有任何复制通道正在运行。 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()如果预期的事务到达不同的复制通道或来自用户客户端,例如在故障转移或手动恢复情况下,并且没有设置超时,则可能会无限期挂起。

钥匙圈笔记

  • MySQL 企业版现在包含一个keyring_hashicorp插件,它使用 HashiCorp Vault 作为密钥环存储的后端。有关详细信息,请参阅MySQL 密钥环

日志记录

  • 服务器启动期间的日志缓冲进行了调整,以减少错误日志中输出出现的延迟。(缺陷号 30019632)

优化器注释

  • 涉及首次匹配拆分跳转操作的查询在迭代器执行器中被错误地处理。它们现在被重写为 weedout。(缺陷号 30220791)

  • 哈希连接已作为在 MySQL 中执行内部等值连接的一种方式实现。例如,从这个版本开始,像这样的查询可以作为散列连接执行:

    SELECT *
        FROM t1
        JOIN t2
            ON t1.c1 = t2.c1;

    使用等值连接的多表连接也可以利用这种优化。

    散列连接不需要索引即可执行。在大多数情况下,散列连接比以前用于没有索引的等值连接的块嵌套循环算法更有效。

    默认情况下,从此版本开始,只要连接至少包含一个等值连接条件,就会使用散列连接,并且没有索引可以应用于连接条件。(散列连接仍然可以在有索引仅应用于单表谓词的情况下使用。)可以通过将hash_join 优化器开关设置为off或使用 NO_HASH_JOIN优化器提示来覆盖此首选项。此外,您可以通过设置来控制散列连接使用的内存量 join_buffer_size。内存需求超过此数量的连接在磁盘上执行;磁盘上的散列连接使用多个磁盘文件,如果这个数字超过 . 则可能无法执行 open_files_limit

    如果任何一对连接表的连接条件在使用的所有连接条件中不包括至少一个等连接条件,则不能使用散列连接。散列连接 用于笛卡尔积,即根本不指定连接条件的连接。

    EXPLAIN FORMAT=TREE您可以在or 的输出中查看是否已使用散列连接来优化查询 EXPLAIN ANALYZE

    此外,使用散列连接的内部连接现在也可以利用 Batched Key Access (BKA)。外部连接仍然分配整个连接缓冲区。

    有关详细信息,请参阅哈希连接优化

  • 添加了 ,它以格式EXPLAIN ANALYZE提供了基于迭代器的时间、成本和有关查询的其他信息。TREE此语句生成的输出类似于 的输出 EXPLAIN,但包含有关优化器估计如何与实际执行匹配的附加信息。

  • MySQL 现在将强制转换注入查询以避免某些数据类型不匹配;也就是说,优化器现在在表达式和条件中的项树中添加转换操作,其中参数的数据类型和预期的数据类型不匹配。这使得执行的查询等同于符合 SQL 标准的查询,同时保持与以前版本的 MySQL 的向后兼容性。

    这种隐式转换现在通过转换两个参数在时间类型和数字类型之间执行,就像 DOUBLE它们使用任何标准数字比较运算符进行比较时一样。它们现在也用于 DATEor TIMEvalues 和 DATETIMEvalues 之间的此类比较,在这种情况下,参数被转换为DATETIME.

    例如,查询如被重写并执行为,并在执行之前转换为。 SELECT * FROM t1 JOIN t2 ON t1.int_col = t2.date_colSELECT * FROM t1 JOIN t2 ON CAST(t1.int_col AS DOUBLE) = CAST(t2.date_col AS DOUBLE)SELECT * FROM t1 JOIN t2 ON t1.time_col = t2.date_colSELECT * FROM t1 JOIN t2 ON CAST(t1.time_col AS DATETIME) = CAST(t2.date_col AS DATETIME)

    通过查看、 或 的输出EXPLAIN ANALYZE, 可以了解何时将强制转换注入给定查询。 也可以使用,但在这种情况下也需要事后发布。 EXPLAIN FORMAT=JSONEXPLAIN FORMAT=TREEEXPLAINSHOW WARNINGS

    此更改预计不会导致查询结果或性能出现任何差异。

包装说明

  • 测试component_test_page_track_component.so 插件已移至-test包中。(缺陷号 30199634)

  • 包含curl而不是链接到系统curl库的二进制包已升级为使用curl7.65.3。(缺陷号 30015512)

可插拔认证

安全说明

空间数据支持

sys架构注释

  • sys.schema_unused_indexes视图现在过滤掉唯一索引。感谢 Gillian Gunson 的贡献。(缺陷 #24798995,缺陷 #83257)

  • 如果参数是未知的非消费者名称 ,该sys.ps_is_consumer_enabled() 函数现在会产生错误而不是返回 。(缺陷号 24760317)NULLNULL

  • 以前,sys模式源在单独的 Git 存储库中维护。sys 模式源现在包含在 MySQL 源分发中并在其中维护(在 下 scripts/sys_schema)。作为此更改的结果,为了简化sys 未来模式脚本的 维护,init_file扩展了由系统变量命名的文件中可接受的语句格式。具体参见服务器系统变量中对该变量的描述。

    sys.version视图已弃用,将在未来的 MySQL 版本中删除。受影响的应用程序应调整为使用替代方案。例如,使用该VERSION() 函数检索 MySQL 服务器版本。

测试套件说明

  • MySQL 测试已更新为使用最新版本的 googletest。(缺陷号 30079649)

X 插件说明

  • X 协议未正确显示为同一查询发出的大量警告消息。(缺陷号 30055869)

  • NO_BACKSLASH_ESCAPES启用 SQL 模式时,X 插件错误地将集合报告为表 。(漏洞 #28208285)

添加或更改的功能

  • 当服务器运行时 --initialize,没有理由加载非早期插件。服务器现在记录警告并忽略任何--plugin-load--plugin-load-add给出的选项--initialize。(漏洞#29622406)

  • 服务器启动期间与升级相关的诊断消息数量 INFORMATION_SCHEMA已减少。(缺陷 #29440725,缺陷 #94559)

  • 在 MySQL 8.0 之前,REVOKE 尝试撤销未知权限时会产生错误。在 MySQL 8.0 中,如果一个帐户是在安装注册权限的组件或插件时授予的动态帐户,则该帐户可以拥有服务器当前未知的权限。如果该组件或插件随后被卸载,该权限将取消注册,尽管拥有该权限的帐户仍然拥有它。撤销此类权限与撤销实际上无效的权限无法区分,因此 REVOKE不再为尝试撤销未知权限产生错误。但是,为了表明特权当前未知, REVOKE现在产生警告。(漏洞#29395197)

  • innodb_idle_flush_pct 变量允许在空闲期间限制页面刷新,这有助于延长固态存储设备的使用寿命。请参阅在空闲期间限制缓冲区刷新

    感谢 Facebook 的贡献。(漏洞 #27147088,漏洞 #88566)

  • 如果参数不存在,使用该选项调用的 mysqld--help不再中止secure_file_priv(缺陷号 26336130)

  • 对于组通信连接,Group Replication 现在支持 TLSv1.3 协议,MySQL Server 从 8.0.16 开始支持该协议。要使用 TLSv1.3 协议,MySQL 服务器必须使用 OpenSSL 1.1.1 或更高版本进行编译。有关为组复制配置加密连接的信息,请参阅 使用安全套接字层 (SSL) 保护组通信连接

  • OFFLINE_MODE系统变量有 一个新选项group_replication_exit_state_action ,它指定当服务器实例无意中离开组时组复制的行为方式,例如在遇到应用程序错误之后,或者在失去多数的情况下,或者当组中的另一个成员时由于怀疑超时而将其驱逐。

    OFFLINE_MODE指定为退出动作时,Group Replication 通过将系统变量设置为 将 MySQL 切换到离线 offline_mode模式 ON。当成员处于离线模式时,已连接的客户端用户在他们的下一个请求时断开连接并且不再接受连接,具有 CONNECTION_ADMINSUPER权限的客户端用户除外。Group Replication 还将系统变量设置 super_read_onlyON,因此客户端无法进行任何更新,即使它们已经连接到 SUPER特权。

    OFFLINE_MODEexit 操作像默认 exit 操作一样防止更新 ,READ_ONLY但也防止过时读取(具有规定权限的客户端用户读取除外),并使代理工具(如 MySQL Router)能够识别服务器不可用并重定向客户端连接。它还使实例保持运行状态,以便管理员可以在不关闭 MySQL 的情况下尝试解决问题,这与现有的替代ABORT_SERVER退出操作不同,后者会关闭实例。

  • 默认情况下,当已经被另一台服务器接受的事务应用于复制从属或组成员时,MySQL 复制(包括组复制)不会执行权限检查。从 MySQL 8.0.18 开始,您可以创建一个具有适当权限的用户帐户来应用通常在通道上复制的事务,并将其指定为PRIVILEGE_CHECKS_USER 复制应用程序的帐户。MySQL 然后根据用户帐户的权限检查每个事务,以验证您是否已授权该通道的操作。管理员也可以安全地使用该帐户从mysqlbinlog应用或重新应用事务输出,例如从通道上的复制错误中恢复。帐户的使用PRIVILEGE_CHECKS_USER有助于保护复制通道,防止未经授权或意外使用特权或不需要的操作。

    您授予REPLICATION_APPLIER 权限,使用户帐户能够显示为 PRIVILEGE_CHECKS_USER复制应用程序线程的帐户,并执行 mysqlbinlogBINLOG使用的内部使用语句 。设置用户帐户后,使用GRANT语句授予额外的权限,使用户帐户能够进行您希望应用程序线程执行的数据库更改,例如更新服务器上保存的特定表。这些相同的权限使管理员能够在需要在复制通道上手动执行任何这些事务时使用该帐户。如果尝试执行未授予适当权限的意外操作,则该操作将被禁止,并且复制应用程序线程会因错误而停止。

  • 内部消息服务已添加到组复制。MySQL 模块可以使用该服务,使用 Group Replication 的现有组通信连接,将带有识别标记的通用消息传输给所有组成员。

  • Protobuf 库现在是动态链接的。它们的默认位置/usr/lib64/mysql/private/用于 RPM、/usr/lib/mysql/private/DEB 和 /lib/private/TAR 构建。新的 INSTALL_PRIV_LIBDIRCMake 变量控制位置。

修正错误

  • NDB Cluster: 使用推送条件处理的查询在包含ORDER BY子句时产生不正确的结果。(漏洞#29595346)

    参考:这个问题是 Bug #28672214 的回归。

  • NDB Cluster:传输层 将NDB消息的大小限制为 32768 字节;发送缓冲区对消息大小有额外(和更严格)的限制。每当将消息附加到发送缓冲区时,都会执行页面检查以确保消息适合可用空间;如果不是,则使用新页面。当前问题的出现是因为没有执行检查以确保该消息适合空白页面;当消息的大小超过空页时,这会导致缓冲区覆盖并覆盖内存中的下一页。对于数据节点,发送缓冲区支持的最大消息(thr_send_page) 为 32756 字节;对于 API 和管理节点,此最大值为 32752 字节。(在单个数据节点内发送的信号不受这些限制,因为在这种情况下不使用发送或传输缓冲区)。现在,当使用新页面时,将根据新页面中可用的大小检查消息的大小。

    作为解决刚才描述的问题所做工作的一部分,DUMP添加了三个新命令以方便相关测试和调试:( DUMP 103003 )使用另一个节点 CmvmiRelayDumpStateOrd发送 命令; ( ) 和 ( ) 可用于发送长消息。(漏洞 #29024275)DUMPDUMP 103004CmvmiDummySignalDUMP 103005CmvmiSendDummySignal

  • NDB Cluster: EXPLAIN FORMAT=TREE没有提供对条件的正确解释,并将连接下推到 NDBCLUSTER存储引擎。问题包括:

    • 未显示推送条件。

    • 未显示推送连接的根。

    • 推送连接的子项不包含对其父项操作的任何引用。

  • InnoDB: 一个内部函数 (btr_push_update_extern_fields()) 用于获取新添加的外部存储字段并在悲观更新期间或不再需要返回到以前版本的记录时更新它们。新添加的外部存储字段由不同的函数更新。此外,用于确定外部存储字段数量的方法已得到更正。(缺陷号 30342846)

  • InnoDB:对缺少数据文件的撤消表空间 的DROP UNDO TABLESPACE操作导致分段错误。(缺陷号 30155290)

  • InnoDB:更正 了内部 trx_rseg_add_rollback_segments函数中的错误。(缺陷 #30114226,缺陷 #96372)

  • InnoDB: 修改了争用感知事务调度 (CATS) 代码中有问题的断言代码。(缺陷号 30086559)

  • InnoDB:可以忽略ib::fatal和 调用中传递给派生类的参数 ib::fatal_or_error此外,在发生致命错误的情况下, ib::fatal_or_error析构函数可能会导致服务器在打印消息之前退出。(缺陷号 30071930)

  • InnoDB: 在表的引用计数达到零之前,可能会从表缓存中删除损坏的表。(漏洞 #30065947,漏洞 #96224)

  • InnoDB: 内部 row_update_inplace_for_intrinsic()函数的代码路径不包括所需的微型事务 (mtr) 提交,导致调试断言失败。(缺陷号 30065518)

  • InnoDB:在启动时调用 内部fsp_srv_undo_tablespace_fixup() 函数时没有获取undo::ddl_mutex锁,在某些情况下可能会导致断言失败。(错误#30029433、错误#30461911、错误#97356)

  • InnoDB: 检查rename_tablespace_name() 函数发现如果 old_shard->get_space_by_id(space_id)没有找到表空间ID,不调用直接返回 old_shard->mutex_release()。(缺陷号 30027771)

  • InnoDB:名称中 带有FTS的表空间被错误判断为全文索引表的表空间,升级时没有注册到数据字典,导致升级失败。(漏洞#29992589)

  • InnoDB:ibuf_merge_or_delete_for_page()函数负责合并和删除更改缓冲区中的页面,不再为撤消表空间和临时表空间调用。更改缓冲区不包含这些表空间类型的条目。(缺陷 #29960394,缺陷 #95989)

  • InnoDB: 缓冲池大小变量( 、 和 )的某些组合--innodb-buffer-pool-instances导致 --innodb-buffer-pool-size--innodb-buffer-pool-chunk-size大小为 0、1 或值不是页面大小的倍数,等等,导致缓冲池创建和调整大小时出错. (漏洞 #29951982)

  • InnoDB: 在截断撤消表空间时服务器退出导致在重新启动服务器后前滚克隆操作时出现以下错误: [ERROR] [MY-011825] [InnoDB] [FATAL] Clone File Roll Forward: Invalid File State : 0. (漏洞#29949917)

  • InnoDB: 操作ALTER TABLE ... DISCARD TABLESPACE导致挂起情况。(错误#29942556,错误#30324703)

  • InnoDB: 存档线程失败后克隆操作失败并出现以下错误:错误 3862 (HY000):克隆捐赠者错误:1317:查询执行被中断。 (缺陷号 29930839)

  • InnoDB: 与克隆相关的回归导致索引和非索引更新操作的性能略有下降。(漏洞 #29925409)

  • InnoDB: InnoDB现在在启动时发生的表空间发现扫描期间忽略隐藏的目录和文件。隐藏目录和文件包括以“.”开头的目录和文件。Windows 上由属性标识的隐藏目录和系统目录和文件。(错误#29900671、错误#95071、错误#30068072)

  • InnoDB: 为了改进死锁检测,检测数据锁之间的死锁循环的任务已从事务线程转移到专用后台线程。(漏洞#29882690)

  • InnoDB:在mysqld初始化期间 更新mysql.gtid_executed表 导致将以下警告打印到错误日志中: [Warning] [MY-010015] [Repl] Gtid table is not ready to be used。无法打开表“mysql.gtid_executed”。更新和相关警告不再出现。(漏洞 #29871809)

  • InnoDB: Standard Monitor 输出(也由 打印 的LATEST DETECTED DEADLOCK部分 已扩展为包括有关参与死锁周期的事务的附加信息。(漏洞#29871641)InnoDBSHOW ENGINE INNODB STATUS

  • InnoDB: 在检查用于存储 SDI 的缓冲区大小时,使用了不正确的参数来比较序列化字典信息 (SDI) 输入和输出值。(缺陷 #29871525,缺陷 #95606)

  • InnoDB: 当具有相同名称的撤消表空间文件从捐赠者的不同目录复制到接收者的同一目录时,在克隆操作期间覆盖撤消表空间文件。如果遇到重复的撤消表空间名称,克隆操作现在会报告错误。当数据被克隆到接收者时,撤销表空间文件被克隆到 innodb_undo_directory变量定义的目录。因为文件被克隆到同一目录,所以不允许重复的撤消表空间文件名。(缺陷号 29837617)

  • InnoDB: 从具有较小重做日志文件大小和大量事务的 MySQL 服务器实例进行克隆时,克隆操作会生成大量重做日志文件。大量重做日志文件有时会导致启动挂起或断言。否则,允许启动继续而不清除过多的重做日志文件。(缺陷号 29837490)

  • InnoDB: 在恢复期间,可以忽略将重做日志应用于加密表时发生的丢失表错误,从而允许启动继续进行。在这种情况下应停止启动。(缺陷 #29820184,缺陷 #95183)

  • InnoDB: 启动时将错误的重做日志文件大小打印到服务器错误日志。(漏洞 #29818711)

  • InnoDB:lock_t删除了在存在等待记录锁定请求时 阻止在锁定队列中重用锁定对象(结构)的限制(漏洞#29814308)

  • InnoDB: 将长分区表名转换为文件名时,保存文件名的缓冲区空间不足,导致断言失败。(漏洞#29813582)

  • InnoDB: 一些事务锁结构字段 (trx->lock) 没有得到适当的互斥锁保护。(漏洞 #29809137)

  • InnoDB: 恢复期间空的撤消段更新引发了断言。(漏洞 #29802703)

  • InnoDB: 如果收件人数据包含具有全文索引的表,则尝试在收件人上删除数据时克隆操作失败。(漏洞#29796507)

  • InnoDB: 废弃一个file-per-table表空间后,重命名旧表并创建同名新表时报错。该错误是由于文件路径信息过时造成的。(错误号 29793800)

  • InnoDB: 在服务器处于磁盘已满状态时尝试以只读模式打开文件的测试用例导致调试断言失败。删除断言以允许服务器重试打开文件,并在多次尝试不成功时报告错误。(缺陷 #29692250,缺陷 #95128)

  • InnoDB:在操作 期间构建的与外键相关的表 RENAME TABLE包含旧表名。(漏洞#29686796)

  • InnoDB: 服务器为具有非零数据长度的列传递了 NULL 值。(漏洞 #29654465)

  • InnoDB: 将分区表从 MySQL 8.0.13 实例(或更早版本)导入到 MySQL 8.0.14、8.0.15 或 8.0.16 实例失败,并为使用 定义的源和目标实例出现 表空间丢失lower_case_table_names=1错误。由于文件名大小写不匹配,无法找到导入操作使用的表空间文件和元数据文件。(缺陷 #29627690,缺陷 #94850)

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

  • InnoDB:TABLE::read_set未正确设置 读取集 (QUICK_SKIP_SCAN_SELECT::get_next(),导致断言失败。(漏洞 #29602393)

  • InnoDB: 独占备份锁现在用于在主密钥轮换期间阻止表空间截断操作。以前,撤消表空间名称上的元数据锁用于同步操作。此补丁还解决了主密钥轮换和删除撤消表空间操作之间可能发生的死锁问题。(错误#29549938、错误#30461225、错误#97352)

  • InnoDB:SELECT...FOR [SHARE|UPDATE]在执行具有指定范围的条件的查询 时,进行了不必要的下一个键锁定 WHERE ,导致锁定了太多行。此问题最常见的情况已得到解决,因此仅锁定与搜索范围相交的行和间隙。(缺陷号 29508068)

  • InnoDB: 在第一个位置添加虚拟列和普通列引发断言失败。(漏洞 #29501324)

  • InnoDB: 关闭进程没有等待InnoDB 后台线程退出,这可能导致关闭停止,等待后台线程从 MySQL 事务列表中删除事务。现在进行检查以确保 InnoDB后台线程已正确退出。此外,还添加了一个中间关闭状态以改进InnoDB主线程的关闭时间。(漏洞#29417503)

  • InnoDB: 在 TempTable 存储引擎操作期间发生内存泄漏,原因是未能取消分配最后一块已分配的内存,TempTable 在线程本地存储中保留该内存块,直到线程退出。(漏洞 #29300927)

  • InnoDB:innodb_io_capacity_max吞吐量在小设置、单个页面清理器线程和多个缓冲池实例 的繁重工作负载下停滞 (缺陷号 29029294)

  • InnoDB:ALTER TABLE ... ADD INDEX具有并发插入 的长时间运行 感谢 Satya Bodapati 提供补丁。(缺陷号 29008298)

  • InnoDB:从MySQL 5.7升级到MySQL 8.0后, 该 INFORMATION_SCHEMA.INNODB_COLUMNS 表不显示分区表列。对于在 MySQL 8.0 版本上创建的分区表, INFORMATION_SCHEMA.INNODB_COLUMNS 仅显示第一个表分区的列。(缺陷 #28869903,缺陷 #93033)

  • InnoDB:递归调用 内部rtr_page_split_and_insert() 函数。对该函数的内部调用释放了一个对象,该对象仍在对同一函数的外部调用中使用,从而导致断言失败。(缺陷号 28569379)

  • InnoDB: 在特定情况下,将 innodb_limit_optimistic_insert_debug 变量设置为 2 会在本应报告错误时引发调试断言。(漏洞 #28552330,漏洞 #92187)

  • InnoDB: 当事务尝试将记录锁升级为下一个键锁时,可能会出现死锁。(漏洞 #23755664,漏洞 #82127)

  • InnoDB: 计数器 没有计算所有死锁。感谢 Laurynas Biveinis 的贡献。(缺陷 #21278148,缺陷 #77399)INFORMATION_SCHEMA.INNODB_METRICS lock_deadlocks

  • InnoDB: 读取操作期间报告的错误未识别读取的文件的名称。(漏洞 #21120885,漏洞 #76020)

  • 复制: 如果该 group_replication_set_communication_protocol() 功能用于设置某些组成员不支持的通信协议版本,则协议更改过程未正确停止。该问题现已解决。(缺陷号 30209596)

  • 复制: 如果组复制使用的 TCP 连接由于长时间的网络错误而超时,则组通信引擎 (XCom) 无法重新建立其本地连接,需要在实例上重新启动组复制(参见错误 #25656508)。以前,在这种情况下尝试停止组复制会导致 XCom 挂起,从而阻止重新启动。此问题现已修复,以便 XCom 正确终止并且可以重新启动组复制以重新建立本地连接。(缺陷号 30132500)

    参考资料:另请参阅:Bug #22158368。

  • Replication:启用SQL模式后,Group Replication 在ANSI_QUOTES检查是否存在MySQL Server的克隆插件以执行远程克隆操作以进行分布式恢复时返回错误。该问题现已解决。(缺陷号 30099796)

  • 复制:系统变量 的值在 default_table_encryption复制组的所有成员上必须相同,并且在组复制运行时不能更改。如果使用语句,组复制不允许更改系统变量的值 SET GLOBAL,但如果使用语句,则错误地允许SET PERSIST。(漏洞 #30031228,漏洞 #96158)

  • 复制: 如果 group_replication_local_address 更改了成员的设置并且该成员随后重新加入了该组,则组通信系统 (GCS) 会在某些位置保留旧本地地址的副本。Group Replication 本地地址现在是在需要时获取而不是缓存。(漏洞#29910699)

  • Replication: 当Group Replication使用远程克隆操作向加入成员提供事务时,如果加入成员在操作过程中停止,则它不会干净地关闭。(漏洞#29902389)

  • 复制:复制系统变量 的会话值 default_table_encryption,以便复制从站保留数据库和表空间的正确加密设置。对于 table_encryption_privilege_check 系统变量设置为ONTABLE_ENCRYPTION_ADMIN需要特权才能应用会话值为 default_table_encryption被改变了。如果没有在复制从站上授予此权限,则在某些情况下,复制会因错误而停止,其中事件所需的加密设置实际上与从站自己的默认加密设置相同,因此该操作应该有效。与从站不同的加密设置的语句也有可能在它不应该工作时成功。这些行为现在已得到纠正,因此没有 TABLE_ENCRYPTION_ADMIN允许特权应用与其自身的默认加密设置相匹配的事件,并且不会被要求设置不必要的加密设置,但如果事件需要不同的加密设置,则仍然需要进行适当的特权检查。(漏洞 #29818605)

  • 复制:系统变量 指定的超时秒数 group_replication_unreachable_majority_timeout 仅每两秒检查一次。现在每秒检查一次超时,以便遵守奇数值。(漏洞 #29762005)

  • 复制: MySQL 8.0.14 中为组复制引入的输入通道使用共享内存队列而不是 TCP 套接字,用于组复制的组通信系统 (GCS) 组件与本地组通信引擎 (XCom) 实例之间的通信。此输入通道无法在 SELinux 安装上建立,这意味着升级到 MySQL 8.0.14 或更高版本的成员无法重新加入该组。当启动组复制时,XCom 实例临时打开临时端口范围内的一个端口,以允许 GCS 为输入通道建立连接,但在 SELinux 上, mysqld进程没有连接到此端口的权限。解决方法是修改 SELinux 策略以允许 MySQL 连接到任何端口,但这会降低安全性。从 MySQL 8.0.18 开始,该问题已得到修复。XCom 和 GCS 不再使用临时端口为输入通道建立连接,而是使用 group_replication_local_address 系统变量配置的 Group Replication 通信端口,这必须得到 SELinux 的允许(参见 常见问题)。(错误#29742219,错误#30087757)

  • Replication:START SLAVE当 SQL 线程仍在停止过程中时, 如果发出一条语句在 slave 上启动 SQL 线程,并且同时请求 slave 状态,则可能会发生涉及三个线程的死锁 现在已通过在 SQL 线程停止时提前释放锁定来解决此问题。(缺陷 #29697588,缺陷 #95115)

  • 复制: 组复制拒绝其公用名称值使用通配符的服务器证书。现在使用正确的比较方法。(缺陷 #29683275,缺陷 #95068)

  • Replication: Group Replication的Group Communication System(GCS) STOP GROUP_REPLICATION有可能在发出消息后传递来自成员的消息并且该成员已进入OFFLINE 组中状态,从而导致错误。GCS 现在会在传递消息之前验证它是否属于某个组。(缺陷号 29620900)

  • 复制:功能 中的锁定问题 WAIT_FOR_EXECUTED_GTID_SET()可能导致服务器在某些情况下挂起。该问题现已得到纠正。(漏洞 #29550513)

  • 复制:如果在执行语句时binlog_encryption更改了系统变量 的值,则可能会发生死锁 START SLAVE(漏洞 #29515210)

  • Replication: replication slave 的心跳间隔,由语句的MASTER_HEARTBEAT_PERIOD 选项CHANGE MASTER TO ,可以以毫秒为单位指定分辨率。之前master的binary log dump线程以秒为粒度来计算是否应该向slave发送心跳信号,导致在多次skipped events的情况下heartbeat activity过多。为了解决这个问题,master 和 slave 的所有与心跳相关的计算现在都使用纳秒级的精度来执行。感谢 Facebook 的贡献。(缺陷 #29363787,缺陷 #94356)

  • Replication: 使用功能索引创建表会在表上创建一个隐藏的生成列,但该列并不总是出现在表中的相同位置,这意味着以后向表中添加一列(或多列)可能会留下与在单个 CREATE TABLE 语句中已经具有附加列的其他相同表相比,隐藏列位于不同的位置。例如,两个表t1and t2,其中t1创建并由两个语句CREATE TABLE t (a INT, INDEX ((a+1)))andALTER TABLE t ADD COLUMN b INT,并且t2使用创建 CREATE TABLE t2 (a INT, b INT, INDEX ((a+1))),即使SHOW CREATE TABLE t1andSHOW CREATE TABLE t2 产生了相同的结果(除了表的名称)。

    Table_map_log_events由于二进制日志 中描述的表的内部定义会有所不同,所以刚才描述的问题可能会成为问题。这意味着,如果这样的表是在主服务器上使用 CREATE TABLEfollowed by创建ALTER TABLE的,然后使用mysqldump部署从服务器,则将使用单个CREATE TABLE语句创建从服务器版本的表,然后将随后复制行事件由于类型不匹配而失败并出现错误。

    通过强制所有隐藏的生成列始终位于列列表的末尾,多个生成的列按列名排序,此问题得到解决。如果表中增加了一个新的功能索引部分,则按照这个规则插入新的隐藏列。此外,如果用户创建了一个不是生成列的新列,则该列总是添加在第一个隐藏列之前。

    笔记

    受此更改影响的表结构在升级期间不会自动更改;这必须通过执行明确地完成ALTER TABLE

    (漏洞#29317684)

  • 复制: 如果RESET MASTER语句在执行期间停止,则二进制日志之后不可用于写入。(漏洞 #29125121)

  • 复制: 一些执行瞬态或次要组复制任务的线程,例如延迟的插件初始化线程,在性能模式 threads表中不可见。(缺陷 #28930537,缺陷 #93212)

  • 复制: 当成员因错误​​离开组时,组复制过程的实现已跨组件标准化,以确保成员执行完全相同的操作并发出相同的错误消息,而不管离开组的最初原因如何. (缺陷 #28866495,缺陷 #93027)

  • 复制: 在使用 GTID 并 MASTER_AUTO_POSITION设置为 ON,在意外停止后,从站将尝试中继日志恢复,如果中继日志丢失,则失败,从而阻止复制开始。但是,此步骤是不必要的,因为 GTID 自动定位可用于恢复任何丢失的事务。在恢复情况下,slave现在首先检查是否 设置MASTER_AUTO_POSITIONON. (漏洞 #28830834,漏洞 #92882)

  • 对于XA COMMIT 语句,语句执行中涉及的插件的调用顺序是不确定的,这可能会导致复制问题。感谢 Dennis Gao 提供修复。(缺陷 #31082237,缺陷 #99051)

  • keyring_aws插件未包含在商业 Docker RPM 包中。(缺陷号 30199423)

  • 从 SQL 脚本生成 C 源代码时,一些 utf8 编码的字符被拆分成多行。感谢 Przemysław Skibiński 提供补丁。(漏洞 #30152555,漏洞 #96449)

  • 保留字在表ARRAY中列为未保留字INFORMATION_SCHEMA.KEYWORDS 。(漏洞 #30134275,漏洞 #96416)

  • 即使启用了 SQL 模式, 某些包含的语句||也会产生解析错误 。PIPES_AS_CONCAT(缺陷 #30131161,缺陷 #96405)

    参考:这个问题是 Bug #29305022 的回归。

  • LOAD DATA如果存在子句,则语句会错误地忽略 NO_AUTO_VALUE_ON_ZEROSQL 模式。SET(缺陷号 30126375)

  • thread_pool如果启用 了插件,则自动升级失败并退出服务器 。(缺陷号 30121742)

  • 在确定是否为每次执行重新计算物化派生表时,使用了父查询块的不可缓存性,而不是表上的 rematerialize 标志(目前仅适用于 true JSON_TABLE())。这可能会导致不必要的重新实现,尤其是在对非合并视图进行查询时,从而导致性能下降。(缺陷号 30110851)

  • 对于一个IGNORE子句, LOAD DATA应该跳过产生CHECK约束冲突的行并继续后面的行,但它因错误而停止。(错误#30084966,错误#96296)

  • 启用后,克隆插件初始化失败,因为sql_require_primary_key 它创建了两个不支持索引或主键的动态性能模式表。的影响 sql_require_primary_key现在仅限于可以参与复制的存储引擎(目前除性能模式外的所有存储引擎)(Bug #30083300,Bug #96281)

  • Protobuf 编译在 macOS 上失败。(漏洞 #30079536,漏洞 #96263)

  • 对于自动升级,audit_log插件没有重新加载,导致审计以旧模式启动。(缺陷号 30068110)

  • 为了去除重复的行,weedout 优化需要为每一行提供一个唯一的标识符,这是由存储引擎通过调用提供的 handler::position(),但是这个函数并不总是在正确的时间被调用,或者有时在不需要的时候被调用。有关如何以及何时进行此类调用的问题是许多优化错​​误的根源。此修复将调用的责任转移 handler::position()给迭代器,迭代器的默认实现通常自行充分处理此任务。(缺陷号 30060691)

    参考资料:另请参阅:Bug #29693294、Bug #30049217、Bug #30153695。

  • 服务器可能因 COM_PROCESS_INFO命令处理不当而退出。(缺陷号 30032302)

  • 当已弃用的系统变量被赋值时通常会生成警告,但在服务器启动期间处理持久化系统变量时不会发生这种情况。(缺陷号 30030648)

  • bind_address设置为包含多个地址的值时,设置会 导致服务器 在host_cache_size=0客户端连接时退出。(缺陷号 30018958)

  • 在 Windows 上,Ninja 构建类型的 Protobuf 编译失败。(缺陷号 30018894)

  • SHOW PROCESSLIST输出可以包括已经完成但不再进行的报表。(漏洞#29999818)

  • mysqldump错误消息缓冲区太小,可能导致消息截断。(缺陷 #29999782,缺陷 #96074)

  • 在就地升级期间将表从 MySQL 5.7 导入 MySQL 8.0 时缓存 了最后使用的自动增量值而不是下一个要使用的”自动增量值,这导致升级后从表缓存中读取的任何表不正确自动增量值。(漏洞#29996434)

  • 当执行一个使用常量折叠的准备好的语句时,可以为回滚注册一个位置,该位置不是在 上分配的MEMROOT,而是在堆栈上分配的,因此不再在范围内。(漏洞#29990693)

    参考资料:另请参阅:Bug #29939331。

  • 为创建包含列的表的 语句ZEROFILL生成了关于被弃用 的警告。这可能会造成混淆,因为该 属性可能只是隐式添加到 列中。为避免混淆,不再对此类语句发出警告。(漏洞#29961060)CREATE TABLE ... ASCREATE TABLE ... LIKEYEARZEROFILLYEAR

  • 使用按位运算符(例如 in )的查询未能按预期返回任何行。(漏洞#29957969)WHERE text_col < (int_col & int_col) AND int_col = -1

  • 优化器提示中格式错误的资源组名称可能会导致意外的服务器行为。(漏洞#29955732)

  • EXPLAIN, 使用时 FORMAT=TREE,没有显示与使用相同的成本FORMAT=JSON。特别是,在使用 时 FORMAT=TREE,计算的成本考虑eval_cost了连接,但没有考虑基表。(漏洞 #29953579)

  • 对于 Solaris,mysqld.cc包含一个memcntl()不再需要的原型。原型已被删除。(缺陷 #29953495,缺陷 #95971)

  • 对于 Solaris,-DWITH_SSL=system在使用 GCC 编译时不起作用。(缺陷 #29953460,缺陷 #95970)

  • MySQL 构建配置-DWITHOUT_SERVER=1 失败。(缺陷 #29948728,缺陷 #95740)

  • 内部方法Field_tiny::pack()并不总是按预期执行边界检查。(缺陷号 29948029)

    参考资料:另请参阅:Bug #31591391。

  • 插件卸载处理不当可能导致服务器退出。(漏洞#29941948)

  • 内部MEM_ROOT类没有正确处理所有内存不足错误。(缺陷号 29940846)

  • JSON_SCHEMA_VALIDATION_REPORT() 没有区分未根据 JSON 模式验证的 JSON 文档和嵌套太深的 JSON 文档,这在某些情况下导致了错误的行为。(缺陷号 29940833)

  • 对于涉及非常大的常量的比较,使用 <=> 运算符可能会产生不正确的结果。(缺陷 #29939331,缺陷 #95908)

  • 对于keyring_aws插件,系统变量的一些有效区域值 keyring_aws_region被拒绝。(漏洞#29933758)

  • UNION对于调试版本,在计算GEOMETRY列和 的组合数据类型时 ,可以在查询期间引发断言 SELECT * FROM (SELECT NULL)。(缺陷 #29916900,缺陷 #95827)

  • 对于使用binary字符集定义的列,SHOW CREATE TABLE可能会生成CREATE TABLE在执行时产生语法错误的语句。(缺陷 #29909573,缺陷 #95801)

  • 添加了数据字典 API,用于获取使用特定存储引擎的模式中的表名,以及用于获取由存储引擎创建和隐藏的模式中的表名。前者是NDB需要的,后者是DROP DATABASE 运营需要的。(缺陷 #29906844,缺陷 #95792)

  • --order-by-primary使用该选项运行时, mysqldump会泄漏内存 (缺陷号 29906736)

  • 对于涉及功能索引 EXPLAIN FORMAT=TREE的查询,打印隐藏列名而不是索引表达式。(漏洞#29904996)

  • 对于调试版本, 当要插入的最后一行由于 约束CREATE TABLE ... IGNORE SELECT ...失败而被跳过时,语句没有正确清理表状态。CHECK这可能会导致使用该表的下一条语句引发断言。(漏洞 #29903865)

  • IN 当此 CTE 的递归查询的终止条件具有使用另一个递归 CTE 的谓词时,MySQL 未正确处理递归公用表表达式 (CTE) 的执行。(漏洞#29899614)

  • 对于分区驻留在不同表空间文件中的表,序列化字典信息 (SDI) 的反序列化失败。(漏洞#29898965)

  • 对于使用 LDAP 身份验证插件的身份验证,如果用户 DN 部分为空并且配置了组映射,身份验证会分配不正确的用户 DN 并跳过用户搜索。(漏洞#29897624)

  • 在某些情况下,没有名称定义的约束可能会导致服务器退出。(漏洞#29892876)

  • 由于缺少 NDB 表空间,从 MySQL 5.7 到 MySQL 8.0 的就地升级失败。(错误#29889869,错误#30113440)

  • mysqlpump在针对早于 MySQL 5.7 的服务器运行时产生错误。(漏洞#29889253)

  • 下载 Boost 时, 用于确定下载文件大小的CMake配置逻辑不正确,并且可以在成功下载操作后删除该文件。(漏洞#29881279)

  • 由于无符号整数类型转换可能导致的整数溢出可能导致以后由于任意大小的内存分配而导致缓冲区溢出。(漏洞#29878914)

  • 当客户端字符集不是 latin1时,服务器将值的字符串表示形式DECIMALlatin1转换为客户端字符集。这种转换不是必需的,因为所有支持的客户端字符集都以与 相同的方式对数字进行编码 latin1,因此不再执行。(漏洞#29875672)

  • 在非vio_description()调试版本中调用了调试函数。(漏洞#29871361)

  • MySQL 8.0.3 中先前问题的修复更改了是否 DATE可以缓存常量值表达式的测试,从允许除全局变量以外的任何表达式到全面拒绝所有函数,无论它们是否超过常量,这显着影响相关查询的性能,其中优化器需要将字符串转换为DATE值。这个测试已经恢复到原来的形式。(漏洞#29871018)

    参考资料:此问题是 Bug #85471、Bug #28576018 的回归。

  • 可以从存储引擎获取动态表统计信息,INFORMATION_SCHEMA但这不适用于分区表。(缺陷 #29870919,缺陷 #95641)

  • 重试失败的访问控制语句可能允许另一个线程在元数据锁定释放和重新获取的窗口期间获取访问控制缓存上的锁,从而导致死锁。现在在重试操作期间不会释放锁。(缺陷 #29870899,缺陷 #95612)

  • 如果没有适当权限的用户试图启用 offline_mode系统变量,则可能会引发断言。(缺陷号 29849046)

  • Fedora 打包配置将mysql_config_editor的 调试信息放在 错误的包中。(漏洞#29841342)

  • 在 MeCab 插件初始化期间尝试使用释放的对象导致了分段错误。(漏洞#29832534)

  • 用于为随机密码生成熵的函数有时不能提供太多熵。(漏洞#29808492)

  • super_read_only启用后,服务器可能无法 正常处理DROP TABLESPACE。(漏洞 #29802833)

  • 服务器未正确处理包含具体化半连接的左连接的查询。(漏洞 #29800741)

  • 对于使用 RPM 包安装的 MySQL,如果客户端帐户使用 LDAP 身份验证插件进行身份验证,则测试服务器连接性的初始化脚本会出现异常。(漏洞#29786782)

  • 存储引擎初始化期间不正确的锁定可能导致服务器退出。(漏洞#29782379)

  • 在启用 GTID 的服务器上,访问视图的并发执行 DROP USER和准备好的语句可能会死锁。(漏洞#29772622)

  • 在执行涉及反连接转换EXPLAIN FORMAT=JSON形式的查询时,子查询被淘汰,但它自己的子查询被向上移动,而不是与它一起被淘汰。(漏洞#29759277)SELECT WHERE NOT EXISTS (SELECT FROM (derived_table) WHERE false_condition)

    参考资料:另请参阅:Bug #30017509。

  • 中断的表空间加密操作导致数据字典和存储引擎元数据之间存在差异,导致后续尝试访问表空间时断言失败。(缺陷号 29756808)

  • 同时执行事件调度程序 DROP EVENT可能会导致锁获取挂起,直到锁等待超时。(缺陷 #29742901,缺陷 #95223)

  • CHECK当列从表达式中获取默认值时,不会强制执行约束。(缺陷 #29706689,缺陷 #95192)

  • 在没有临时表的同一个表上执行两种排序时,两种排序都尝试使用相同的缓冲区,导致读取越界。当同一查询同时使用DISTINCT和时,可能会发生这种情况ORDER BY。(漏洞#29699759)

  • 在执行涉及已排序表的除草时,排序不是按行 ID 完成的。(漏洞#29693294)

  • 由于使用/ZI标志,VS2019 产生了编译错误,并选择了调试编译。现在 /Z7改为使用。(缺陷 #29691691,缺陷 #95125)

  • 在源代码发行版中,这些更改是针对 DBUG 包进行的,以清理 dbug目录中旧的和未维护的代码:

    • 移动dbug.ccmysys目录,删除 dbug库。

    • 删除了未使用的功能dbug.cc

    • 删除了DBUG_LEAVE宏;不再需要。

    • DBUG_LOG将宏 的主体包裹在中if _db_enabled_(),以避免格式化可能无论如何都不会打印的字符串。

    • 删除了dbug目录。

    (缺陷 #29680868,缺陷 #95082)

  • 在分配引用项数组时,未考虑任何窗口函数的计数。因此,当拆分具有窗口函数的表达式时,存储新项引用所需的额外空间未正确分配。(漏洞#29672621)

  • 设置用户变量的排序规则并非在所有情况下都能正常工作。(漏洞 #29665165)

  • WHERE语句中子句的 处理SHOW没有一致地执行。(漏洞#29664758)

  • 如果在同一ALTER TABLE语句中指定了删除和添加约束的子句,则它们的执行顺序不正确。(漏洞#29652464)

  • EXPLAIN现在显示结果按行 ID 排序的时间。(漏洞#29634196)

  • 在以下任一情况下,不再执行不必要的具体化:

    • 在连接结束时执行排序时,例如用于分组,并且排序不使用行 ID。

    • 实现不被多次读取的派生表时。

    (漏洞#29634179)

  • CAST(arg AS FLOAT)arg当太小而无法表示为一个FLOAT值时,没有返回预期的超出范围的错误。(漏洞#29621333)

  • 值的内部转换FLOAT 有时会在错误的时间发生,这可能导致结果过于精确。考虑如下所示创建和填充的表:

    CREATE TABLE t(f FLOAT);
    INSERT INTO t VALUES (2.3);

    在修复之前,SELECT f, IF(f > 0, f, 0) FROM t针对此表的查询返回(2.3, 2.299999952316284)而不是(2.3, 2.3)按预期返回。(漏洞 #29621062)

  • log0meb.cc无法使用某些构建选项进行编译。(漏洞 #29616525)

  • 客户端库可以在从服务器获取结果集元数据时取消引用空指针。(错误#29597896,错误#30689251)

  • 在对日期和间隔值求和时,间隔值检查可能会发生运行时错误。(漏洞#29587536)

  • 在启用了 Undefined Behavior Sanitizer 的构建中,与 -9223372036854775808 相乘可能会产生警告和不正确的结果。(漏洞#29581610)

  • 在启动期间,服务器试图将不应记录的操作写入二进制日志。(漏洞 #29557747,漏洞 #94835)

  • 形式的陈述导致断言。(漏洞 #29525304)CREATE VIEW v1 AS SELECT * FROM table WHERE (constant IN (SELECT constant) IS UNKNOWN)

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

  • 在 EL6 上,如果启用 FIPS 的 OpenSSL 库不可用,尝试启用 FIPS 模式可能会导致服务器故障。(漏洞#29519794)

  • SET PERSIST_ONLY可用于保留一些不能保留的系统变量SET PERSIST(由于变量设置的发生方式)。如果在启动时发现这样的变量 mysqld-auto.cnf,服务器现在会发出警告并忽略该设置。(漏洞#29511118)

  • 在某些情况下,服务器未正确聚合部分撤销和架构级特权。(漏洞 #29484519)

  • 对于调试版本,ENUMSET使用子句定义的列 DEFAULT引发断言。(缺陷号 29480711)

  • 如果未选择开发组件,则 MySQL 安装程序不会安装 OpenSSL DLL 依赖项。(错误#29423421、错误#94168、错误#30199579、错误#96573)

  • 在隔离级别,在memcached客户端READ UNCOMMITTED的重负载下发生分段错误 。一个事务正在更新的外部存储 列被另一个事务读取为具有 NULL 值和非零数据长度。(缺陷 #29396364,缺陷 #93961)BLOB

  • 在具有有效 IPv6 地址解析的系统上,连接时 IPv6 套接字创建失败会导致内存泄漏。(缺陷 #29374606,缺陷 #94384)

  • 在复制场景中,如果多个客户端并发执行XA COMMITXA ROLLBACK 使用相同XID值的语句,可能会出现复制不一致的情况。(缺陷 #29293279,缺陷 #94130)

  • TIMESTAMPADD() 对于准备好的语句,可以反转函数 的参数。(缺陷号 29268394)

  • 语句的DEFAULT ROLE选项 CREATE USER未写入二进制日志。(缺陷 #28948915,缺陷 #93252)

  • 使用无效的 memcached 插件变量设置从命令行启动服务器导致服务器退出。(漏洞#28575863)

  • for的SET子句LOAD DATA无法设置GEOMETRY NOT NULL列。(缺陷 #28460369,缺陷 #91893)

  • 在 Windows 8 及更高版本上,该keyring_aws 插件无法与 Amazon KMS 服务器通信。(漏洞#28377961)

  • INFORMATION_SCHEMA表,并且 SHOW COLUMNS当对视图的查询有多个查询块与 UNION运算符组合时,可能会产生不正确的视图列类型。(漏洞 #28278220,漏洞 #91486)

  • 在 Debian 上,InnoDB启动时恢复时间过长可能会导致 systemd 服务启动失败。默认的 systemd 服务超时现在被禁用(与 RHEL 一致)以防止这种情况发生。(缺陷 #28246585,缺陷 #91423)

  • thread_pool启用插件后, 视图sys.processlist显示 sys.session线程名称而不是实际用户名。(漏洞 #25906021,漏洞 #85976)

  • 视图中的delete_latencysys.schema_index_statistics错误地引用SUM_TIMER_INSERT 了 Performance Schema table_io_waits_summary_by_index_usage 表的列而不是SUM_TIMER_DELETE 列。(漏洞 #25521928)

  • 在该 sys.diagnostics()过程的输出中,视图的 latency列以 user_summary_by_file_io_type原始皮秒而不是格式化值的形式错误显示。(漏洞#25287996)

  • MySQL Enterprise Encryption 函数可以将 Diffie-Hellman (DH) 方法应用于非 DH 密钥,从而导致不可预测的结果或服务器退出。(漏洞 #22839007)

  • SHOW PROCESSLIST一些 INFORMATION_SCHEMA和 Performance Schema 表 的密码屏蔽不完整。(缺陷号 20712046)

  • 启用严格 SQL 模式后,该 STR_TO_DATE()函数无法正确处理仅包含时间部分的值。感谢 Daniel Black 的贡献。(缺陷 #18090591,缺陷 #71386)

  • GREATEST()在某些情况下,在 子句中 使用的查询WHERE可能无法返回预期的行或引发虚假错误。(缺陷 #96012,缺陷 #29963278)

  • 明确设置 sort_buffer_size为最大值或接近最大值会导致某些查询因内存不足错误而失败。(缺陷 #95969,缺陷 #29952775)

    参考资料:另请参阅:Bug #22594514。

  • 后期NULL过滤是为了在查找键至少包含一个 时避免索引查找NULL,虽然它是针对前向索引扫描,但并未针对后向索引扫描执行。(缺陷 #95967,缺陷 #29954680)

  • 在函数索引中使用诸如IFNULL() 或之类ABS()的函数会导致错误Value is out of range for functional index...UNSIGNED用作此类函数参数的列包含的值超过相应有符号整数类型的值时。(缺陷 #95881,缺陷 #29934661)

  • IFNULL()函数的解析过程不同于从 CASE运算派生的所有其他函数的解析过程,包括 COALESCE(),这导致为某些数值表达式生成不正确的长度信息。(缺陷 #94614,缺陷 #29463760)

  • 查询使用UNION ALL ... LIMIT 1评估了过多的行,如 Handler_read_key和 所示Handler_read_next。(错误#79340,错误#22292995)

    参考资料:另请参阅:Bug #79040、Bug #22158368、Bug #92994、Bug #28866942。

  • CMake选项被忽略但不应该被忽略 。 如果给出,存储引擎被构建为一个插件。(错误#70859,错误#17772560,错误#30133062)-DWITH_EXAMPLE_STORAGE_ENGINE=1 -DWITH_EXAMPLE_STORAGE_ENGINE=0EXAMPLE

    参考资料:另请参阅:错误 #18324650。