Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.14 的变化(2019-01-21,正式发布)

MySQL 8.0.14 的变化(2019-01-21,正式发布)

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

账户管理注意事项

  • 以前,每个 MySQL 用户帐户都被允许拥有一个密码。MySQL 现在允许一个帐户拥有双重密码,指定为主要密码和次要密码。此功能支持在复杂的多服务器系统中无缝执行分阶段密码更改,而无需停机。为了支持双密码功能, ALTER USERand SET PASSWORD语句现在有一个RETAIN CURRENT PASSWORD子句,当您为帐户分配新的主密码时,将当前密码保存为辅助密码。ALTER USER还有一个DISCARD OLD PASSWORD子句可以丢弃不再需要的辅助密码。请参阅密码管理

    重要的

    双密码能力的实现涉及mysql.user 系统表结构的改变。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade (并重新启动服务器)以合并此系统数据库更改。在此之前,无法更改密码。

审核日志说明

编译笔记

  • 服务器构建的 Boost 库的最低版本现在是 1.68.0。(漏洞#28478497)

组件注释

  • 新的host_application_signal组件服务可用于使组件能够将信号传递给主机应用程序。例如,该服务使复制组件能够向服务器发送关闭信号。

配置注意事项

  • 以前, 服务器(例如,设置 系统变量)和其他程序使用CMake选项。但是,当该值包含单词server时,它不适合被其他程序使用。服务器现在使用新 选项。其他程序继续使用 。(漏洞#28888510)COMPILATION_COMMENT version_commentCOMPILATION_COMMENT_SERVERCOMPILATION_COMMENT

  • .gitignore文件的内容已被清理。该文件的大部分内容是从其 .bzrignore前身继承而来的,并不相关。此清理的一个含义是不允许源内构建。(缺陷 #28341794,缺陷 #91626)

  • MySQL 服务器现在允许专门为管理连接配置 TCP/IP 端口。这为用于普通连接的网络接口上允许的单一管理连接提供了一种替代方法,即使 max_connections连接已经建立。管理网络接口具有以下特征:

    • 仅当 admin_address系统变量在启动时设置为指示其 IP 地址时才启用该接口。如果admin_address未设置,则服务器不维护任何管理界面。

    • 系统admin_port变量指定接口 TCP/IP 端口号(默认 33062)。

    • 管理连接的数量没有限制,但只允许有 SERVICE_CONNECTION_ADMIN 权限的用户连接。

    • 系统 create_admin_listener_thread 变量使 DBA 能够在启动时选择管理界面是否有自己的独立线程。默认是OFF; 也就是说,主界面上普通连接的管理器线程也处理管理界面的连接。

    感谢 Facebook 提出这个想法(并贡献代码,尽管没有使用)。(缺陷 #27847672,缺陷 #90395)

弃用和移除说明

  • 已弃用的resolveipresolve_stack_dump实用程序已被删除,不再包含在 MySQL 发行版中。 可以使用 nslookuphostdig代替resolveip。来自官方 MySQL 构建的堆栈跟踪始终是符号化的,因此无需使用 resolve_stack_dump

SQL 函数和运算符注释

日志记录

  • 一个新的系统变量, log_slow_extra如果启用,会导致服务器将其他字段写入慢速查询日志行,这些日志行提供有关慢速语句的信息。此外, SET 写入日志以指示语句时间戳的行现在使用从语句执行开始的时间,而不是执行结束时的时间。请参阅 慢速查询日志。感谢 Facebook 对此功能所基于的贡献。(漏洞 #27535580,漏洞 #89637)

  • 二进制日志文件和中继日志文件现在可以加密,有助于保护这些文件和其中包含的潜在敏感数据不被外部攻击者滥用,也不会被存储它们的操作系统的用户未经授权查看。

    binlog_encryption您可以通过将新系统变量设置为 来 在 MySQL 服务器上启用加密 ONOFF是默认值。系统变量为二进制日志文件和中继日志文件设置加密。当您首次启动启用加密的服务器时,会在初始化二进制日志和中继日志之前生成一个新的二进制日志加密密钥。此密钥用于为每个二进制日志文件(如果服务器启用了二进制日志记录)和中继日志文件(如果服务器具有复制通道)加密文件密码,并且从文件密码生成的进一步密钥用于加密数据在文件中。

    如果在服务器运行时激活加密,则此时会生成一个新的二进制日志加密密钥,并轮换二进制日志文件和中继日志文件,以便对新文件和后续文件进行加密。如果通过将 binlog_encryption系统变量更改为 来停用加密OFF,则二进制日志文件和中继日志文件会立即轮换,并且所有后续日志记录都是未加密的。以前加密的文件不会自动解密,但服务器仍然可以读取它们。(该SHOW BINARY LOGS 语句现在显示每个二进制日志文件是加密的还是未加密的。)SUPER特权或新的 BINLOG_ENCRYPTION_ADMIN在服务器运行时激活或停用加密需要特权。

    用于文件的加密算法,即 AES(高级加密标准)密码算法,内置于 MySQL 服务器中,无法配置。用于加密日志文件的文件密码的二进制日志加密密钥是 256 位密钥,使用 MySQL 服务器的内置密钥环服务专门为每个 MySQL 服务器实例生成。当前在服务器上使用的二进制日志加密密钥称为二进制日志主密钥。

    binlog_rotate_encryption_master_key_at_startup 系统变量控制二进制日志主密钥是否在服务器重新启动时自动轮换。如果此系统变量设置为ON,则每当服务器重新启动时,都会生成一个新的二进制日志加密密钥并将其用作新的二进制日志主密钥。如果设置为 OFF默认值,则重启后将再次使用现有的二进制日志主密钥。

    请注意,当 MySQL 服务器实例的加密处于活动状态时,只有写入二进制日志文件和中继日志文件的静态数据会被加密。复制事件流中的动态数据,发送到 MySQL 客户端,包括mysqlbinlog, 始终采用未加密格式,因此必须通过使用连接加密在传输过程中对其进行保护。在事务期间保存在二进制日志事务和语句缓存中的正在使用的数据,以及超出这些缓存中可用空间并因此存储在磁盘临时文件中的任何数据,也是未加密格式。当处理事务的线程结束时,临时文件和缓存将被删除。

  • 服务器日志记录行为已针对在处理指定日志记录配置的启动选项之前生成的错误日志消息进行了更改。以前,服务器生成的消息具有默认的时间戳、格式和详细级别;缓冲它们;然后在错误日志配置已知后刷新它们。由于这些早期消息使用默认日志记录配置,因此它们可能与启动选项指定的内容不同。

    现在,服务器缓冲日志事件而不是格式化的日志消息。这使它能够在已知设置后将配置设置追溯应用到这些事件,结果是刷新的消息使用配置的设置,而不是默认设置。有关详细信息,请参阅 错误日志输出格式

优化器注释

  • 以前,派生表和公用表表达式不能包含外部引用。现在允许外部引用。

包装说明

  • Ubuntu 18.10 和 Fedora 29 默认安装 OpenSSL 1.1.1,但 MySQL 并不完全支持 OpenSSL 1.1.1。要安装 MySQL,必须安装 OpenSSL 1.0.2 兼容包。(漏洞#28981868)

性能模式注释

可插拔认证

  • 如果 LDAP 端口号配置为 636 或 3269,插件现在使用 LDAPS(LDAP over SSL)而不是 LDAP。authentication_ldap_sasl_server_port 可以使用或 authentication_ldap_simple_server_port 系统变量设置端口号 。(LDAPS 不同于 startTLS.)(漏洞 #28743563)

  • 以前,对于带代理的 LDAP 身份验证,LDAP 身份验证插件使用 LDAP 服务器返回的第一个组名作为 MySQL 代理用户帐户名。MySQL 帐户的身份验证字符串现在可以按优先顺序指定要匹配的组列表,并且可以选择将匹配的组名映射到指定的 MySQL 代理用户名。请参阅LDAP 可插入身份验证

安全说明

  • 在某些平台(Windows、macOS 和 Generic Linux)上与 MySQL 捆绑的 OpenSSL 库已升级到版本 1.0.2q。在所有其他平台上,MySQL 使用系统安装的 OpenSSL。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。(漏洞 #28988091)

  • 为了影响后续的服务器重启, SET PERSISTand SET PERSIST_ONLY语句使系统变量能够持久保存到mysqld-auto.cnf数据目录中的选项文件中。但是,某些系统变量无法持久化(例如,因为它们涉及敏感数据)。因此,它们不能在运行时从远程管理员进行的会话中设置,因此需要管理员登录到服务器主机并直接修改my.cnf选项文件。

    MySQL 现在允许用户对许多以前不可持久化的系统变量执行运行时管理,以便它们可以在某些限制条件下持久化。要启用此功能,请指定一个 SSL 证书 X.509 Subject 值,表示能够保留这些受限系统变量,并将新 persist_only_admin_x509_subject 系统变量设置为该 Subject 值。使用加密连接连接到服务器并提供具有指定 Subject 值的 SSL 证书的用户然后可以使用 SET PERSIST_ONLY来持久化持久受限的系统变量。有关详细信息,请参阅 非持久性和持久性受限系统变量

  • 对于大多数系统变量,设置会话值不需要特殊权限,任何用户都可以影响当前会话。对于某些系统变量,设置会话值可能会在当前会话之外产生影响,因此是一种受限操作,只能由具有特殊权限的用户完成。以前,either SYSTEM_VARIABLES_ADMINSUPER限定为这样的权限,但这两种权限还允许设置会话变量以外的操作。新 SESSION_VARIABLES_ADMIN权限可以授予用户设置受限会话变量的能力,而无需同时启用其他操作。

    允许的任何操作 SESSION_VARIABLES_ADMIN也被 SYSTEM_VARIABLES_ADMINor 允许SUPER,因此任何已经拥有后一种特权的用户实际上都具有 SESSION_VARIABLES_ADMIN暗示并且不需要 SESSION_VARIABLES_ADMIN 明确授予。但是,如果已授予用户权限 SYSTEM_VARIABLES_ADMINSUPER仅出于使该用户能够修改受限会话系统变量的目的,则管理员可以通过撤销 SYSTEM_VARIABLES_ADMINSUPER授予 权限来减少用户的权限占用SESSION_VARIABLES_ADMIN。有关说明,请参阅 系统变量权限

    这些以前受限的会话变量需要 SYSTEM_VARIABLES_ADMINSUPER但现在也可以设置为SESSION_VARIABLES_ADMIN

    binlog_format
    binlog_row_image
    binlog_row_value_options
    binlog_rows_query_log_events
    debug
    debug_sync
    default_collation_for_utf8mb4
    explicit_defaults_for_timestamp
    gtid_next
    histogram_generation_max_mem_size
    original_commit_timestamp
    sql_log_bin
    sql_log_off
    sql_require_primary_key

    这些以前不受限制的会话变量现在受到限制并且设置它们至少需要 SESSION_VARIABLES_ADMIN(它们也可以由具有 SYSTEM_VARIABLES_ADMIN或 的用户设置SUPER):

    auto_increment_increment
    auto_increment_offset
    binlog_direct_non_transactional_updates
    bulk_insert_buffer_size
    character_set_filesystem
    character_set_database
    collation_database
    pseudo_slave_mode
    pseudo_thread_id
    rbr_exec_mode
    transaction_write_set_extraction

空间数据支持

SQL 语法说明

  • 派生表现在可以在 LATERAL关键字前面指定允许在同一FROM子句中引用(依赖于)前面表的列。用 指定的派生表LATERAL只能出现在一个 FROM子句中,可以出现在用逗号分隔的表列表中,也可以出现在连接规范(JOIN, INNER JOIN, CROSS JOIN, LEFT [OUTER] JOIN, 或RIGHT [OUTER] JOIN)中。横向派生表使某些 SQL 操作成为可能,而这些操作无法使用非横向派生表完成,或者需要低效的变通方法。请参阅 横向派生表

    笔记

    LATERALnow 是一个保留字,不能在没有标识符引用的情况下用作标识符。

线程池注释

  • 线程池插件附带的INFORMATION_SCHEMA表已迁移为可用作性能模式表。这些 INFORMATION_SCHEMA表现在已弃用,并将在未来的 MySQL 版本中删除。应用程序应该从旧表过渡到新表。例如,如果应用程序使用此查询:

    SELECT * FROM INFORMATION_SCHEMA.TP_THREAD_STATE;

    应用程序应改用此查询:

    SELECT * FROM performance_schema.tp_thread_state;

    有关详细信息,请参阅 性能模式线程池表

X 插件说明

  • X 插件现在在其错误处理类中包含 5 位 SQLSTATE 错误代码。以前,SQL 错误会向客户端返回 SQLSTATE 错误代码,但只会公开 MySQL 特定的错误编号。(缺陷号 28735058)

  • 查询文档集合时,如果将布尔值用作 SQL 查询中占位符的参数,则会返回意外结果。现在为布尔值添加了新的翻译专业化,以便在这种情况下可以正确处理它们。(缺陷号 28227037)

  • X 协议现在总是在返回之前 将检索到的数据转换为 utf8mb4字符集(使用 排序规则)。utf8mb4_general_ci(漏洞 #28180155)

  • X 协议现在支持 SQL 准备功能。

添加或更改的功能

  • InnoDB: 禁用该缓冲池页面innodb_buffer_pool_in_core_file 来减少核心文件的大小 InnoDB要使用此变量,core_file 必须启用该变量并且操作系统必须支持对 的MADV_DONTDUMP非 POSIX 扩展 madvise(),Linux 3.4 及更高版本支持该扩展。有关详细信息,请参阅 从核心文件中排除缓冲池页面

    感谢 Facebook 的贡献。(缺陷 #27724476,缺陷 #90144)

  • InnoDB: 默认情况下,撤销日志驻留在两个撤销表空间中,这两个表空间是在初始化 MySQL 实例时创建的。

    可以在运行时使用 CREATE UNDO TABLESPACE语法在选定位置创建其他撤消表空间。

    CREATE UNDO TABLESPACE tablespace_name ADD DATAFILE 'file_name.ibu';

    使用语法创建的撤消表空间 CREATE UNDO TABLESPACE可以在运行时使用 DROP UNDO TABLESPACE语法删除。

    DROP UNDO TABLESPACE tablespace_name;

    ALTER UNDO TABLESPACE语法可用于将撤消表空间标记为活动或非活动。

    ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE};

    显示表空间状态的STATE列已添加到 INFORMATION_SCHEMA.INNODB_TABLESPACES 表中。撤消表空间必须处于empty 可以删除之前的状态。

    以前弃用的 innodb_undo_tablespaces 变量不再可配置,将在未来的 MySQL 版本中删除。

    有关详细信息,请参阅 撤消表空间

  • InnoDB: InnoDB现在支持并行聚集索引读取,可以提高CHECK TABLE性能。此功能不适用于二级索引扫描。innodb_parallel_read_threads 会话变量必须设置为大于 1 的值才能进行并行聚集索引读取。 默认值为 4。用于执行并行聚集索引读取的实际线程数由 innodb_parallel_read_threads 设置或要扫描的索引子树数决定,以较小者为准。

  • InnoDB:语句 的ADD DATAFILE子句 CREATE TABLESPACE现在是可选的,它允许没有 FILE权限的用户创建表空间。在CREATE TABLESPACE 没有ADD DATAFILE 子句的情况下执行的语句会隐式地创建一个具有唯一文件名的表空间数据文件。

  • InnoDB:启用 该 innodb_dedicated_server 变量后,日志文件的大小和数量现在根据自动配置的缓冲池大小进行配置。以前,日志文件大小是根据服务器上检测到的内存量配置的,日志文件的数量不是自动配置的。请参阅 为专用 MySQL 服务器启用自动配置

  • 复制: 在单主模式下运行组时,如果在待应用的待办事项列表中保留事务时选择新的主节点,则对新主节点的读取操作有可能返回陈旧值. 现在,您可以使用 group_replication_consistency 变量来控制组在这种情况下的行为方式。当 group_replication_consistency 设置为EVENTUAL时,即使存在尚未应用的积压,新的主节点也会响应读取请求,这与之前的行为相匹配,并且存在客户端可以在应用任何积压时读取旧值的风险。在此期间写入新主节点失败,因为它有 super_read_only模式启用。当 group_replication_consistency 设置为 时BEFORE_ON_PRIMARY_FAILOVER,任何针对正在从旧主应用积压的新选主的任何新读取或写入查询都将保留,直到应用积压。这确保客户端始终读取他们写入的最新值,但也意味着客户端可能必须等到积压已应用,然后才能从新的主数据库读取。

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

  • Microsoft Windows: 在 MySQL 服务器创建的命名管道上授予客户端的访问控制现在设置为在 Windows 上成功通信所需的最低限度。较新的 MySQL 客户端软件无需任何额外配置即可打开命名管道连接。如果不能立即升级旧的客户端软件,可以 named_pipe_full_access_group 使用新的服务器系统变量为 Windows 组提供打开命名管道连接所需的权限。完全访问组的成员资格应该是受限制的和临时的。

  • 最小服务器 RPM 主要用于 Docker 镜像。为了更好的 Docker 兼容性,该log-error 行已从rpm-docker 配置文件中删除。这样,日志记录会转到 stdout/ stderr,从而可以使用 Docker 自己的接口。(漏洞#28692675)

  • 与创建和删除外键相关的错误消息已得到改进,更加具体和信息丰富。(漏洞 #28526309,漏洞 #92087)

  • ALTER TABLE尝试字符集转换但失败的语句 的错误消息已得到改进,以指示哪个列产生了错误。(漏洞 #27546306,漏洞 #88738)

  • 以前,对于采用数值的命令选项,该值可以带有后缀K, M,或G表示乘数 1024、1024 2或 1024 3。现在,后缀也可以是 T, P, 和 E来表示 1024 4、1024 5或 1024 6的乘数。感谢 Daniel Black 提供的补丁。(漏洞 #27306931,漏洞 #89017)

  • 修改了资源组锁定以提高可伸缩性和性能。(缺陷号 27148580)

  • Group Replication 的 Group Communication System (GCS) 和组通信引擎(XCom,一种 Paxos 变体)现在提供对 IPv6 的全面支持,因此复制组成员可以使用 IPv6 地址替代 IPv4 地址进行内部组通信。如果没有指定手动白名单,则将 IPv6 的本地主机地址和 IPv6 的私有子网地址(唯一本地地址和链路本地单播地址)添加到组复制的自动白名单中以供使用。

    如果复制组的所有成员都处于支持使用 IPv6 地址进行组复制的 MySQL 服务器版本,则该组可以包含使用 IPv6 地址的成员和使用 IPv4 地址的成员的混合。加入成员必须提供与种子成员提供的连接协议相匹配的白名单 IP 地址或主机名,但加入成员的主要标识地址或主机名 ( group_replication_local_address) 可以使用任一协议。如果成员使用解析为 IPv4 和 IPv6 地址的主机名,则 IPv4 地址始终用于组复制连接。

    如果复制组的任何或所有现有成员正在使用较旧的 MySQL 服务器版本,而不支持使用 IPv6 地址进行组复制,则加入成员必须在 group_replication_local_address 选项中提供用于组通信的 IPv4 地址。当每个组成员都升级后,该组就可以迁移到 IPv6 地址。(错误#26088469、错误#27757729、错误#90217)

  • 启动选项 --binlog-row-event-max-size现在有一个相应的系统变量 binlog_row_event_max_size。启动选项和系统变量对基于行的二进制日志事件的最大大小设置了软限制,默认设置为 8192 字节。在可能的情况下,存储在二进制日志中的行被分组为大小不超过此设置值的事件。如果无法拆分事件,则可能会超过最大大小。

    全局系统变量是只读的binlog_row_event_max_size ,只能在服务器启动时设置。因此,它的值只能通过在语句中使用PERSIST_ONLY关键字或 @@persist_only限定符 来修改。SET添加系统变量意味着可以使用 Performance Schema 表或SHOW VARIABLESorSELECT 语句查看此设置。(缺陷 #19985377,缺陷 #74728)

  • MySQL Group Replication 现在可以使用专用输入通道进行通信,作为使用 TCP 套接字的替代方法。新的输入通道使用共享内存在 Group Replication 逻辑和底层组通信引擎(XCom,一种 Paxos 变体)的本地实例之间进行通信。

    以前,与本地 XCom 实例的通信始终使用 TCP 套接字进行,即由 group_replication_local_address 系统变量为每个组成员指定的网络地址。这会产生本地通信不需要的开销,例如通过网络协议栈进行内存复制和数据序列化。一个 TCP 套接字 (group_replication_local_address) 仍然需要每个组成员与远程 XCom 实例进行通信。Group Replication 的 Group Communication System (GCS) 组件现在为每个 Group Replication 任务选择最合适的通信方法,输入通道或 TCP。例如,加入群组的过程需要与远程XCom实例进行通信,因此必须使用TCP。但是,从组中移除成员的过程只需要与本地 XCom 实例通信,因此使用输入通道。尽可能选择输入通道,以最大限度地减少与使用网络机制进行通信相关的开销。

  • 添加了两个新的会话系统变量供复制内部使用。 original_server_versionimmediate_server_version 通过复制拓扑传输与事务关联的 MySQL 服务器版本号来支持跨版本复制。 original_server_version保存最初提交事务的服务器的 MySQL 服务器版本号(例如, 80014对于 MySQL 8.0.14 服务器实例)。 immediate_server_version保存复制拓扑中直接主服务器的 MySQL 服务器版本号。如果这些服务器中的任何一个或复制拓扑中的另一个中间服务器处于不支持这些会话系统变量的旧版本,则它们的值将设置为 0。

    有了这些信息,slave 就可以正确地处理来自旧版本 master 的数据,方法是识别所涉及的版本之间发生语法更改或语义更改的位置并适当地处理这些更改。该信息还可用于组复制环境,其中复制组的一个或多个成员的版本比其他成员更新。可以在每个事务的二进制日志中查看变量的值(作为 的一部分 Gtid_log_event,或者 Anonymous_gtid_log_event如果服务器上未使用 GTID),并且可能有助于调试跨版本复制问题。

  • ALTER TABLE当这些条件适用时,现在可用于更改列字符集(无需重建表):

    • 列数据类型是CHARVARCHARTEXT类型或 ENUM

    • 字符集更改是从utf8mb3utf8mb4,或任何字符集到 binary

    • 列上没有索引。

  • 新的CMake选项定义是否强制在源代码中构建。建议使用外源构建,因为它们允许来自同一源的多个构建,并且可以通过删除构建目录来快速执行清理。要强制进行源内构建,使用 . -DFORCE_INSOURCE_BUILD -DFORCE_INSOURCE_BUILD=ON

修正错误

  • 重要变化:ER_WRONG_VALUE_FOR_VAR当使用 8.0 服务器不支持的 SQL 模式时, 将转储从 MySQL 5.7 服务器导入到运行 MySQL 8.0 的服务器通常会失败 由于 NO_AUTO_CREATE_USER在 MySQL 5.7 中默认启用但在 MySQL 8.0 中不受支持,这可能会经常发生。

    服务器在这种情况下的行为现在取决于 pseudo_slave_mode系统变量的设置。如果这是 false,服务器将拒绝带有 的模式设置ER_UNSUPPORTED_SQL_MODE。如果 pseudo_slave_mode为真,则服务器忽略不支持的模式并给出警告。请注意, mysqlbinlog在执行任何 SQL 之前设置 pseudo_slave_mode为 true。(漏洞 #90337,漏洞 #27828236)

  • InnoDB: 后台清除线程截断撤消日志后,未释放全局和备份元数据锁。(缺陷 #29215254,缺陷 #93901)

  • InnoDB: MySQL 无法在 Solaris X86 上启动。TempTable 存储引擎中的静态线程本地“表”变量未正确初始化。(缺陷号 28987365)

  • InnoDB: 简化了死锁检测期间使用的锁存逻辑。(漏洞 #28904966)

  • InnoDB: 旧版本聚集索引记录的无效记录偏移量引发了调试断言。(缺陷号 28825617)

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

  • InnoDB: 当历史列表的长度超过时施加的最小 DML 延迟 innodb_max_purge_lag从 5000 微秒减少到 5 微秒。(漏洞 #28813453)

  • InnoDB: 当一个线程试图删除表而另一个线程创建加密表空间时,不正确的锁定顺序导致死锁。(漏洞#28774259)

  • InnoDB: ALTER TABLESPACE无法忽略不受支持的表空间属性。(缺陷号 28656611)

  • InnoDB: 简化和优化了隐式到显式锁的转换逻辑。(漏洞#28637472)

  • InnoDB: 片段页面分配失败引发了断言。(漏洞 #28615893)

  • InnoDB: 错误放置的调试点导致刷新的 LOB 页面被视为损坏。(缺陷号 28607368)

  • InnoDB: 存储TempTable引擎错误地在系统临时目录而不是 tmpdir变量定义的目录中创建了临时文件。(漏洞#28598943)

  • InnoDB: 尝试删除与全文搜索辅助表名称相似的表导致断言失败。(缺陷号 28577083)

  • InnoDB:查询 调用的函数UPDATE 没有考虑虚拟列。(缺陷号 28560650)

  • InnoDB: 为缓冲池 zip 哈希互斥体定义了不正确的键。(漏洞#28556539)

  • InnoDB:修改 了涉及 mysql.innodb_table_statsmysql.innodb_index_stats表的后台事务的死锁处理。这些表错误地包含在当内部表包含在死锁循环中时触发的断言中。(漏洞 #28523042,漏洞 #92069)

  • InnoDB: 设置innodb_spin_wait_delay 为高值导致尝试关闭服务器时断言失败。为防止发生此故障,innodb_spin_wait_delay 最大值已减少到 1000。(缺陷 #28489407,缺陷 #91973)

  • InnoDB:ON DELETE CASCADE对具有外键约束和索引虚拟列的表 的(缺陷号 28470805)

  • InnoDB: 涉及虚拟列值的错误写入的 DML 日志引发了断言。(缺陷号 28448853)

  • InnoDB: 在子句RENAME TABLE在 MySQL 数据目录之外创建的表上运行时操作失败DATA DIRECTORY(漏洞#28341514)

  • InnoDB: ALTER TABLE ... EXCHANGE PARTITION允许交换具有不同虚拟列定义的分区,这会在 InnoDB稍后尝试从不存在的虚拟列中读取时导致断言。(缺陷号 28235668)

  • InnoDB: 为事务提交期间发生的重做日志写入和刷新请求添加了一个计数器。日志写入器线程使用计数器来计算连续请求之间的平均时间。当平均时间大于 100 微秒时,日志写入器线程不使用旋转延迟,而是等待具有 10 微秒超时限制的请求事件。

    还修复了可能导致挂起的日志写入器线程实现问题。(错误#28062382、错误#28444247、错误#28616442、错误#90890)

  • InnoDB: 尝试将回滚段添加到未完全初始化的新添加的撤消表空间时引发断言。(漏洞#27914054)

  • InnoDB:操作 后忽略了外键约束 RENAME TABLE。(漏洞 #27453180,漏洞 #89441)

  • InnoDB: 使用该O_DIRECT_NO_FSYNC innodb_flush_method设置可能会由于文件系统元数据变得不同步而导致系统挂起。为防止此问题在 O_DIRECT_NO_FSYNC模式下发生, 在创建新文件后、增加文件大小后和关闭文件后InnoDB调用每次写操作后仍然会跳过系统调用fsync()fsync()(错误号 27309336)

  • InnoDB:使用空字符串 指定CREATE TABLEor 选项未能引发错误,并被解释为默认设置,即. 指定空字符串现在被视为无效并引发错误。(漏洞#27177845)ALTER TABLE ENCRYPTIONENCRYPTION='N'

  • InnoDB:当将表空间数据文件从 Windows 上的 MySQL 实例移动到 启用变量 分区表名称分隔符(分区表名称的#P#或 尝试更改、重命名或优化表时,无法将名称完全转换为小写会导致错误,例如来自存储引擎的‘InnoDB 错误’ ” 。(缺陷号 26925260)#SP#lower_case_table_names

  • InnoDB: 在 64 位 Windows 系统上尝试写入大于 4GB 的表空间文件时出现断言。失败是由于铸件变窄。(错误#26636815,错误#87423)

  • InnoDB: 在尝试创建具有引用分区表的外键约束的表(这是不受支持的操作)后,SHOW ENGINE INNODB STATUS输出错误地报告外键错误,指示无法解析引用的表名。这个错误不再出现,现在返回给客户端的错误信息是外键还不支持与分区结合使用。(漏洞 #25319071,漏洞 #84331)

  • InnoDB: 报告了不支持的外键操作的误导性错误消息,包括创建引用分区表的外键,以及引用使用不支持外键的存储引擎的表。错误消息现在提供了更多信息。(缺陷 #11747571,缺陷 #33027)

  • 分区: 尝试在废弃的表空间上执行即时添加列会导致断言。在这种情况下现在会返回一个错误。(漏洞 #28517843)

  • 分区:ALTER TABLE包含 BLOB或 重复TEXT并不总是得到正确处理。(漏洞 #28491099)

  • 分区: 当分区表使用该选项ALTER TABLE ... EXCHANGE PARTITION有一个或多个分区定义时不起作用 此修复仅支持使用存储引擎DATA DIRECTORY的分区表InnoDB(缺陷号 19730200)

  • 复制: 根据 的值 group_replication_exit_state_action,退出组的成员的行为不一致。为了协调退出组的成员的行为,而不考虑错误情况,现在当成员 group_replication_exit_state_action=READ_ONLY 无意中退出组 super_read_only将恢复成员启动时的模式。这使得行为与具有 的成员的行为一致 group_replication_exit_state_action=ABORT_SERVER。(错误#28971639,错误#28526591)

  • Replication:语句 写入二进制日志的元数据 CREATE TABLE包括表中字符列的字符集信息。以前,当指定mysqlbinlog 选项--print-table-metadata时,会为表打印默认字符集。此默认字符集是表列中出现频率最高的字符集,可能与为表指定的默认字符集不匹配。 mysqlbinlog现在单独打印每一列的字符集。这些列也打印在单独的行上。(漏洞#28774144)

  • 复制:ENUM字符集信息未作为和 SET列 的表元数据的一部分写入二进制日志 现在在 binlog_row_metadata=FULL设置时添加此信息,这会产生扩展元数据。(对于字符列,字符集信息也添加了 binlog_row_metadata=MINIMAL。)(缺陷 #28706307)

  • Replication: 驱逐可疑 Group Replication 组成员之前等待时间的最大超时设置已减少到 3600 秒(一小时)。以前, group_replication_member_expel_timeout 系统变量最多可以设置为 31536000 秒的值。新的上限为从组中删除非活动成员提供了更合理的最大值。超时的默认设置为零,这意味着不活跃的成员将在 5 秒检测期结束后立即被驱逐。指定超时值有助于避免在较慢的网络上进行不必要的驱逐,或者在预期的瞬时网络故障或机器减速的情况下。(缺陷号 28656750)

  • 复制:用于更正二进制日志语句中 标识符引号处理的补丁 ROLLBACK TO SAVEPOINT未正确应用于后续 MySQL 版本。(缺陷号 28569645)

  • 复制: 在 MySQL 5.7.23 中的一个补丁之后,LOAD DATA语句停止了从 MySQL 5.7.22 主服务器到稍后版本的复制从服务器的基于语句的复制。问题现已解决。(漏洞 #28541204,漏洞 #92132)

  • 复制: 在某些情况下,CHANGE MASTER TO如果主信息日志已从表 (master_info_repository=TABLE) 更改为文件 (master_info_repository=FILE),则无法在复制从属服务器上使用该语句。(缺陷号 28529558)

  • 复制: mysqlbinlog错误地添加语句来设置sql_require_primary_key 系统变量(在 MySQL 8.0.13 中引入)以 ON用于涉及 DML SQL 语句的事件。当系统变量设置为时执行的检查 ON仅与创建新表或更改现有表结构的 DDL SQL 语句相关。(漏洞#28524803)

  • 复制:设置或读取 系统变量时 binlog_transaction_dependency_trackingbinlog_transaction_dependency_history_size 所需的锁类型可能会导致死锁情况,因为使用活动二进制日志也需要相同的锁。现在使用一种新的锁类型来代替对事务依赖跟踪系统变量的访问,这样就不会发生这种死锁。(错误#28511326、错误#91941、错误#28537209、错误#92108)

  • 复制: 如果在尚未确定下一个事务的 GTID 值时尝试隐式提交,则会在调试版本中引发断言 (gtid_next=NOT_YET_DETERMINED)。在mysqlbinlog发出 以执行格式描述事件gtid_next后,系统变量立即具有此值 如果接下来尝试使用隐式提交的语句(例如 语句),则 设置不会转换为 状态,而是处于不可接受的状态。如果自动提交打开,则 在尝试语句时也会记录错误。 BINLOGCREATE TABLEgtid_nextAUTOMATICER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON

    为了解决这个问题, BINLOG如果语句会改变 gtid_next. ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION 如果尝试这样做,则会返回错误 。此外,当 GTID 正在使用中且值为gtid_nextis NOT_YET_DETERMINED时,下一条语句必须显式设置gtid_next 为有效值或保持 GTID 状态不受影响。否则 ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON 返回错误。(缺陷 #28490793,缺陷 #91980)

  • 复制:对于已使用mysqlbinlogmove移动到另一个位置的二进制日志文件, 该。此类文件仍列在二进制日志索引文件中,但它们使用绝对路径列出,而不是相对于二进制日志文件通常存储的目录的路径。MySQL 服务器现在可以成功定位和清除移动的二进制日志文件。(缺陷号 28284624)PURGE BINARY LOGS TO 'log_name'

  • Replication:binlog_format设置为 时 MIXED,如果函数包含应用于临时表的 DML 语句,并且还有 DROP TEMPORARY TABLE语句,则函数调用未写入二进制日志,从而导致复制错误。如果函数包含对临时表进行操作的 DML 语句,则函数调用现在以混合复制模式写入二进制日志。(漏洞#28258992)

  • 复制: 如果autocommit对于正在使用并设置了 GTID 的复制从属或组复制组成员设置为 0, super_read_only=ON则未完成的事务会阻止服务器关闭。该事务试图将 GTID 保存到 mysql.gtid_executed表中,但更新失败,因为 super_read_only=ON已设置。(autocommit如果设置为 1,事务将在这种情况下完成,而 mysql.gtid_executed表将在服务器启动时更新。)现在, super_read_only此任务跳过设置检查,因此事务能够将 GTID 保存到mysql.gtid_executedtable 和 complete 无论 super_read_onlyautocommit设置的组合如何。(缺陷号 28183718)

  • 复制: 在 Group Replication 的 Group Communication System (GCS) 使用该systemd-resolved服务进行网络名称解析的系统上,如果无法解析主机名,GCS 会无限期地继续尝试。现在,如果从任何名称解析服务返回重试消息,GCS 会进行有限次数的重试,然后得出主机名无法解析的结论。(缺陷号 28177861)

  • 复制:如果在手动设置值XA ROLLBACK 时为未知事务标识符发出语句, 则会在调试版本中引发断言 如果语句因错误而失败,gtid_next服务器现在不会尝试更新 GTID 状态XA ROLLBACK(缺陷 #27928837,缺陷 #90640)

  • 复制: 如果SELECT... FOR UPDATE在提交或回滚事务后立即发出语句,并且已使用 gtid_next 会话系统变量手动为事务分配了 GTID,则在调试版本中会引发断言。在 gtid_next用于为事务设置 GTID 并且事务已提交或回滚之后,SET GTID_NEXT必须在任何其他语句之前发出另一个显式语句,否则该 gtid_next值未定义。该SELECT... FOR UPDATE语句在这种情况下导致了 GTID 一致性冲突,因为它获取了写锁,尽管它没有进行任何更改。 SELECT... FOR UPDATE在这种情况下,获取写锁的语句现在会返回错误。(漏洞 #27903848,漏洞 #90547)

  • 复制: 在重负载下,二进制日志组提交中的竞争条件可能导致服务器意外停止。事务提交的跟踪已更改以防止出现这种情况。(漏洞#27556117)

  • 复制:语句 返回SHOW SLAVE STATUS的所有现有中继日志文件的总组合大小 (Relay_Log_Space) 的值可能比中继日志文件实际使用的磁盘空间大得多。I/O 线程在更新值时没有锁定变量,因此 SQL 线程可以在 I/O 线程完成值更新之前自动删除中继日志文件并写入减少的值。I/O 线程然后写入其原始大小计算,忽略 SQL 线程的更新并因此为已删除的文件添加回空间。该 Relay_Log_Space值现在在更新期间被锁定,以防止并发更新并确保准确计算。(错误#26997096,错误#87832)

  • 复制: 如果中继日志索引文件被复制从属的备份进程暂时锁定以供查看,并且 MySQL 服务器当时也尝试访问该文件以进行重命名或删除操作,则备份已完成并出现警告,但 MySQL 服务器遇到意外的停顿 MySQL 服务器现在会多次重试文件访问操作,以防出现这种情况或类似情况,并且文件很快就会再次可用。(缺陷号 25839610)

  • 复制:设置后,如果二进制日志 在sync_binlog=1更新二进制日志结束位置之前的提交期间被轮换,则复制在从站上停止,因为服务器试图将旧的二进制日志结束位置与新的二进制日志文件一起使用。服务器现在在更新二进制日志结束位置时将二进制日志文件名与活动二进制日志文件进行比较,因此不会发生此问题。(错误#22252394、错误#25524203、错误#84752)

  • Replication: 在组中添加新成员时,如果认证信息太大而无法传输,则产生一个事件,导致所有组成员失败。为了避免这种情况,现在如果认证信息过大会产生错误,使加入的成员离开群组。(错误#93130、错误#91870、错误#28900691、错误#28443958)

  • 复制: 当在线重新配置组时,例如使用 group_replication_switch_to_multi_primary_mode or group_replication_set_as_primary,停止成员可能会导致意外停止。现在,当您发出 时STOP GROUP_REPLICATION,如果该成员是正在重新配置的在线组的一部分,则组协调员会被告知组复制正在停止。成员等待在线配置过程完成任何正在进行的操作,但任何后续操作都将被取消。(缺陷 #92829,缺陷 #28807260)

  • 复制: 停止复制时,任何具有待处理事务的通道都可能导致组复制中的死锁。(错误#92376、错误#28636768、错误#28365855)

  • Replication:group_replication_exit_state_action 设置为ABORT_SERVER时,Group Replication 插件现在使用 WL#12003添加的新组件服务 来关闭 MySQL。(缺陷 #91793,缺陷 #28401703)

  • 复制: 当您使用 时 group_replication_switch_to_single_primary_mode(),如果同时具有异步通道的成员遇到错误,则异步复制通道未正确停止,服务器可能会意外停止。(缺陷 #91747,缺陷 #28382590)

  • 复制: 可以使用基于组协调器的功能来配置组,例如 group_replication_switch_to_single_primary_mode,当成员处于UNREACHABLERECOVERING状态时,这会导致操作等待所有成员变为 ONLINE。这可能导致组协调器操作永远不会成功完成。现在,如果您在此状态下对组调用这些函数中的任何一个,则会返回错误。ONLINE 在尝试使用这些功能配置组之前,请确保所有成员都是(缺陷 #91537,缺陷 #28284355)

  • 复制: 当一个成员加入一个具有恒定峰值负载的组时,该成员可能无法从状态移动 RECOVERINGONLINE 状态。原因是:

    • 该成员正在循环等待应用恢复期间到达的完整事务队列,而新事务仍在到达。

    • 即使应用了整个队列,成员也会检查应用程序是否已暂停,这在持续的峰值工作负载中不太可能发生。

    现在,当恢复完成策略等待交易被应用时,成员首先等待,直到满足以下条件之一:

    • 要应用的事务适合流量控制配置。也就是说,要应用的事务可以在下一次流控迭代时应用;

    • 在空恢复队列的情况下,没有事务正在排队或应用。

    然后,成员等待group_replication_applier通道中当前排队的事务被应用,然后成员状态变为 ONLINE。(漏洞 #89582,漏洞 #27511404)

  • Microsoft Windows: 删除现有 MySQL 服务失败后,MySQL 安装程序可能会失败。现在这被视为非致命问题,因此安装操作可以继续,但可能需要重新启动系统以允许进行服务清理。(缺陷 #29016677,缺陷 #93048)

  • Microsoft Windows:当mysqld的 多个实例--no-monitor 在同一主机上为同一用户启动时,该 SHUTDOWN命令会关闭错误的服务器进程。--no-monitor此修复通过附加进程的进程 ID创建一个唯一的关闭事件名称以供使用(漏洞#28723675)

  • X DevAPI: 使用 X 协议时,使用用户变量作为OUT参数调用的存储过程未设置变量的值。(缺陷 #91907,缺陷 #28458752)

  • JSON: 对 JSON 对象的迭代导致不必要的字符串分配。(缺陷号 28975640)

  • JSON:将值 转换JSON为文本会导致目标字符串线性增长,从而导致不必要的大量重新分配。现在这个过程使用指数增长来减少所需的分配数量。(漏洞 #28949700)

    参考资料:另请参阅:Bug #103790、Bug #32919524。

  • JSON: YEAR值在 JSON 中存储为不透明数据;当包含值的 JSON 文档YEAR 被转换为文本时,YEAR 值显示为 base64 编码的字符串。为解决此问题, YEAR值现在存储为无符号整数,在转换为文本时显示为数字。YEAR此修复的另一个好处是JSON 文档中的值现在需要更少的存储空间(缺陷号 28947107)

  • JSON: 尝试 包含 列的表上 UPDATE或 (缺陷号 28923281)DELETEARCHIVEJSON

  • JSON: 尝试从表的JSON 列中FEDERATED,服务器返回 Cannot create a JSON value from a string with CHARACTER SET 'binary'ER_INVALID_JSON_PATH_CHARSET

    此外,对包含 列的表既没有影响DELETEUPDATE没有影响 。(缺陷号 28877215)FEDERATEDJSON

  • JSON:即使执行查询的用户对列具有特权, ,表单查询。(漏洞 #23254268)SELECT jt.* FROM t1, JSON_TABLE(t1.c, '$[*]' COLUMNS (num INT PATH '$[0]')) AS jtSELECTc

  • Facebook 为 Bug#27855592 实现的功能贡献的代码已更新。(缺陷号 28950397)

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

  • 在 SuSE Linux 上,不处理EBUSY来自的虚假返回值。pthread_mutex_destroy()(漏洞#28948462)

  • mysqld_safemysqld_multi错误地包含在仅客户端包中。(漏洞#28942508)

  • 主机缓存锁定处理不当可能导致服务器退出。(缺陷号 28936159)

  • audit_log 如果安装了插件, MySQL Enterprise Firewall 将无法正常工作。(漏洞 #28930885,漏洞 #93184)

  • 已进行更正以在 Windows 上的 Visual Studio 下成功构建。(缺陷 #28892711,缺陷 #93077)

  • 服务器允许创建与重做日志文件同名的数据库,这可能会导致意外的服务器行为。这样的名称不再被允许作为数据库名称。(漏洞#28867993)

  • mysqld_multi可能无法将正确的 datadir值传递给 mysqld。(缺陷 #28866662,缺陷 #90801)

  • 在为例程、事件和触发器创建 MDL 密钥期间检查参数架构名称以确保名称为小写的调试断言在遇到包含多字节字符的架构名称时失败。(漏洞#28864244)

  • 改进了一些错误消息的格式说明符以避免显示不正确的数值。(漏洞#28860795)

  • 对于 Windows 上的调试版本,启用了未使用的内存泄漏检查,这可能会减慢关闭过程。这些检查现在只对专门的构建启用。(漏洞#28857626)

  • sql_require_primary_key如果启用了系统变量, mysql_upgrade可能无法升级某些系统表 (缺陷 #28855207,缺陷 #92988)

  • 配置的构建 -DWITH_LIBWRAP=ON未编译。(缺陷 #28853650,缺陷 #92983)

  • 对于表,如果通过使列可为空来更改此函数中引用的列的默认值,则InnoDB依赖于 DEFAULT()函数的存储或索引虚拟生成列的值未正确更新。ALTER TABLE(漏洞 #28848265)

  • /permissive已进行更正以在打开标志 的情况下在 Windows 上的 Visual Studio 下成功构建。(漏洞 #28842878,漏洞 #92943)

  • 配置的构建 -DCMAKE_BUILD_TYPE=Release未编译。(缺陷 #28841366,缺陷 #92945)

  • ALTER TABLE现在可以 INPLACE在以下条件适用时使用该算法:

    • 对于InnoDB表,修改生成的存储列但不更改其类型、表达式或可空性的语句。

    • 对于非InnoDB表,修改生成的存储列或虚拟列但不更改其类型、表达式或可空性的语句。

    此类更改的一个示例是对列注释的更改。(缺陷号 28836543)

  • 重新安装插件时,不会应用已保留的插件系统变量。(漏洞#28823972)

  • EXPLAIN ... FOR CONNECTION可以修改另一个连接的 SQL 模式。(漏洞#28786981)

  • 将 Sun RPC 和 XDR 从glibc单独的libtirpc库中移除会导致libasan某些平台出现问题。(错误#28785835、错误#92762、错误#28897799、错误#93116)

  • ENUM在处理表单查询时比较两个值时 可能会遇到断言, 并且列上有索引。(漏洞#28769996)SELECT a FROM table WHERE b = valueb

  • 对系统变量的并发读写访问 offline_mode可能会导致死锁。(漏洞 #28761869)

  • 从 MySQL 5.7 升级到 MySQL 8.0 时,触发器以错误的顺序加载到内存中,导致断言失败。(缺陷 #28760011,缺陷 #92609)

  • 涉及 Performance Schema data_locks表的连接可能会产生不正确的结果。(漏洞#28733170)

  • 一些涉及使用标量子查询的多重嵌套子查询没有得到正确处理。(缺陷号 28723670)

  • 在 Ubuntu 上,安装的 /etc/mysql/mysql.conf.d/default-auth-override.cnf 文件被错误地创建为可执行模式。感谢 Evgeniy Patlan 的更正贡献。(漏洞 #28714840,漏洞 #92587)

  • GET_LOCK()由于并发连接持有相同的用户级锁而失败的零超时调用 导致内存泄漏 。(漏洞#28714367)

  • 当托管大量表的服务器反复启动和停止时,可能会发生堆损坏和服务器退出。(缺陷 #28705511,缺陷 #92572)

  • MySQL 服务器 MSI 包中缺少 MySQL 路由器。(漏洞#28685556)

  • 示例存储函数 GTID_SUBTRACT_UUID已在代码中更正以匹配记录的版本。(缺陷号 28670170)

  • CAP_SYS_NICELinux 的 MySQL 软件包安装程序不再为mysqld启用功能。(这样做是为了方便资源组线程优先级的使用。)对于需要访问线程优先级的 Linux 部署,请参阅 MySQL 参考手册说明以在资源组限制CAP_SYS_NICE中启用 功能。(缺陷号 28670160)

  • 运营商的内部实施 <=> 得到简化。(缺陷号 28660232)

  • STOP GROUP_REPLICATION 发出从组中删除服务器实例的语句后,服务器实例上记录了错误消息“[GCS] 将消息推送到组通信引擎时出错”的多个 实例。现在,当服务器正在离开组或不再是组成员时,该错误将被忽略。(漏洞 #28658228,漏洞 #92454)

  • 如果CHARACTER SET某些列的属性隐含在 中JSON_TABLE(... COLUMNS ...),则结果列使用全局 character_set_results字符集作为默认字符集。该列现在使用会话 character_set_connectioncollation_connection值。(漏洞#28643862)

  • 在生成行值的表达式上添加功能索引会引发断言;现在它会导致错误。(漏洞#28643252)

  • sql-mode在调试版本中,在设置为 TIME_TRUNCATE_FRACTIONAL导致断言失败 后创建触发器 。SQL 模式不存在于 数据字典表的sql_mode列中 。mysql.triggers(漏洞#28642918)

  • 使用 --log-timestamps=SYSTEM时,日志消息中的 ISO 8601 时间戳未考虑夏令时。(错误#28632725,错误#32893161)

  • error 的参数 ER_IB_MSG_720计算不正确。(漏洞 #28629175)

  • 如果未正确指定用于指定套接字文件的选项,则服务器可能会在启动时退出。(漏洞#28609181)

  • 通过添加与子表具有不同存储引擎的父表,然后将父表更改为与子表相同的存储引擎,可能会创建不一致的外键。(漏洞 #28608460,漏洞 #92317)

  • 当服务器加入复制组时,它会尝试连接到其列表中列出的第一个种子成员 group_replication_group_seeds 系统变量。如果连接被拒绝,加入成员将尝试按顺序连接到列表中的每个其他种子成员。以前,如果加入成员连接到种子成员但没有被添加到复制组,则加入成员不会进行任何进一步的连接尝试。如果种子成员在建立连接后失败,或者如果种子成员在其白名单中没有加入成员的地址并关闭连接,或者如果种子成员拒绝加入成员的加入请求,则可能会出现这种情况。现在,如果加入成员连接到种子成员但没有设法加入该组,加入成员继续按顺序尝试列表中剩余的种子成员。(漏洞 #28602835)

  • 给定特定的分配模式、分配器重新绑定的副本和释放,可以 temptable::Allocator重用已释放的内存块。这导致 Windows 平台上的测试套件失败。(漏洞 #28595557)

  • 设置time_zone为负偏移量和timestamp低值会在更改例程和视图时触发断言。(缺陷 #28590623,缺陷 #92273)

  • pid_file系统变量保留为DEFAULT可能会导致NULL后续服务器启动的值为。(漏洞#28589736)

  • SELECT ... FOR UPDATE不正确的权限检查可能会对在 MySQL 5.7 中成功执行的语句 产生错误 。(漏洞 #28581664,漏洞 #92254)

  • 尝试重命名外键的父列 ALTER TABLE可能会失败。(漏洞#28581468)

  • 的权限RESET PERSIST未正确检查。(漏洞#28564239)

  • 计算时发生溢出 。(漏洞#28562930)AVG(YEAR(datetime_column))

  • 服务器重新启动后,性能模式表中持久化系统变量的路径名variables_info 可能计算不正确。(漏洞#28561584)

  • 分区表名称检查提出了无效断言。(漏洞#28556942)

  • 可以在条件列表中出现错误时调用该handler::create()函数,这可以防止handler::create()正确报告函数中的错误。(漏洞#28556264)

  • 对于ALTER TABLE, ALGORITHM=INSTANT在 8.0.12 之前的 MySQL 版本中创建的表上被错误拒绝。(缺陷 #28554157,缺陷 #92194)

  • mysqlpump 在遇到错误时没有释放所有分配的资源,导致内存泄漏。(缺陷 #28538971,缺陷 #92131)

  • 对于函数子句中的 COLLATE数据类型,属性被拒绝。(缺陷号 28538315)COLUMNSJSON_TABLE()

  • 对于调试版本,服务器可能会在尝试回滚CREATE USER语句时退出。(缺陷号 28536312)

  • 带有符号值的插件变量显示不正确。(缺陷 #28534414,缺陷 #92107)

  • 对已弃用的系统变量的错误处理可能会导致对性能模式 variables_by_thread表的查询输出不正确。(漏洞 #28515475,漏洞 #92049)

  • Thread Sanitizer 发现的数据竞争 Event_queue::lock_dataSAFE_MUTEX实现已修复。(错误#28510721、错误#92041、错误#28510691、错误#92040)

  • ER_NEED_REPREPARE当准备语句的重新准备失败时, 没有诊断被推送到诊断区域。(缺陷 #28509306,缺陷 #92029)

  • 当子查询包含 aUNION时,子查询列数计算错误。(漏洞#28499924)

  • 在使用 评估表达式时WITH ROLLUP,我们现在仅在具有临时表列时才将表达式的结果写入临时表。(错误#28493849,错误#28523014)

  • 对于调试版本, ALTER TABLETEMPORARY表进行不正确的外键错误检查可能会导致服务器退出。(缺陷 #28493257,缺陷 #91990)

  • 对于某些系统变量, SET PERSIST保留默认值而不是指定值。(缺陷号 28466045)

  • SET RESOURCE GROUP无法作为准备好的语句执行。(缺陷 #28448258,缺陷 #91876)

  • 恢复了Item_field::fix_fields() 在执行窗口函数时无意中删除的调用。(漏洞#28431783)

  • X 插件启动和关闭期间 Thread Sanitizer 报告的数据竞争已得到纠正。(漏洞#28407294)

  • 创建分区描述包含非法 utf8 字符的表会引发断言。(漏洞 #28387488,漏洞 #91763)

  • mysqldump输出可能包括已删除的 SQL 模式值。(漏洞 #28373001,漏洞 #91714)

  • 一个潜在的锁定订单周期已得到纠正。(缺陷号 28366531)

  • 在启用 GTID 的服务器上, INFORMATION_SCHEMA.COLUMNS表上的并发语句可能会死锁。(缺陷 #28293047,缺陷 #91548)

  • CREATE TABLE表定义中具有表字符集和文字字符串的表的语句utf32引发断言。(缺陷号 28275881)

  • 添加了内部功能以支持在成功完成服务器升级后更新服务器版本号。(漏洞 #28211486,漏洞 #91323)

  • 使用该函数将日志文件名作为字符串进行比较会 memcmp()导致未初始化的内存读取错误。比较现在使用 strncmp()函数。感谢 Zsolt Parragi 和 Laurynas Biveinis 的贡献。(缺陷 #28178776,缺陷 #90238)

  • 服务器错误处理了仅重音不同的存储程序和资源组名称。(漏洞 #28122841)

  • 在对第二列执行带有LIKE 子句的内部联接时,优化器跳过了复合索引中的第二列。(缺陷号 28086754)

  • CREATE TABLE ... SELECT可以创建具有日期默认值的日期列,而它本应在没有默认值的情况下创建日期列。(漏洞 #28022129)

  • IN对于大量表,子查询谓词到半连接 的转换没有得到正确处理。(漏洞 #28004674)

  • 在执行添加到为窗口函数创建的任何临时表的最后一个的文件排序时,用于从存储引擎读取字段的位图未正确启用。在不需要临时表的情况下,服务器向 select 表的输出添加了一个文件排序,但WHERE 没有添加删除的引用(条件)。现在在这种情况下,当第一个窗口函数需要排序并且在处理此窗口函数之前没有创建临时表时,将引用添加到选择表。(漏洞 #27975193)

  • 在看到范围帧中的一行后,如果后来确定另一行出现在该范围帧之前,服务器将继续检查新行。这导致下一帧计算不正确。(漏洞#27973860)

  • 服务器对SIGHUP信号的错误处理可能导致服务器退出。(缺陷 #27966483,缺陷 #90742)

  • DELETE WHERE a=constant来自具有列的表a并按生成的列的值进行分区b导致调试版本中的断言。(漏洞 #27954073)

  • INFORMATION_SCHEMA更新动态表统计信息时,查询可能会导致服务器退出。(缺陷号 27898108)

  • 打开外键父表时可能会发生元数据锁定死锁。(漏洞#27859086)

  • 帐户管理语句的内存处理不当可能导致服务器行为不当。(漏洞 #27820277)

  • ORDER BY在某些情况下, 窗口函数没有PARTITION BY正确处理。(漏洞#27816506)

  • MySQL 查询优化器将每个要下推到表的谓词标识为表条件;作为此过程的一部分,它会检查表条件中的给定谓词是否已知根据为表选择的访问路径为真,在这种情况下可以安全地删除谓词。

    比如执行时 SELECT * FROM t1 WHERE pk=1,wherepk是表的主键t1ref 选择访问方式。因为我们知道这已经只返回行 ,所以应该消除 pk=1将此条件作为过滤器 ( ) 的进一步评估。Using where

    在优化包含GROUP BYor的查询时ORDER BY,执行后期优化器检查以发现是否可以通过使用排序索引来跳过排序。由于这是在可能已选择另一个索引来访问要排序的表之后完成的,因此可能会过早地删除一些被认为是冗余的谓词(由于先前选择的访问路径)。为了弥补这一点,执行了以下操作:

    • 重建包含先前因已选择访问方法而被消除的谓词的表条件。

    • 执行检查以查看是否存在任何排序索引,以便可以避免排序,可能会修改访问计划。

    出现问题是因为未正确执行以下旨在补救早期谓词删除的操作:

    • 无论访问计划是否被修改,前面提到的重构表条件中添加回的任何额外谓词都成为表条件的永久部分。

    • 当访问计划更改为使用另一个排序索引时,没有对新索引执行任何分析以删除被新索引废弃的谓词。

    存储引擎实现条件下推还存在另一个问题,例如 NDBCLUSTER:下推的条件是在分析之前从表条件生成的,这样,如果稍后更改访问路径,则下推的条件不包含已删除的谓词,使条件下推效率降低。

    这个问题的根本原因 part_of_refkey()是在表的访问方法还没有完全确定之前就对表谓词进行了分析。这是通过删除此类早期分析来解决的。(错误#27808758,错误#27814026)

  • 即使在要查询的表中找到该列 ,包含子句 的窗口函数也会因窗口顺序中的未知字段而失败。(漏洞#27808099)ORDER BY column

  • 执行准备好的语句来执行具有大量占位符的多行插入会消耗过多的内存并且执行速度可能会很慢。(漏洞 #27703912)

  • 在 Windows 上,如果已删除 Visual C++ Redistributable for Visual Studio,则使用 MSI 安装程序卸载 MySQL 会失败。(漏洞#27621546)

  • SET 解析器在触发器定义中接受了可能导致服务器退出的 无效 语句语法。(漏洞#27595603)

  • keyring_encrypted_file如果插件密钥环文件无效 ,则服务器无法启动 。(缺陷号 27588064)

  • 密钥环迁移失败,源和目标密钥环插件分别为keyring_okvkeyring_encrypted_file。(漏洞#27493970)

  • 在调试版本中,使用带符号整数的窗口函数可能会错误处理包含 FOLLOWING. (漏洞#27452365)

  • 当使用设置了标志的过程调用执行准备好的语句时CURSOR_TYPE_READ_ONLY,如果过程执行 SELECT返回空结果集的 a,则客户端库挂起。(缺陷 #27443252,缺陷 #89214)

  • 外键引用列的名称在SHOW CREATE TABLE 输出和 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表中始终以小写形式显示。(缺陷 #27353767,缺陷 #88718)

  • 在执行其他并发活动时加载和卸载audit_log插件可能会导致服务器无响应。(漏洞 #27325622)

  • 修改了数据字典属性接口 ( dd::Properties) 和实现,以提供一种为属性对象定义有效键的新方法。(错误#27309072、错误#89031、错误#27309082、错误#89032)

  • 同时安装和卸载 validate_password组件 SET PASSWORD可能会导致组件故障。(漏洞 #27020979)

  • 服务器源代码中的一些拼写错误是固定的。感谢 Hyunwoo Park 的贡献。(错误#26189673,错误#86565)

  • 在将列权限授予表后, HANDLER READ在权限检查期间断言调用。(缺陷号 25987758)

  • 确保外键定义中引用和引用列类型兼容性的检查已从存储引擎层移至 SQL 层。此外,当列不兼容以及外键约束引用不存在的表时,会生成更好的错误消息。(错误#25722927、错误#28371394、错误#91712、错误#21308781、错误#77467、错误#11746132、错误#23693)

  • 解析器错误地执行了一些内存不足检查。(缺陷号 25633994)

  • 用户管理语句和其他试图直接访问授权表的语句之间的竞争条件可能会导致死锁和事务回滚。(漏洞 #24481240)

  • 当服务器在 skip_name_resolve启用系统变量的情况下启动时,虚假警告可能会写入错误日志,内容是关于忽略主机名部分为 localhost. (事实上​​,这些帐户已被使用且未被忽略。)(Bug #23329861,Bug #81441)

  • 使用的 DML 语句IGNORE并不总是在具有生成列的表上得到正确处理。(缺陷号 22990029)

  • MySQL 现在WHERE在准备过程中移除由常量文字表达式引起的琐碎条件,而不是在优化的后期阶段。这应该会改进包含琐碎条件的外连接查询的计划,例如:

    SELECT * FROM t1 LEFT JOIN t2 ON condition_1 WHERE condition_2 OR 0 = 1

    删除冗余OR 0 = 1 条件后,优化器可以将查询重写为内部联接,如下所示:

    SELECT * FROM t1 LEFT JOIN t2 WHERE condition_1 AND condition_2

    有关详细信息,请参阅MySQL 8.0中的新增功能和 外部连接优化。(错误#16893426、错误#28237111、错误#28239008、错误#28341790)

    参考资料:另请参阅:Bug #28197977、Bug #28240054。

  • BLOB表中列的 更新FEDERATED不起作用。(错误#11748067,错误#34997)

  • 每个函数 REGEXP_REPLACE()、REGEXP_SUBSTR()、REGEXP_LIKE() 和 REGEXP_INSTR() 都返回一个 DOUBLE 而不是函数指定返回类型的值。(缺陷 #90039,缺陷 #27682225)

  • 使用动态范围和索引合并的查询可能使用比预期更多的内存。(缺陷 #89953,缺陷 #27659490)

  • CHAR从具有带排序规则的列 的表中进行选择 NO_PAD会产生不一致的结果。(漏洞 #89753,漏洞 #27578340)