Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.3 的变化(2017-09-21,发布候选)

MySQL 8.0.3 的变化(2017-09-21,发布候选)

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

笔记

这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)

账户管理注意事项

  • CREATE USER现在允许使用一个 DEFAULT ROLE子句来指定帐户默认角色。

    SHOW CREATE USER如果默认不是,现在显示帐户默认角色 NONE。(错误#24670738,错误#82987)

  • MySQL 现在维护有关密码历史的信息,这使得可以限制对以前密码的重用。DBA 可以要求在某些密码更改次数或一段时间内不从以前的密码中选择新密码。可以使用 password_historyand 系统变量全局建立密码重用策略,也可以使用and 语句password_reuse_interval在每个帐户的基础上 建立密码重用策略。与要求定期更改密码的现有密码过期功能一起,新的重用限制功能为 DBA 提供了对密码管理的更完整控制。有关详细信息,请参阅 CREATE USERALTER USER密码管理

    重要的

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

原子 DDL 注释

  • MySQL 现在支持原子数据定义语句 ( atomic DDL )。原子 DDL 语句将与 DDL 操作关联的数据字典更新、存储引擎操作和二进制日志写入组合到一个完全提交或回滚的单个崩溃安全事务中。

    支持表和非表 DDL 语句。与表相关的 DDL 操作需要存储引擎的支持,而非表的 DDL 操作则不需要。目前, InnoDB存储引擎支持原子 DDL。

    • 支持的表 DDL 语句包括 数据库CREATE、表空间、表和索引的 、 和语句,以及 ALTER语句 。 DROPTRUNCATE TABLE

    • 支持的非表 DDL 语句包括:

      • CREATEDROP 语句,以及(如果适用)ALTER 存储程序、触发器、视图和可加载函数的语句。MySQL 8.0.0 中添加了 CREATE TRIGGERAtomic DDL 支持 。DROP TRIGGER

      • 帐户管理报表: CREATEALTERDROP和(如果适用) RENAME用户和角色的报表,以及GRANTREVOKE报表。MySQL 8.0.1 中添加了对帐户管理语句的原子 DDL 支持。

    对于表相关的DDL操作,InnoDB 将DDL日志写入mysql.innodb_ddl_log 数据字典表。启用 innodb_print_ddl_logs 配置选项会将 DDL 恢复日志打印到 stderr.

    原子 DDL 特性改变了一些语句的行为:

    • DROP VIEW如果命名视图不存在且未进行任何更改,则失败并显示错误。以前,该语句返回一个错误,指示哪些视图不存在,但也会删除确实存在的视图。

    • DROP TABLE如果命名表不存在且未进行任何更改,则失败并显示错误。以前,该语句返回一个错误,指示哪些表不存在,但也会删除确实存在的表。

    • DROP TABLE如果所有命名表都使用支持原子 DDL 的存储引擎,则它是完全原子的。

    • DROP DATABASE如果所有表都使用支持原子 DDL 的存储引擎,则它是原子的。但是,从文件系统中删除数据库目录是最后发生的,不是原子事务的一部分。如果由于文件系统错误或服务器停止而导致删除数据库目录失败, DROP DATABASE则不会回滚事务。

    • 使用支持原子 DDL 的存储引擎的表的中断 DDL 操作不再在存储引擎、数据字典和二进制日志之间引入差异,或留下孤立文件。

    • 不再允许部分执行账户管理报表。帐户管理语句要么对所有指定用户成功,要么回滚并且在发生错误时无效。

    DROP TABLEDROP VIEW和帐户管理语句行为的更改对跨版本复制配置有影响。

    有关详细信息,请参阅原子数据定义语句支持。(漏洞 #24620918)

C API 说明

  • MySQL C API 现在允许客户端指定结果集的元数据传输是可选的。抑制元数据传输可以提高性能,特别是对于执行许多查询且每个查询返回几行的会话而言。有关详细信息,请参阅可选结果集元数据

字符集支持

  • MySQL 现在支持 utf8mb4Unicode 字符集的俄语排序规则:

    • utf8mb4_ru_0900_ai_ci不区分重音和区分大小写。

    • utf8mb4_ru_0900_as_cs区分重音和区分大小写。

编译笔记

  • 对于调试版本,如果插件包含在构建中,SAFE_MUTEX编译标志将被禁用。memcached这不再发生; SAFE_MUTEX始终为调试版本启用。由于此更改而发现的一些代码问题已得到纠正。(错误#26442367,错误#87068)

  • EL6 和 EL7 上的二进制包现在使用 Devtoolset 6 而不是 Devtoolset3 和 GCC 6.2.1 而不是 4.9.2 进行编译。(漏洞 #26436968,漏洞 #87061)

  • MySQL 现在针对 Oracle Linux 上的 SPARC 进行编译。(漏洞 #26306331,漏洞 #86745)

  • 使用 Clang 在 macOS 上编译 MySQL 现在需要不同于 8.0 的 Clang 版本,这在某些内联构造方面存在问题。(漏洞 #26279510,漏洞 #86711)

  • 已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。

配置注意事项

数据字典注释

  • 这些INFORMATION_SCHEMA表已重新实现为数据字典表的视图:

    FILES
    PARTITIONS
    REFERENTIAL_CONSTRAINTS

    现在对这些表的查询更加高效,因为它们从数据字典表中获取信息,而不是通过其他更慢的方式。例如,服务器不再必须为表的每个查询创建一个临时 INFORMATION_SCHEMA表。

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以合并这些更改。

弃用和移除说明

  • 复制: 以下过时的mysqlbinlog选项现已弃用,并将在未来的 MySQL 版本中删除:

    • --short-form,可用于测试以将输出限制为单独的语句。

    • --stop-never-slave-server-id--stop-never,它为使用该选项的连接提供了服务器 ID 。如果您需要此功能,请改用该 --connection-server-id 选项。

    这些选项的弃用警告被发送到标准错误,而不是标准输出,因此它们不会干扰使用 mysqlbinlog输出的工具的操作。

  • 复制:sql_log_bin系统变量已 弃用的全局范围 sql_log_bin现在只有会话范围。@@GLOBAL.sql_log_bin应调整 依赖访问的应用程序

  • 这些与加密相关的弃用项目已被删除:

    代替删除的加密函数:对于 ENCRYPT(),考虑使用 SHA2()instead for one-way hashing。对于其他人,请考虑使用 AES_ENCRYPT()and AES_DECRYPT()代替。(缺陷号 26493987)

  • 已弃用的tx_isolationtx_read_only系统变量已被删除。使用 transaction_isolationand transaction_read_only代替。

  • 已弃用的查询缓存已被删除。移除包括以下项目:

    这些不推荐使用的查询缓存项仍然不推荐使用,但没有任何效果,并将在未来的 MySQL 版本中删除:

    • SQL_NO_CACHE SELECT修饰符 。

    • 系统ndb_cache_check_time变量。

    have_query_cache系统变量仍然被弃用,其值始终为 ,NO并将在未来的 MySQL 版本中删除。

  • 该语句 的 deprecatedEXTENDEDPARTITIONS关键字 已被删除。EXPLAIN这些关键字是不必要的,因为它们的效果始终处于启用状态。

  • 未使用date_format的 、 datetime_formattime_formatmax_tmp_tables系统变量已被删除。

  • 已弃用的multi_range_count系统变量已被删除。

  • 已弃用的log_warnings系统变量和--log-warnings服务器选项已被删除。请改用 log_error_verbosity系统变量。

  • 已弃用的secure_auth系统变量和--secure-auth客户端选项已被删除。删除了 C API 函数 的MYSQL_SECURE_AUTH选项 。mysql_options()

  • 已弃用的ignore_builtin_innodb系统变量已被删除。

  • 在 MySQL 8.0.2 中,从属状态日志的系统变量, master_info_repositoryrelay_log_info_repository,默认设置为TABLE而不是 FILE。在 MySQL 8.0.3 中, FILE这两个系统变量的设置都被弃用了,如果使用会发出警告。该 FILE设置将在未来的 MySQL 版本中删除。

    TABLE设置确保复制存储库信息存储在 InnoDB 表中,而不是数据目录中的文件中。表的使用使复制对意外停止具有弹性。

    当存储为文件时,从站状态日志的默认名称是master.inforelay-log.info。可以分别使用--master-info-file--relay-log-info-file选项更改名称。作为 InnoDB 表,从属状态日志被命名为 mysql.slave_master_infomysql.slave_relay_log_info

    要修改正在使用 FILE从属状态日志存储库的现有复制从属存储库以使用TABLE存储库,请通过运行以下命令动态转换现有复制存储库:

    STOP SLAVE;
    SET GLOBAL master_info_repository = 'TABLE';
    SET GLOBAL relay_log_info_repository = 'TABLE';

    master 信息日志表 mysql.slave_master_info应该受到保护,因为它包含连接到 master 的密码。备份复制从属数据时,请确保备份包含从属状态日志的mysql.slave_master_infomysql.slave_relay_log_info表,因为在从从属恢复数据后需要它们来恢复复制。

InnoDB 注释

  • 由于正在进行的外键锁定工作,暂时禁止重命名父外键中的列。这个限制将在 MySQL 8.0.4 中解除。(漏洞 #26334071)

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

日志记录

  • 二进制日志现在默认在服务器启动时启用。系统 log_bin变量默认设置为 ON,而不是 OFF,即使 --log-bin未指定该选项也是如此。二进制日志记录是生产安装的标准做法,因此默认启用它会删除通常需要的配置和计划步骤。

    要禁用二进制日志记录,您可以在启动时指定 --skip-log-bin--disable-log-bin 选项。

    系统server_id变量现在默认设置为 1,而不是 0。对于复制拓扑中的服务器,您仍必须更改此设置以为每个复制服务器指定唯一的服务器 ID。log_bin=ON以前,如果未指定服务器 ID ,则服务器无法启动 。现在,服务器可以启动,但如果您没有设置明确的服务器 ID,则会发出一条警告消息。(从 MySQL 8.0.4 开始,该消息仅供参考。)

    为服务器启用二进制日志记录后,所有更改数据的语句都会记录到服务器的二进制日志中,这是一系列具有基本名称和数字扩展名的文件。默认情况下,服务器会在数据目录中创建二进制日志文件和索引文件。在 MySQL 8.0.3 中,这些文件的默认基本名称是 host_name-bin,使用主机名。从 MySQL 8.0.4 开始,默认基本名称是binlog如果您不提供该--log-bin选项,并且 host_name-bin如果您提供没有字符串或空字符串的选项。

    --log-bin您可以通过指定和 --log-bin-index选项 来选择二进制日志文件和索引文件的名称和位置 。建议您显式指定一个基本名称,这样如果主机名发生变化,您可以轻松地继续使用相同的二进制日志文件名。log_bin_basename系统变量保存二进制日志文件的基本名称和任何指定路径 。

    replication slave上的relay log和relay log index,其名称由 --relay-log--relay-log-index选项指定,不能与binary log和binary log index重名。从 MySQL 8.0.3 开始,如果二进制日志和中继日志文件的基本名称相同,服务器会发出一条错误消息并且不会启动。

    每次启动或刷新日志时,服务器都会在系列中创建一个新的二进制日志文件。服务器还会在当前文件大小达到 后自动创建一个新的二进制日志文件max_binlog_size,默认为最大允许值 1GB。在 MySQL 8.0.3 中,二进制日志文件默认在 30 天后过期,然后可以在启动时或刷新二进制日志时自动删除。您可以使用语句手动清除二进制日志文件 ,或使用 系统变量 PURGE BINARY LOGS指定不同的二进制日志有效期 。binlog_expire_logs_seconds

    许多其他选项可用于修改二进制日志记录的行为。有关详细信息,请参阅 二进制日志二进制日志记录选项和变量

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

优化器注释

  • 优化器现在支持 SET_VAR在单个语句的持续时间内设置系统变量的会话值的提示。例子:

    SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;
    INSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);

    有关详细信息,请参阅优化器提示。(漏洞 #22906815)

  • 优化器现在使用存储在column_statistics数据字典表中的列值直方图统计来构建查询执行计划。直方图的使用适用于涉及将列与常量进行比较的谓词。请参阅优化器统计信息。

  • eq_range_index_dive_limit 以前,除了使用系统变量 外,没有办法跳过使用指数潜水来估计指数的有用性 。现在,在某些查询条件下,单表查询可以跳过索引跳转(请参阅 范围优化)。

  • optimizer_switch系统变量有一个名为的新标志 ,use_invisible_indexes用于控制优化器是否使用不可见索引来构建查询执行计划。如果标志是 off(默认值),优化器将忽略不可见索引(与引入此标志之前的行为相同)。如果标志是 on,不可见索引保持不可见,但优化器将它们考虑到执行计划构造中。

包装说明

  • MySQL Server Docker 映像中缺少mysqlcheck ,这会阻止mysql_upgrade 运行。(错误#26400146,错误#86968)

  • 对于 Debian,非调试二进制文件已从 mysql-server包移动到 mysql-server-core包。(错误#26382333,错误#86899)

  • mysql-community-source 不再生产 Debian/Ubuntu软件包,因为它包含的 MySQL 源代码压缩包由dev.mysql.com. (漏洞 #26201482)

  • 与 MySQL 捆绑的 zlib 库已从 1.2.3 版本升级到 1.2.11 版本。MySQL 在 zlib 库的帮助下实现压缩。

    zlib 1.2.11 中的 zlibcompressBound()函数返回比 zlib 版本 1.2.3 中压缩给定字节长度所需的缓冲区大小略高的估计值。该函数由确定创建压缩表或在压缩表中插入和更新行时允许的最大行大小 的compressBound()函数调用。因此, 在 早期版本中成功的行大小非常​​接近最大行大小的、 和 操作现在可能会失败。为避免此问题,请测试 压缩语句InnoDBInnoDBInnoDBCREATE TABLE ... ROW_FORMAT=COMPRESSEDINSERTUPDATECREATE TABLEInnoDB升级前 MySQL 8.0 测试实例上的大行表。

性能模式注释

  • 从 MySQL 8.0.2 开始,Performance Schema 表定义在服务器内部维护。由于该更改,CREATE TABLEPerformance DROP TABLESchema 表不再可能。(缺陷号 26136994)

  • events_statements_summary_by_digest 表现在为每一行提供了一个示例语句,该语句在该行中生成摘要值。应用程序可以使用此信息作为捕获语句示例的更有效方法,而不是诸如探测 xxx_history_long 表之类的替代方法。后一种方法需要启用相应的 xxx_history_long 消费者,这对于不需要这些表的应用程序来说是额外的开销。有关详细信息,请参阅 性能模式语句摘要和采样以及 语句汇总表

    此外,表的FIRST_SEENLAST_SEENtimestamp 列 events_statements_summary_by_digest 现在有小数秒部分。

  • Performance Schema 表现 setup_instruments在包含工具元数据列:工具属性、工具波动性和描述工具目的的文档字符串。另外,TIMED现在的列可以是NULL,说明仪器不支持计时。请参阅 setup_instruments 表

    新的 Performance Schema setup_threads表公开了检测线程类名称和属性。请参阅 setup_threads 表

插件说明

  • 新的get_sysvar_source插件服务使插件能够检索系统变量设置的来源。

    笔记

    作为这项工作的一部分,用于引用多个 MyISAM密钥缓存的复合部分结构化变量语法已被弃用。请参阅 多个密钥缓存

安全说明

  • 一个新的caching_sha2_password身份验证插件可用。与sha256_password 插件一样,caching_sha2_password实现 SHA-256 密码哈希,但使用缓存来解决连接时的延迟问题。它还支持更多的连接协议,并且不需要针对 OpenSSL 进行链接以实现 RSA 密码交换功能。请参阅 缓存 SHA-2 可插入身份验证

  • 因为启动服务器时 --skip-grant-tables会禁用身份验证检查,所以在这种情况下,服务器还会通过启用来禁用远程连接 skip_networking

服务器管理

  • MySQL 现在支持资源组的创建和管理,并允许将服务器中运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性可以控制其资源,以启用或限制组中线程的资源消耗。DBA 可以根据不同的工作负载修改这些属性。目前,CPU时间是一种可管理的资源,以“虚拟CPU的概念为代表 作为一个术语,包括 CPU 核心、超线程、硬件线程等。服务器在启动时确定有多少虚拟 CPU 可用,具有适当权限的数据库管理员可以将这些 CPU 与资源组相关联并将线程分配给组。有关详细信息,请参阅 资源组

空间数据支持

SQL 语法说明

  • ALTER TABLE现在支持使用语法更轻松地重命名列。请参见 ALTER TABLE 语句。对于更改列名而不是其定义,比需要重新指定当前列定义的更方便。使用 ,如果您不知道定义,则必须查找定义,如果您不准确地重新指定它,则有可能导致数据更改或丢失。(错误#11746522、错误#26949、错误#11747473、错误#32497、错误#11765084、错误#58006、错误#14031617)RENAME COLUMN old_name TO new_nameRENAME COLUMNCHANGECHANGE

X 插件说明

  • --skip-grant-tables使用该选项 启动服务器时无法安装 X 插件。(缺陷号 26516678)

  • X 插件套接字连接工作不正常。(漏洞 #26427112,漏洞 #87019)

  • 从源代码编译 MySQL 时,某些不常用 的CMake参数会导致 X 插件构建出现问题。(漏洞 #26141933)

  • 使用 X 协议的Mysqlx.Connection.CapabilitiesGet请求未返回可用身份验证机制的完整列表。(缺陷号 26044113)

  • 对于混合大小写或大写的模式名称,该语句 list_objects可能会错误地将集合报告为表。(缺陷号 25769683)

  • X 插件从插件列表中省略,以包含用于测试数据目录权限。(漏洞 #24823999)

添加或更改的功能

  • InnoDB:默认情况下禁用 的新innodb_dedicated_server 配置选项可用于InnoDB根据服务器上检测到的内存量自动配置以下选项:

    此选项适用于在专用服务器上运行的 MySQL 服务器实例。有关详细信息,请参阅 为专用 MySQL 服务器启用自动配置

  • InnoDB:ALTER TABLESPACE ... RENAME TO语法 现在支持重命名通用表空间

    ALTER TABLESPACEand 子句已弃用, 将在未来的 MySQL 版本中删除。 DROP TABLESPACE ENGINE

  • InnoDB:InnoDB删除 了与过时的系统表相关的代码INFORMATION_SCHEMA基于 InnoDB系统表的视图被数据字典表的内部系统视图所取代。受影响 InnoDB INFORMATION_SCHEMA的视图已重命名:

    表 1 重命名的 InnoDB 信息模式视图。第一列显示旧名称。第二列显示新名称。

    旧名称 新名字
    INNODB_SYS_COLUMNS INNODB_COLUMNS
    INNODB_SYS_DATAFILES INNODB_DATAFILES
    INNODB_SYS_FIELDS INNODB_FIELDS
    INNODB_SYS_FOREIGN INNODB_FOREIGN
    INNODB_SYS_FOREIGN_COLS INNODB_FOREIGN_COLS
    INNODB_SYS_INDEXES INNODB_INDEXES
    INNODB_SYS_TABLES INNODB_TABLES
    INNODB_SYS_TABLESPACES INNODB_TABLESPACES
    INNODB_SYS_TABLESTATS INNODB_TABLESTATS
    INNODB_SYS_VIRTUAL INNODB_VIRTUAL

    升级到 MySQL 8.0.3 或更高版本后,更新任何引用以前InnoDB INFORMATION_SCHEMA视图名称的脚本。

    INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF 视图提供表空间的空间、名称、路径、标志和空间类型数据 InnoDB

  • InnoDB:InnoDB与全局数据字典集成时,数据字典中的file-per-table表空间名称以innodb_file_per_table_的形式创建x,其中 xInnoDB 表空间ID。为了便于使用,数据字典中的 file-per-table 表空间名称再次与表名称相同。

    从 MySQL 5.7 升级到 MySQL 8.0 时会在数据字典中为MySQL 5.7innodb_table_stats和 表空间名称附加 ,以区别于 MySQL 8.0 对应项。 innodb_index_stats_backup57

  • InnoDB: 默认 innodb_autoinc_lock_mode 设置从 1(连续)更改为 2(交错)。交错锁模式允许并行执行多行插入,从而提高并发性和可扩展性。新的 innodb_autoinc_lock_mode 默认设置反映了从基于语句的复制到基于行的复制作为 MySQL 5.7 中默认复制类型的变化。Statement-based复制需要连续的自增锁模式来保证给定的SQL语句序列的自增值按照可预测、可重复的顺序赋值,而row-based复制对SQL语句的执行顺序不敏感. 有关详细信息,请参阅 InnoDB AUTO_INCREMENT 锁定模式

    对于使用基于语句的复制的系统,新的 innodb_autoinc_lock_mode 默认设置可能会破坏依赖于顺序自动增量值的应用程序。要恢复以前的默认值,请设置 innodb_autoinc_lock_mode为 1。

  • InnoDB: 序列化字典信息 (SDI) 现在存在于所有 InnoDB表空间文件中,临时表空间和撤消表空间文件除外。SDI 是表和表空间对象的序列化元数据。SDI 数据的存在提供了元数据冗余。例如,如果数据字典变得不可用,则可以从表空间文件中提取字典对象元数据。SDI 提取是使用ibd2sdi工具执行的。SDI 数据以 JSON格式存储。

    在表空间文件中包含 SDI 数据会增加表空间文件的大小。SDI 记录需要单个索引页,默认情况下大小为 16KB。但是,SDI 数据在存储时会进行压缩以减少存储占用空间。

  • InnoDB: 默认innodb_flush_neighbors 值从 1 更改为 0,这会禁用缓冲池中相邻页面的刷新。对于寻道时间不是重要因素的非旋转存储 (SSD) 设备,设置为 0 是最佳选择。对于使用旋转存储 (HDD) 的系统,建议将设置更改回之前的默认值 1。

  • InnoDB: 修改了影响缓冲池预刷新和刷新行为的配置选项的默认值:

    • 默认值已更改为 10。之前的 innodb_max_dirty_pages_pct_lwm 默认值 0 会禁用缓冲池预刷新。当缓冲池中的脏页百分比超过 10% 时,值为 10 将启用预刷新。启用预冲洗可提高性能一致性。

    • innodb_max_dirty_pages_pct 默认值已从 75 更改为 90。 尝试从缓冲池刷新数据以 使 InnoDB脏页的百分比不超过此值。增加的默认值允许缓冲池中有更大百分比的脏页。

  • InnoDB: 最小值 innodb_undo_tablespaces从 0 更改为 2。在以前的版本中,如果设置为 0,则系统表空间用于回滚段 innodb_undo_tablespaces。最小值 2 可确保在撤消表空间而不是系统表空间中创建回滚段。有关详细信息,请参阅 撤消表空间

  • 复制;JSON: 添加了 binlog_row_value_options系统变量。目前这个变量可以取消设置,或设置为值PARTIAL_JSON。这导致 MySQL 的基于行的复制对每个更新使用紧凑的二进制日志格式,只修改 JSON 文档的一小部分,并使用 JSON_SET()JSON_REPLACE()JSON_REMOVE()。紧凑格式仅包含 JSON 文档的修改部分,而不是完整文档,用于二进制日志中更新的后映像。如果修改需要比完整文档更多的空间,或者如果无法生成部分更新,则使用完整文档。

    有关详细信息,请参阅变量的描述以及 JSON 值的部分更新

  • 复制:在使用基于 GTID 的复制 ( ) 的IGNORE_SERVER_IDS选项 CHANGE MASTER TO现已弃用gtid_mode=ON使用 GTID,已经应用的事务会被自动忽略,因此不需要此功能。

    在开始基于 GTID 的复制之前,检查并清除之前在相关服务器上设置的所有忽略的服务器 ID 列表。该 SHOW_SLAVE_STATUS语句可以针对单个通道发出,如果有的话,会显示被忽略的服务器 ID 列表。如果没有列表,则该 Replicate_Ignore_Server_Ids字段为空白。

    如果为服务器设置了 ,如果您在语句中包含该选项, gtid_mode=ON现在会发出弃用警告 。如果您在任何通道的现有服务器 ID 设置为 时发出声明,也会发出弃用警告。如果确实收到弃用警告,您仍然可以在设置后通过发出包含 带有空列表 的选项的语句来清除列表。IGNORE_SERVER_IDSCHANGE MASTER TOSET GTID_MODE=ONIGNORE_SERVER_IDSgtid_mode=ONCHANGE MASTER TOIGNORE_SERVER_IDS

  • 复制: 系统log_slave_updates变量现在默认设置为 ON,因此您无需--log-slave-updates 在启动复制从站时明确指定。

    log_slave_updates系统变量是只读的 。如果您需要防止复制从服务器将其 SQL 线程执行的更新记录到它自己的二进制日志中,请 --log-slave-updates=OFF在从服务器启动时指定。

  • 复制:已添加 该 group_replication_communication_debug_options 变量,使您能够动态过滤每个组复制组件(例如 GCS、XCOM 等)的调试和跟踪消息。

  • 复制: 组复制线程状态现在显示在性能模式表中。

  • JSON: 函数JSON_MERGE()重命名为JSON_MERGE_PRESERVE().

    此版本还添加了 JSON_MERGE_PATCH()功能,符合 RFC 7396 的版本 JSON_MERGE_PRESERVE();它的行为与 的行为相同,JSON_MERGE_PRESERVE()但有以下两个例外:

    • JSON_MERGE_PATCH()删除第一个对象中具有第二个对象中的匹配键的任何成员,前提是与第二个对象中的键关联的值不是 JSON null

    • 如果第二个对象的成员的键与第一个对象中的成员匹配,则将第一个对象中 的值 JSON_MERGE_PATCH() 替换为第二个对象中的值,同时将第二个值JSON_MERGE_PRESERVE() 附加到第一个值。

    此示例将合并相同的 3 个 JSON 对象(每个对象都有一个匹配的键"a")的结果与以下每个函数进行比较:

    mysql> SET @x = '{ "a": 1, "b": 2 }',
         >     @y = '{ "a": 3, "c": 4 }',
         >     @z = '{ "a": 5, "d": 6 }';
    
    mysql> SELECT  JSON_MERGE_PATCH(@x, @y, @z)    AS Patch,
        ->         JSON_MERGE_PRESERVE(@x, @y, @z) AS Preserve\G
    *************************** 1. row ***************************
       Patch: {"a": 5, "b": 2, "c": 4, "d": 6}
    Preserve: {"a": [1, 3, 5], "b": 2, "c": 4, "d": 6}

    JSON_MERGE()仍然支持作为 的别名JSON_MERGE_PRESERVE(),但现在已弃用,并可能在未来的 MySQL 版本中删除。

    有关详细信息,请参阅修改 JSON 值的函数。(缺陷 #81283,缺陷 #23255346)

  • InnoDB现在使用 Variance-Aware Transaction Scheduling (VATS) 在系统高负载时调度事务锁的释放,这有助于减少 lock sys wait mutex 争用。当 >= 32 个线程挂在锁等待队列中时,锁调度使用 VATS。

    有关 VATS 的更多信息,请参阅 识别事务延迟差异的主要来源:走向更可预测的数据库

    感谢 Jiamin Huang 的贡献。(漏洞 #25290971,漏洞 #84266)

  • MySQL 现在根据需要将元数据锁扩展到由外键约束相关的表。扩展元数据锁可防止冲突的 DML 和 DDL 操作在相关表上并发执行。此功能还可以在修改父表时更新外键元数据。以前,子表拥有的外键元数据无法安全更新。

    如果一个表被显式锁定LOCK TABLES,则任何与外键约束相关的表现在都会被隐式打开和锁定。LOCK TABLES READ对于外键检查,在相关表上采用共享只读锁 ( )。LOCK TABLES WRITE对于级联更新,在操作中涉及的相关表上采用 无共享写锁 ( )。

    如果LOCK TABLES对于外键关系中的表是活动的, ALTER TABLE ... RENAME则对于该表是不允许的。这是一个临时限制,在 MySQL 8.0.4 中通过 Bug #26647340 的补丁解除了。

  • 以天为单位指定二进制日志有效期的expire_logs_days系统变量现已弃用,并将在未来的 MySQL 版本中删除。expire_logs_days没有为定义二进制日志有效期提供足够的灵活性。

    binlog_expire_logs_seconds可用于设置二进制日志过期时间(以秒为单位)。在 MySQL 8.0.3 中,这两个变量的影响目前是累积的。例如,如果 expire_logs_days为 1 且 binlog_expire_logs_seconds为 43200,则二进制日志每 1.5 天清除一次。binlog_expire_logs_seconds这会产生与设置为 129600 和0相同的结果。 expire_logs_days请注意, 如果未指定expire_logs_days,则当前将默认设置 30 天添加到二进制日志有效期 。expire_logs_daysbinlog_expire_logs_seconds 单独使用,请expire_logs_days=0 明确设置。

    要禁用二进制日志的自动清除,您必须将expire_logs_daysbinlog_expire_logs_seconds 显式设置为 0。

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

  • 一种新型备份锁允许在线备份期间进行 DML,同时防止可能导致快照不一致的操作。LOCK INSTANCE FOR BACKUPUNLOCK INSTANCE语法支持新的备份锁 。使用这些 BACKUP_ADMIN语句需要特权。

修正错误

  • 不相容的变化;JSON: 如果一个 JSON 对象包含多个具有相同键名的成员,MySQL 保留第一个成员并丢弃其余成员。这与 RFC 7159 相矛盾,RFC 7159 建议可以使用此处列出的其中一种方式处理重复的键名:

    • 报告错误(或无法解析对象)

    • 报告所有名称-值对,包括重复项

    • 仅报告最后的名称-值对

    在 JavaScript 中评估 JSON 文本时,如果指定了多个具有相同名称的对,则保留最后一个名称-值对。MySQL 现在也这样做,并实现刚刚列出的三个选项中的最后一个,如下所示:

    mysql> CREATE TABLE t1 (c1 JSON);
    
    mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}');
    
    mysql> SELECT c1 FROM t1;
    +------------------+
    | c1               |
    +------------------+
    | {"x": [3, 5, 7]} |
    +------------------+

    此问题的修复程序还纠正了 MySQL 8.0 服务器中的一个故障,即无法处理插入包含 JSON 数组作为多个相同键的值的数据的 JSON 列。(错误#86620、错误#86866、错误#26238736、错误#26369555)

  • 表现; JSON: 创建 JSON 字符串的表示现在优化了最常见的情况——要处理的字符串不包含需要转义的特殊字符——扫描字符串中的第一个特殊字符,并复制每个字符序列不需要在单个 memcpy()调用中转义,而不是依次检查每个字符以确定它是否需要转义,如果需要则转义它,然后像以前那样一个一个地复制它。

    此修复程序还纠正了无法转义控制字符 \u001f或单位分隔符的问题。(错误#86898、错误#26388690、错误#87722、错误#26780307)

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

  • InnoDB:ON UPDATEON DELETE外键子句 的默认值RESTRICTNO ACTIONNO ACTION是一个标准的SQL关键字,相当于RESTRICT MySQL中的关键字。(漏洞 #30186407,漏洞 #96466)

  • InnoDB:由于内部父表名和子表名的文件名编码导致表 中缺少外键记录 INFORMATION_SCHEMA.INNODB_SYS_FOREIGN ,导致名称超过允许的长度。(漏洞 #27020089)

  • InnoDB:ALTER TABLE执行、DROP TABLEDROP DATABASE操作 时发生了长时间的信号量等待(缺陷号 26779650)

  • InnoDB: 从与表空间导入相关的函数中删除了无效的错误处理代码。(漏洞#26595476)

  • InnoDB: 在 MySQL 5.6 之前创建的 File-per-table 表空间在就地升级到 MySQL 8.0.2 期间导致失败。表空间未按要求注册到 InnoDB SYS_TABLESPACES 系统表。

    由于精度类型不匹配,在 MySQL 5.5 之前创建的具有十进制列的表也会导致在就地升级到 MySQL 8.0.2 期间失败。(漏洞 #26542296,漏洞 #87229)

  • InnoDB: 在安装 MySQL 期间,报告了有关创建外键约束系统表的不必要警告。(漏洞 #26483335)

  • InnoDB:ALTER TABLE由于二级索引条目计数不匹配, 查询在并发操作期间被中断 (漏洞#26381213)

  • InnoDB: 尝试打开在禁用严格模式以包含冲突TABLESPACECOMPRESSION属性时更改的表时发生分段错误。(缺陷号 26375851)

  • InnoDB: 在使用 TempTable 存储引擎的 DML 操作期间发生分段错误。(缺陷号 26363837)

  • InnoDB:操作 期间的隐式行格式转换 ALTER TABLE ... REORGANIZE PARTITION引发了无效断言。(缺陷号 26326611)

  • InnoDB:重建加密表 的ALTER TABLE操作没有正确设置加密属性。(漏洞#26243264)

  • InnoDB: 当使用 TempTable内存内部临时表的存储引擎时,在 Windows 上遇到内存泄漏。(缺陷号 26237680)

  • InnoDB: 在未启用 Valgrind 测试的服务器构建上运行 Valgrind 测试时会产生误导性错误。(错误号 26037206)

  • InnoDB: 与删除孤立的全文搜索表相关的有问题的代码在启动时导致无效的对象 ID 断言失败。(缺陷号 25998362)

  • InnoDB: 在 DML 操作期间检查丢弃的分区仅检查第一个分区。未能检查其他丢弃的分区导致断言失败。(漏洞#25942592)

  • InnoDB: 分配的内存在写入文件之前未初始化,导致 Valgrind 错误。(错误#25913151,错误#85986)

  • InnoDB: 在同一语句中添加虚拟列和索引导致错误。(缺陷号 25899959)

  • InnoDB: 在对具有许多分区的表进行大型更新操作期间,从属实例上出现复制滞后。(错误#25687813,错误#85352)

  • InnoDB: 结束范围比较期间发生故障。(缺陷号 25669686)

  • InnoDB:innodb_buffer_pool_load_now 在只读模式下 启用 向缓冲池加载线程发出信号的事件未初始化。(缺陷号 25586766)

  • InnoDB: 多版本并发控制行搜索功能的游标位置检查引发了断言。(缺陷号 25377592)

  • InnoDB: 错误的变量被传递给 row_mysql_handle_errors导致断言失败的例程。(缺陷号 25183130)

  • InnoDB: 长时间等待全文搜索同步操作持有的字典操作锁导致服务器退出。(错误#24938374、错误#26376681、错误#26376239)

  • InnoDB: 修改了断言代码以说明事务尝试获取记录上的显式锁定而另一个事务在提交操作之前将隐式锁定转换为对同一记录的显式锁定的可能性。(漏洞 #24344131)

  • InnoDB:FLUSH TABLES ... FOR EXPORT对加密或页面压缩表 的 (漏洞 #22916982)

  • InnoDB:DROP TABLE不允许 innodb_force_recovery设置大于 0 的

  • InnoDB:CREATE TABLE ... SELECT提交事务之前删除新创建的表时,操作引发断言失败。(缺陷号 22154768)

  • InnoDB:ALTER TABLE由于重复的约束名称,在未指定外键约束名称的情况下重建表并添加外键 的就地InnoDB没有考虑现有的外键约束名称。这个问题在 MySQL 8.0.3 中得到解决,当时外键元数据被移动到数据字典,外键约束名称生成被移动到 SQL 层。(错误#18199504,错误#71616)

  • InnoDB:InnoDB删除了在外键检查期间 锁定数据字典的错位函数调用 (缺陷 #12917178,缺陷 #62221)

  • InnoDB: 尝试使用现有外键约束名称时报告的错误消息不一致,并不总是提供足够的信息。(缺陷 #11925430,缺陷 #60633)

  • 分区: 在某些情况下,当获取堆记录时,分区 ID 可以设置为零。(缺陷 #86255,缺陷 #26034430)

  • 分区:CREATE TABLE创建分区表失败 的语句可能InnoDB正确回滚。这是由于在执行外键信息检查时进行了无关的提交。由于分区表目前不支持外键,这种检查是不必要的,因此在这种情况下不再进行。(缺陷 #85299,缺陷 #25667278)

  • 分区: 涉及NULL的查询并不总是在由 . 分区的表上得到正确处理 LIST。(错误#76418,错误#20748521)

    参考资料:另请参阅:Bug #86255、Bug #26034430。

  • Replication: 在多线程slave上,由于relay log使用的磁盘空间记录的更新时机,有可能出现死锁状态。更新的时间现已更改,因此不会发生死锁。(缺陷号 26729635)

  • 复制:设置后,死锁可能发生 在 slave_preserve_commit_order=1 持有表共享写锁的事务与提交顺序中较早的也需要共享写锁的事务之间。(漏洞#26666609)

  • 复制: Group Replication 流控制变量现在可以正确地允许您在一个组中拥有一些不影响流控制机制的最小吞吐量的成员,有效地忽略这些成员以防它们被阻塞。(漏洞#26537497)

  • 复制:opt_reckless_slave删除 了未使用的变量(漏洞 #26500285)

  • 复制: 当 Group Replication 插件 Delayed_initialization_thread由于资源不可用而无法启动时,会保留一个锁定的互斥量,这会导致 Delayed_initialization_thread析构函数出现问题。该修复可确保在线程启动失败时解锁互斥量。(缺陷号 26394678)

  • 复制: 在以单主模式部署的 Group Replication 插件延迟初始化的情况下,辅助节点能够通过异步复制通道进行写入,这在 Group Replication 插件的正常初始化中是不允许的。(漏洞#26314756)

  • 复制: 如果选项文件包含与组复制相关的设置,服务器可能会在启动时意外停止。(漏洞#26314472)

  • 复制: FLUSH LOGS在提交阶段已发送错误响应后尝试发送 OK 消息。感谢 Laurynas Biveinis 提供补丁。(错误#26272158、错误#25363745、错误#84437)

  • 复制: 使用为事件日志事件生成的 GTID,无法使用 --slave-skip-errors=1590复制从站上的启动选项跳过 MySQL 错误代码 1590 (ER_SLAVE_INCIDENT)。(缺陷号 26266758)

  • 复制: 在恢复成员上COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE 时设置为不正确的值 group_replication_recovery_complete_at="transactions_certified"(缺陷号 26180350)

  • 复制: 为组复制恢复通道配置时group_replication_recovery_use_ssl 和 ​​的值 group_replication_recovery_ssl_verify_server_cert(漏洞#26142801)

  • 复制: 复制带有索引的分区表时,在HASH_SCAN指定为 slave_rows_search_algorithms 设置一部分的复制从站上,从站 I/O 线程有时会因错误而停止 HA_ERR_KEY_NOT_FOUND。(缺陷号 26137159)

  • 复制: 可以设置 server_uuid为与 相同的值 group_replication_group_name。这样做可能会导致意外行为,因为 GTID 由 UUID 标识。现在无法设置 server_uuid为与 相同的值 group_replication_group_name。(漏洞 #26035931)

  • 复制:供内部服务器使用 的系统变量 pseudo_slave_mode,有时会在事务内部更改时引发断言。服务器不再在事务中更改此变量。(缺陷 #26034192,缺陷 #86250)

  • 复制: 当写集被复制从属(由系统变量指定)用于并行化时 binlog_transaction_dependency_tracking,空事务现在被忽略,并且中继日志轮换的处理得到了优化。(漏洞#25982097)

  • 复制: Performance Schema replication_applier_status_by_worker 表有时会错误地为不活动的工作人员显示 APPLYING_TRANSACTION 的值,因为在工作线程停止之前正在填充该表。(漏洞 #25896166,漏洞 #85951)

  • 复制: 尝试在 START GROUP_REPLICATION执行时卸载插件可能会导致意外行为。(错误#25423650、错误#91042、错误#28088177)

  • 复制: 如果在创建多个从属应用程序工作线程时发生故障,一些线程将被孤立,并且不会收集它们的资源。感谢 Laurynas Biveinis 为修复此错误所做的贡献。(缺陷 #24679056,缺陷 #82980)

  • 复制:binlog_checksum选项不能在事务中更改。当在二进制日志上执行请求的功能时,MySQL 无法记录此语句,正如事务内部所需要的那样。(漏洞 #22914463)

  • 复制: 可以使用组复制流控制选项的无效值启动服务器。现在, --group-replication-flow-control-min-quota--group-replication-flow-control-max-quota--group-replication-flow-control-min-recovery-quota 选项在服务器启动时得到验证。(漏洞 #87206,漏洞 #26531899)

  • 复制: 如果主机名解析不适用于组复制中的成员,则尝试连接时返回的错误是指凭据。改进了错误消息以描述主机名解析问题。(漏洞 #86858,漏洞 #26368004)

  • 复制:当单主模式处于活动状态时 ,组复制插件不再设置 auto_increment_incrementauto_increment_offset(漏洞 #86669,漏洞 #26263155)

  • 复制: 组复制分区线程在性能模式表中不可见。(漏洞 #86626,漏洞 #26241008)

  • 复制: group_replication_force_members 可以在小组工作正常的情况下使用,换句话说,大多数人可以到达。这种不正确的使用可能会导致组的不稳定。因此,它的使用仅限于创建它的场景,用于在无法访问大多数成员时从先前组成员的子集形成新成员。(缺陷 #86359,缺陷 #26093967)

  • 复制: 在同时运行Group Replication和异步复制的成员上,异步复制不遵守Group Replication要求的限制,例如仅使用InnoDB存储引擎,需要主键的表等。对成员运行mysqlbinlog时也可能遇到这种情况现在,运行 Group Replication 和异步复制的成员不允许 Group Replication 的要求被破坏。(漏洞 #85164,漏洞 #25609945)

    参考资料:另请参阅:Bug #85781、Bug #25828806。

  • 复制: 将运行较低版本的成员加入运行较高版本的组会导致运行较高版本的成员无法访问。(缺陷 #85026,缺陷 #25568493)

  • JSON:Json_object JSON 对象和数组 (和 的内部表示中的容器Json_array已更改为使用智能指针而不是指向 的原始指针 Json_dom,因此现在可以自动销毁孤立的 DOM 对象。(漏洞#26161264)

  • JSON:\u001f当 JSON 文档被格式化为字符串(例如,by )时,未引用 JSON 文档中字符串文字中的 ASCII 字符 31(CAST('"\u001f"' AS JSON)。(缺陷号 25977959)

  • JSON: 当 apath_expression标识一个非数组值时,JSON_INSERT()JSON_ARRAY_INSERT()函数无法将path_expression[0] 计算为等于path_expression。(缺陷 #86213,缺陷 #26022576)

  • JSON:使用通配符进行 搜索JSON_EXTRACT()花费了大量时间。(漏洞 #84523,漏洞 #25418534)

    参考资料:另请参阅:Bug #83959、Bug #25151440。

  • 重负载下,Performance Schema buffer container代码出现死循环。(漏洞#26666274)

  • 如果包含头文件,则 MySQL 特定的 typedef(例如ucharmy_bool)会无意中重新引入到客户端名称空间中。mysql.h(错误#26588846、错误#26582752、错误#87337)

  • uint8korr()和相关的宏已修复,因此即使在 x86 上,它们也可以显式地进行未对齐的访问。(错误#26568748,错误#87298)

  • ,main.mysql_upgrade_grant, main.roles-upgradeauth_sec.secure_file_priv_warnings, 测试用例错误处理了错误日志。sys_vars.innodb_redo_log_encrypt_basic测试用例输出不稳定。 感谢 Laurynas Biveinis 提供的补丁。(错误#26562401、错误#87279、错误#26575150、错误#87313、错误#26575142、错误#87314、错误#26582158、错误#87303)

  • 对于调试版本, sql_buffer_result启用递归公用表表达式会导致服务器退出。(缺陷号 26556025)

  • 将窗口函数错误地解析为常量函数可能会导致服务器退出。(漏洞 #26500442)

  • 对于窗口函数,使用GROUP BY ... WITH ROLLUP可能会导致服务器退出。(错误#26497353,错误#26497247)

  • 对于窗口函数,JSON 列提出了断言。(缺陷号 26496733)

  • 对于窗口函数,小于 RANGE框架参数的值会导致服务器退出。(漏洞#26496645)

  • 编译 with-DWITHOUT_SERVER=1导致 my_symlink.c编译失败,因为缺少#includefor my_dir.h. 感谢 Christian Hesse 提供的补丁。(错误#26495816,错误#87137)

  • 假设系统 openssl zlib命令可用,但实际情况可能并非如此。现在检查该命令的可用性,如果不可用, 则构建zlib_decompress实用程序。(缺陷 #26494495,缺陷 #87123)-DWITH_SSL=system -DWITH_ZLIB=system

  • yaSSL 可能错误地执行 TLS 密码协商。(漏洞#26482173)

  • 某些thread_stack设置可能会导致服务器退出。(缺陷号 26438067)

  • 对于窗口函数,ROW框架接受行计数的非整数参数。(缺陷 #26411055,缺陷 #86990)

  • REPLACE(UUID(),...)表达式可以被缓存(不正确地)并为结果集的每一行返回相同的值。(缺陷号 26395601)

  • 在源代码树中构建 MySQL 时,make install将一些CMake文件安装到mysql-test树中的目录中。(缺陷 #26385175,缺陷 #86905)

  • PROCESS_IDPerformance Schemasession_connect_attrssession_account_connect_attrs 表中 的列已从更改INTBIGINT UNSIGNED以适应更大的进程 ID 值。感谢 Daniël van Eeden 提供补丁。(漏洞 #26357806,漏洞 #86835)

  • 生成列上的索引(其值是从 生成的 JSON_EXTRACT())有时在本应被优化器使用时未被优化器使用。(漏洞 #26352119)

  • log_error_services 系统变量设置为NULL导致服务器退出。(漏洞#26331795)

  • 对于tar文件包,一些测试套件共享库安装在服务器包而不是测试包中。(缺陷号 26329850)

  • SHOW COLUMNS对于有效视图可能会失败。(错误#26322203,错误#86778)

  • 导致重命名或删除直方图统计信息的操作可能导致服务器退出。(漏洞 #26303972)

  • 对于VARCHAR列,使用显式排序规则 ( ) 进行排序比使用隐式排序规则(无 子句)慢得多,即使显式排序规则与隐式排序规则相同。(漏洞 #26286790,漏洞 #86710)ORDER BY col_name COLLATE collation_nameCOLLATE

  • SET binlog_format = ROW产生语法错误,因为ROW现在是保留字。现在专门识别此语法以保持向后兼容性。(缺陷号 26269280)

  • SET PERSIST_ONLY, 应该只允许拥有SYSTEM_VARIABLES_ADMINPERSIST_RO_VARIABLES_ADMIN特权的用户使用,但错误地也允许拥有 SUPER特权的用户使用。(缺陷号 26247864)

  • MySQL 8.0.0 中引入的information_schema_stats配置选项已被删除并替换为 information_schema_stats_expiry.

    information_schema_stats_expiryINFORMATION_SCHEMA定义缓存表统计信息 的过期设置 。有关详细信息,请参阅 优化 INFORMATION_SCHEMA 查询

    TABLES_DYNAMIC内部 STATISTICS_DYNAMIC系统视图已删除。(缺陷 #26203731,缺陷 #83957)

  • Debian 平台的源代码包包含预构建的调试二进制文件,导致在除构建这些二进制文件的架构之外的任何架构上构建失败。(缺陷号 26186911)

  • 如果在服务器启动期间使用,可加载函数注册服务将不起作用。(缺陷号 26173244)

  • 通过更改性能模式setup_objects表来禁用表检测可能会导致索引统计信息中的索引名称不正确。(漏洞 #26162562)

  • 尝试删除不存在的表空间文件时返回误导性错误消息。(漏洞 #26133507,漏洞 #86438)

  • 当使用该 选项 运行mysqlbinlog--read-from-remote-server时 ,使用该选项指定的重写规则将 --rewrite-db被忽略,因此数据不会写入目标数据库。(漏洞 #26117735,漏洞 #86288)

  • 在 DDL 操作期间从数据字典缓存复制的时间戳数据使用time_zone 不再有效的值进行转换。生成的时间戳数据不正确,导致发布版本出错和调试版本断言失败。(漏洞 #26091333,漏洞 #86290)

  • 成功的数据字典更新但未能写入二进制日志事件可能会导致不一致的状态。(缺陷号 26037355)

  • mysqlbinlog现在打印事件类型的完整元数据Table_map_log_event。(漏洞 #26020990)

  • ALTER EVENT语句 中的某些字符串函数可能会导致服务器退出。(漏洞 #25942505)

  • 卸载daemon_memcached插件导致严重错误。(缺陷号 25909540)

  • 使用公共表表达式和许多 ?参数的准备好的语句可能会很慢。(漏洞 #25903274,漏洞 #85933)

  • 对于带有 子句的UPDATEor 语句,优化器有时无法识别比 . (漏洞#25899921)DELETEORDER BY ... LIMITfilesort

  • rpl_diff.inc测试用例文件没有发现服务器之间的数据差异 。感谢 Yura Sorokin 提供的补丁。(错误#25860138,错误#85838)

  • ngram 全文解析器搜索查询返回不正确的结果并提出断言。(漏洞 #25851975)

  • 索引虚拟生成列、外键和触发器的组合可能会引发断言。(漏洞 #25817660,漏洞 #85757)

  • 从视图中选择可能会产生不同的结果,具体化启用与具体化禁用。(漏洞 #25782811,漏洞 #85622)

  • 使用SET PERSIST设置 event_scheduler系统变量后,如果使用该 --skip-grant-tables选项启动,服务器无法重新启动。(缺陷号 25776940)

  • 对于调试版本,向具有外键关系的表添加索引可能会引发断言。(漏洞 #25739983)

  • 可以针对 MIN()/MAX() 访问系统表提出断言。(缺陷号 25738624)

  • 该 表从存储引擎而不是数据字典INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 请求外键信息 。InnoDB(缺陷号 25730513)

  • 失败DROP VIEW可以写入二进制日志。(缺陷号 25680097)

  • SHOW CREATE VIEW有时会在原始视图定义中不存在的表名中添加数据库名称前缀。(错误#25634576,错误#85176)

  • Performance Schema variables_info表显示不正确VARIABLE_SOURCE,并且 在or 指令VARIABLE_PATH指定的选项文件中设置了变量值。(漏洞#25563891)!include!includedir

  • 对于基于 UCA 的归类,常量字符串传播可能会失败。(漏洞 #25503965,漏洞 #84837)

  • mysqlpump显示有关转储表数的错误进度信息。(缺陷号 25432850)

  • UCA 9.0.0 归类的计算对于定制包含收缩字符的规则效率低下。(错误#25426632、错误#84577、错误#25426632、错误#84577)

  • GROUP BY DESCon DECIMAL值可能会错误地NULL与非NULL 值分组。(漏洞 #25407964,漏洞 #84537)

  • 一些mysqldump警告进入标准输出而不是标准错误输出,因此被写入转储文件。(错误#25380000,错误#82992)

  • NULL在具有该子句的视图上执行准备好的语句时,作为结果生成的值 WITH ROLLUP被替换为前一行的值。GROUP BY .. WITH ROLLUP(缺陷号 25174118)

  • 当全文搜索结果超出 innodb_ft_result_cache_limit 设置时发生服务器错误。此漏洞的补丁还向后移植了一个相关补丁(漏洞 #21140111)。(缺陷号 25033538)

  • MySQL 8.0.1 中的解析器重构导致某些INSERT ... ON DUPLICATE KEY UPDATE语句的处理不正确。这些问题已得到纠正。(错误#24716127、错误#25526439、错误#25071305)

  • 对于调试版本,具有十六进制格式默认值的或 列的CREATE TABLE 语句导致服务器退出。(漏洞 #24679166,漏洞 #83020)VARBINARYBINARY

  • 如果存储函数被优化器视为常量,则从子句中的NOT IN 条件中的子查询调用它WHERE可能会导致服务器退出。(缺陷号 23577867)

  • 一个mysqldump内存泄漏是固定的。感谢 Yura Sorokin 提供的补丁。(缺陷 #23531150,缺陷 #81714)

  • 当查询使用批处理密钥访问优化并且虚拟生成的列是连接缓冲区的一部分时,可能会导致不正确的结果或服务器退出。(缺陷号 23169112)

  • 如果会话回滚到保存点然后被终止,则可以提交到保存点为止的语句。(错误#22350047,错误#79596)

  • MySQL 接受对外部查询块中定义的聚合表达式的别名的引用,即使引用发生在引用无意义的 GROUP BY 子查询中也是如此。(缺陷 #21974346,缺陷 #78785)

  • 对于使用连接器/Python 并使用sha256_password插件进行身份验证的客户端,服务器可能无法正确处理连接。(漏洞 #21421642)

  • 某些SELECT DISTINCT查询 GROUP BY可能会返回不正确的结果。(缺陷 #20692219,缺陷 #76283)