Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.1 的变化(2017-04-10,发展里程碑)

MySQL 8.0.1 的变化(2017-04-10,发展里程碑)

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

笔记

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

笔记

此版本对 Unicode 字符集支持进行了多项重要更改。特别是,默认字符集已从 更改latin1utf8mb4.

账户管理注意事项

  • 不兼容的更改: 组件和插件现在可以动态定义权限(在运行时),这使它们能够创建专门与它们实现的功能相关联的权限。

    动态权限的实施使 DBA 能够开始从SUPER 权限中迁移出来。在过去,SUPER它与范围广泛且不断增长的各种操作相关联,并非所有操作都相互关联。现在涵盖的许多操作 SUPER还与更有限范围的动态特权相关联,并且该特权由实现该操作的组件或插件注册。以前需要SUPER权限的每个此类操作都可以通过授予关联的动态权限而不是SUPER. 例如,可以授予必须能够修改全局系统变量的用户 SYSTEM_VARIABLES_ADMIN而不是SUPER

    SUPER此更改使 DBA 能够避免授予和定制用户权限,使其更接近允许的操作 ,从而提高了安全性 。SUPER现在已弃用,将在未来的 MySQL 版本中删除。

    动态权限仅适用于全局级别。服务器将有关当前对用户帐户的动态权限分配的信息存储 在系统数据库 mysql.global_grants中的一个新表中 。mysql

    有关详细信息,请参阅 静态与动态权限。该讨论包括将帐户从动态权限迁移 SUPER到动态权限的说明。

    不兼容:SHOW GRANTS不再显示ALL PRIVILEGES在其全局权限输出中,因为在全局级别的含义ALL PRIVILEGES因定义的动态权限而异。相反, SHOW GRANTS明确列出每个授予的全局权限。有关详细信息,请参阅 SHOW GRANTS 语句。处理输出的应用程序 SHOW GRANTS应相应调整。

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

C API 说明

  • 现在实现的 C APIlibmysqlclient包括一个客户端接口,用于从 MySQL 服务器二进制日志中读取复制事件流。有关详细信息,请参阅 C API 二进制日志接口

字符集支持

  • 重要更改: 默认字符集已从 更改 latin1utf8mb4。这些系统变量受到影响:

    因此,新对象的默认字符集和排序规则与以前不同,除非指定了明确的字符集和排序规则。这包括数据库和其中的对象,例如表、视图和存储的程序。保留以前默认值的一种方法是使用文件中的这些行启动服务器my.cnf

    [mysqld]
    character_set_server=latin1
    collation_server=latin1_swedish_ci
  • 基于 UCA 9.0.0 的归类(例如, utf8mb4_0900_ai_ci)的性能得到改进。这些归类现在比任何其他 UCA 归类都快。

    此外, max_length_for_sort_data系统变量默认值已从 1024 增加到 4096。(Bug #24823885,Bug #83319)

  • 字符集的默认排序规则utf8mb4 已从更改 utf8mb4_general_ciutf8mb4_0900_ai_ciutf8mb4_general_ci不能正确处理基本多语言平面 (BMP) 之外的字符。(漏洞#24742157)

  • Unicode 9.0.0 排序规则的 pad 属性从更改 PAD SPACENO PAD。因此,这些归类现在将字符串末尾的空格视为重要字符,就像任何其他字符一样。受影响的排序规则的名称包含字符串 _0900_

    具有 9.0.0 ( ) 归类 的非二进制字符串(CHARVARCHAR和strings)的比较不同于尾随空格的归类。比如,和 比较一样是不同的字符串,不是同一个字符串。例子: TEXTNO PADPAD SPACE'a''a '

    mysql> SET NAMES 'latin1' COLLATE 'latin1_swedish_ci';
    mysql> SELECT 'a' = 'a ';
    +------------+
    | 'a' = 'a ' |
    +------------+
    |          1 |
    +------------+
    mysql> SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';
    mysql> SELECT 'a' = 'a ';
    +------------+
    | 'a' = 'a ' |
    +------------+
    |          0 |
    +------------+

    另请参阅 比较中的尾随空格处理

    INFORMATION_SCHEMA COLLATIONS表现在有一 PAD_ATTRIBUTE列指示每个排序规则的 pad 属性。

    涉及早期权重字符串截断的归类问题latin1_de已得到纠正。唯一可能的影响是 WEIGHT_STRING()函数结果。

  • utf8mb4作为对 MySQL 8.0.0 早期工作的补充,为Unicode 字符集 添加了不区分大小写和不区分重音的排序规则,添加了新的区分大小写和区分 重音的排序规则。通用归类被命名为 utf8mb4_0900_as_cs,并且存在具有类似于的特征的特定于语言的归类, utf8mb4_0900_as_cs除了特定于语言的规则在适用的情况下优先。特定于语言的归类由归类名称中的 ISO 639-1 语言代码指示,如下表所示。在两种情况下,语言代码有一个附加项表示变体(德语电话簿顺序,繁体西班牙语)。

    笔记

    utf8mb4_ja_0900_as_cs是 MySQL 中第一个可用于 Unicode 的日语特定排序规则。

    表 2 utf8mb4 UCA 9.0.0 语言特定排序规则

    校对
    克罗地亚语 utf8mb4_hr_0900_as_cs
    捷克语 utf8mb4_cs_0900_as_cs
    丹麦语 utf8mb4_da_0900_as_cs
    世界语 utf8mb4_eo_0900_as_cs
    爱沙尼亚语 utf8mb4_et_0900_as_cs
    德国电话簿订单 utf8mb4_de_pb_0900_as_cs
    匈牙利 utf8mb4_hu_0900_as_cs
    冰岛的 utf8mb4_is_0900_as_cs
    日本人 utf8mb4_ja_0900_as_cs
    拉脱维亚语 utf8mb4_lv_0900_as_cs
    立陶宛语 utf8mb4_lt_0900_as_cs
    抛光 utf8mb4_pl_0900_as_cs
    古典拉丁语 utf8mb4_la_0900_as_cs
    罗马尼亚语 utf8mb4_ro_0900_as_cs
    斯洛伐克语 utf8mb4_sk_0900_as_cs
    斯洛文尼亚语 utf8mb4_sl_0900_as_cs
    现代西班牙语 utf8mb4_es_0900_as_cs
    传统的西班牙语 utf8mb4_es_trad_0900_as_cs
    瑞典 utf8mb4_sv_0900_as_cs
    土耳其 utf8mb4_tr_0900_as_cs
    越南语 utf8mb4_vi_0900_as_cs

    utf8mb4_0900_as_cs也可用作下表中语言的区分重音、区分大小写的排序规则。

    表 3 utf8mb4_0900_as_cs 适用的语言

    语言名称 语言代码
    德语(字典顺序)
    英语
    法语(语言环境 fr_FR) fr
    爱尔兰盖尔语
    印度尼西亚 ID
    意大利语
    卢森堡语
    马来语 小姐
    荷兰语 荷兰
    葡萄牙语
    斯瓦希里语 开关
    祖鲁语

    utf8mb4_0900_as_cs适用于法语法语 (locale fr_FR) 但不适用于加拿大法语 (locale fr_CA)。对于加拿大法语来说, utf8mb4_0900_ai_ci是合适的。ai_ci和 归类之间存在差异的原因as_cs是加拿大法语的重音字符顺序与法语法语不同。

    utf8mb4_da_0900_as_cs也可用作下表中语言的区分重音、区分大小写的排序规则。

    表 4 utf8mb4_da_0900_as_cs 适用的语言

    语言名称 语言代码
    挪威
    挪威语 注意事项
    挪威新诺斯克语 nn

    非语言特定utf8mb4_0900_as_cs 和语言特定的 Unicode 排序规则各自具有以下特征: utf8mb4_LANG_0900_as_cs

    • 归类基于 Unicode 归类算法 (UCA) 9.0.0 和通用语言环境数据存储库 (CLDR) v30,区分重音和区分大小写。这些特征在归类名称中由_0900_as和表示。_cs例外: utf8mb4_la_0900_as_cs不是基于 CLDR,因为 CLDR 中没有定义古典拉丁语。

    • 该排序规则适用于 [U+0, U+10FFFF] 范围内的所有字符。

    • 如果排序规则不是特定于语言的,它会按默认顺序(如下所述)对所有字符(包括补充字符)进行排序。如果排序规则是特定于语言的,它会根据特定于语言的规则正确地对语言中的字符进行排序,并且按照默认顺序对不属于该语言的字符进行排序。

    • 默认情况下,归类根据表中分配的权重值对具有 DUCET 表(默认 Unicode 归类元素表)中列出的代码点的字符进行排序。排序规则使用隐式权重值对 DUCET 表中没有列出代码点的字符进行排序,该权重值是根据 UCA 构造的。

      归类对所有三个 DUCET 权重级别进行排序,包括第三级别。这与不区分重音、不区分大小写的归类相比,后者仅在主要和次要级别上排序。

    • 对于非特定语言的归类,收缩序列中的字符被视为单独的字符。对于特定于语言的归类,缩写可能会更改字符排序顺序。

    有关详细信息,请参阅 Unicode 字符集

编译笔记

  • Incompatible Change:my_bool类型不再在 MySQL 源代码中使用。任何使用此类型表示 C 布尔变量的第三方代码都应改用 boolorintC 类型。

    笔记

    my_bool到 的更改bool意味着 mysql.h头文件现在需要 C++ 或 C99 编译器才能编译。

    (缺陷号 25597667)

  • InnoDB: 一个 LOB 页面删除函数无法删除 LOB 页面。(缺陷号 24480254)

  • Windows 构建现在使用默认运行时库(构建使用/MD标志)。(漏洞#25611609)

  • CMake添加了对使用 Developer Studio 12.6 进行编译的支持。(缺陷号 25384295)

  • MySQL 发行版中包含的 rapidjson 库已升级到 1.1.0 版。(缺陷 #24947436,缺陷 #83515)

  • 服务器构建的 Boost 库的最低版本现在是 1.63.0。(错误#24579061、错误#82834、错误#25126144、错误#83905)

  • 对于高于 4.4 的 GCC 版本, -fno-expensive-optimizations已替换为 -ffp-contract=off,这具有启用更多优化的效果。感谢 Alexey Kopytov 提供的补丁。(漏洞 #24571672,漏洞 #82760)

  • 为了构建 MySQL 8.0, CMake的最低要求版本现在在 Windows 上是 3.2.3,在 Solaris 上是 3.4.0,在其他情况下是 2.8.12。(错误#24481181,错误#82628)

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

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

配置注意事项

  • 在源代码发行版中, extra目录中以前的几个实用程序已移至新 utilities目录。(漏洞#25416084)

  • 两个新的CMake选项可用于调试。LINK_RANDOMIZE 指示是否随机化 mysqld二进制文件中符号的顺序(默认值OFF),并LINK_RANDOMIZE_SEED为 指定一个种子值LINK_RANDOMIZE。(缺陷号 25336715)

  • 如果同时给出了-DENABLE_DEBUG_SYNC=OFFAND ,则 MySQL 无法编译 。-DWITH_DEBUG=ONENABLE_DEBUG_SYNC选项已被删除并启用WITH_DEBUG调试同步。(漏洞 #18374703)

  • 这些更改是针对持久化系统变量进行的:

    • 一个新的语句,RESET PERSIST允许删除持久保存 到存储持久全局系统变量设置 SET PERSIST的 文件的变量设置。mysqld-auto.cnf

    • 使用SET PERSIST(or @@PERSIST.) 将全局变量设置为DEFAULT变量文字默认值或设置为变量文字默认值之前还为 mysqld-auto.cnf文件添加了变量设置(如果不存在),或者如果存在则将其删除 mysqld-auto.cnf。现在赋值总是将变量的设置添加到 mysqld-auto.cnf文件中;要从文件中删除设置,请使用RESET PERSIST.

    • 一个新的性能模式表, 为文件persisted_variables提供了一个 SQL 接口mysqld-auto.cnf ,使文件内容能够在运行时使用SELECT语句进行检查。

    • Performance Schema variables_info表有新列显示每个系统变量最近设置的时间和用户。

    有关详细信息,请参阅 持久化系统变量RESET PERSIST 语句

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

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

  • 系统变量的默认值 query_cache_size已从 1M 减少到 0。因此默认情况下不分配查询缓存缓冲区。

连接管理说明

  • MySQL 服务器现在包括一个插件库,使管理员能够在一定数量的连续连接尝试失败后增加服务器对客户端的响应延迟。此功能提供了一种威慑力,可以减缓试图访问 MySQL 用户帐户的暴力攻击。有关详细信息,请参阅 连接控制插件

数据字典注释

  • SQL 层代码和存储引擎 API 被扩展以提供数据字典支持:

    • 存储有关 InnoDB隐式添加到表的辅助列和键的信息,表和表空间的存储引擎私有数据和对象标识符,以及InnoDB全文搜索辅助表和其他类似的隐式创建的对象。

    • 将 DDL 操作的数据字典更新、存储引擎更改和二进制日志写入组合到原子事务中。

    DROP TABLE 如果任何命名表不存在,则会发生 行为更改。以前,该语句返回一个错误,指示哪些表不存在并且无法删除,但也会删除确实存在的表。现在该语句仍然指示哪些表不存在,但会因错误而失败并且未进行任何更改。

    有关详细信息,请参阅原子数据定义语句支持WL#7743

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

    EVENTS
    PARAMETERS
    ROUTINES
    TRIGGERS

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

    这些表的改进也适用于 SHOW显示与 INFORMATION_SCHEMA表对应的信息的语句。例如, 显示与表格 SHOW TRIGGERS相同的信息。TRIGGERS

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

弃用和移除说明

  • 不相容的变化;创新数据库;分区:ALTER TABLE ... UPGRADE PARTITIONING 不再支持 该

  • 已弃用的PROCEDURE ANALYSE()语法已被删除。

  • 已弃用的libmysqld嵌入式服务器库已被删除,同时还有:

    • mysql_config --libmysqld-libs--embedded-libs--embedded选项 _

    • CMake WITH_EMBEDDED_SERVERWITH_EMBEDDED_SHARED_LIBRARYINSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR 选项 _

    • (未记录的)mysql --server-arg选项

    • mysqltest --embedded-server--server-arg--server-file选项 _

    • mysqltest_embeddedmysql_client_test_embedded 测试程序

  • 已弃用的--temp-pool服务器选项已被删除。

  • 已弃用的替换实用程序已被删除。如果您希望继续使用此实用程序,请确保在升级到当前版本之前保留已安装 MySQL 版本的副本。

  • 解析器不再将 SQL 语句视为\N同义词NULL。改用 NULL

    此更改不会影响使用 或 执行的文本文件导入或导出操作LOAD DATASELECT ... INTO OUTFILE因为它们NULL继续由 表示\N。参见 LOAD DATA 语句

  • 已删除对 DTrace 的支持。

优化器注释

  • InnoDB: MySQL 现在支持降序索引:DESC 在索引定义中不再被忽略,但会导致按降序存储键值。以前,可以按相反顺序扫描索引,但会降低性能。降序索引可以正向扫描,效率更高。当最有效的扫描顺序混合了某些列的升序和其他列的降序时,降序索引还使优化器可以使用多列索引。有关详细信息,请参阅 降序索引

    笔记

    以前,GROUP BY默认情况下隐式排序(即,在没有ASCor 列DESC指示符的情况下GROUP BY),但依赖于隐式GROUP BY排序已被弃用。GROUP BY不再默认排序,因此查询结果可能与以前的 MySQL 版本不同。要生成给定的排序顺序,请对列使用显式ASCDESC指示符GROUP BY或提供ORDER BY 子句。

  • 优化器跟踪输出现在包含有关 filesort操作的更多信息,例如密钥和有效负载大小以及未打包插件字段的原因。(漏洞 #25246184,漏洞 #84180)

  • 以前,仅 InnoDB存储引擎支持不可见索引。不可见索引现在是存储引擎中立的(任何引擎都支持)。(漏洞#23541244)

  • 引入了一个GROUPING()函数用于GROUP BY包含WITH ROLLUP修饰符的查询。此函数使您能够区分NULL查询结果中超级聚合行的 NULL值与常规分组行中的值。有关详细信息,请参阅杂项函数GROUP BY 修饰符。感谢 Zhe Dong 提供的补丁,部分用于实现此功能。

    笔记

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

    (错误#11754449、错误#46053、错误#11745963、错误#21728)

  • 优化器现在支持 INDEX_MERGENO_INDEX_MERGE提示影响索引合并访问方法的使用。例子:

    SELECT /*+ INDEX_MERGE(t1 f1, f2, f3) */ f2 FROM t1
      WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;
    SELECT /*+ NO_INDEX_MERGE(t1 f2, f3) */ f1 FROM t1
      WHERE (f2 = 5 OR f3 = 'c') AND (f1 = 4 OR f4 = 'f');

    有关详细信息,请参阅 索引合并优化优化器提示

  • 系统数据库中的优化器成本模型表现在包含一个 server_cost列 ,engine_cost其中包含每个成本表估计的默认值。此列是一个只读的生成列,即使关联的成本估算发生更改,它也会保留其值。有关详细信息,请参阅 优化器成本模型mysqldefault_value

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

  • 在优化器成本模型engine_cost 表中,内存访问成本相对于磁盘访问成本有所降低。此更改的含义是执行计划可能会在同一查询的两次运行之间发生变化。例如,在数据被读入缓冲池之前的服务器启动时,您可能会得到与查询运行后不同的计划,因为那时数据将在内存中。

  • MySQL 现在支持非递归和递归的公用表表达式。公用表表达式允许使用命名的临时结果集,通过允许在 语句和某些其他语句WITH之前的子句 来实现。SELECT有关详细信息,请参阅 WITH(公用表表达式)

    笔记

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

  • 优化器现在支持启用指定连接表顺序的提示。有关详细信息,请参阅 优化器提示

包装说明

  • Microsoft Windows: 提醒: MySQL 8.0 需要 Microsoft Visual C++ 2015 Redistributable Package 才能在 Windows 平台上运行。用户在启动服务器之前应确保该软件包已经安装在系统上。该包可从 Microsoft 下载中心获得。

  • RPM 包结构的更改需要删除更多的包才能干净地安装 MySQL 服务器。(漏洞 #25603087)

  • 为了避免潜在的竞争条件,Debian 软件包现在使用 GNU安装实用程序,而不是mkdirtouchchown的组合。(缺陷号 25258829)

  • 新的 Debian/Ubuntu 软件包命名server-coreclient-core现已可用。这些包仅包含二进制文件,不包含配置或服务脚本、目录设置、手册页等。它们与标准包一起自动安装,但是当它们自己安装时不会导致正常运行的 MySQL 安装程序。希望定制自己的安装设置的用户可能会对它们感兴趣。(缺陷号 25146364)

  • scripts/mysql_security_commands.sql并且 support-files/mysql.server-sys5.sh不再使用并已从 MySQL 发行版中删除。(错误#24756400,错误#24756442)

  • RPM 包现在是 -DWITH_NUMA=ON为支持 NUMA 的平台构建的:OEL 高于 EL5、Fedora、SLES、Docker。(缺陷号 24689078)

  • my-default.cnf.sh文件(用于生成默认值my-default.cnfmy-default.ini文件)不再包含在源代码分发中my-default.cnfmy-default.ini也不再包含在分发包中或由分发包安装。(缺陷号 22525354)

  • 未使用和未记录的archive_readerarchive_test实用程序已从 MySQL 源代码分发中删除。(漏洞 #12818207,漏洞 #62014)

性能模式注释

  • 性能模式维护语句事件摘要表,其中包含有关最小、最大和平均语句延迟的信息。这些表允许对系统性能进行高级评估。为了允许在更细粒度的级别进行评估,性能模式现在还收集语句延迟的直方图数据。这些直方图提供了对延迟分布的额外洞察,可在以下表格中找到:

    有关详细信息,请参阅 语句直方图汇总表

    此外,该 表现在events_statements_summary_by_digest 包含提供有关语句延迟的百分位数信息的列。有关详细信息,请参阅 报表汇总表

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

  • 系统和状态变量信息不再在INFORMATION_SCHEMA. 这些表已被删除:GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS。请改用相应的性能模式表。请参阅 性能模式系统变量表性能模式状态变量表。此外,show_compatibility_56系统变量已被删除。它在过渡期间使用,在此期间,表中的系统和状态变量信息 INFORMATION_SCHEMA被移动到 Performance Schema 表,并且不再需要。这些状态变量已被删除: Slave_heartbeat_period, Slave_last_heartbeat, Slave_received_heartbeats,, . Slave_retried_transactions_ Slave_running他们提供的信息在 Performance Schema 表中可用;请参阅 迁移到性能模式系统和状态变量表

  • 已弃用的INFORMATION_SCHEMA INNODB_LOCKSINNODB_LOCK_WAITS表已被删除。要获取InnoDB数据锁定信息,请改用 Performance Schemadata_locksdata_lock_waits表。或者,使用sys模式 innodb_lock_waitsx$innodb_lock_waits视图,它们已经重新实现以使用新的性能模式表而不是删除的INFORMATION_SCHEMA 表。

    Performance Schema 表公开存在哪些数据锁,哪个事务持有每个锁,以及哪些事务锁请求被其他锁阻塞。对于 InnoDB,该 data_locks表报告所有数据锁,而该INNODB_LOCKS表仅报告等待数据锁,有关详细信息,请参阅数据锁和 数据锁等待。有关将旧表列映射到新表列 的信息,请参阅 INFORMATION_SCHEMA INNODB_LOCKS 表INFORMATION_SCHEMA INNODB_LOCK_WAITS 表

    这些表所需的权限不同:这些 INFORMATION_SCHEMA表需要全局 PROCESS权限。Performance Schema 表需要通常的 Performance Schema 权限SELECT才能从中选择表。

    sys模式 innodb_lock_waitsx$innodb_lock_waits视图可以在不更改的情况下使用,但包含组合模式/表名称值的 列已被删除并 locked_table替换为 包含单独模式和表名称值的列。此外,这些视图现在包含和 列。有关详细信息,请参阅innodb_lock_waits 和 x$innodb_lock_waits 视图locked_table_schemalocked_table_namelocked_table_partitionlocked_table_subpartition

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

插件说明

  • MySQL Server 8.0 包括一个基于组件的基础架构,用于提高服务器的可扩展性;请参阅 MySQL 组件。然而,MySQL 插件使用的接口早于组件接口。新的插件服务,plugin_registry_service使插件能够访问组件注册表及其服务。

安全说明

  • 不兼容的更改: 对于STANDALONEWIN 构建,默认 secure_file_priv值已从空字符串更改为NULL. 这是默认安全设置,因为它会禁用导入和导出操作。要允许这些操作,请设置 secure_file_priv为用于这些操作的目录的路径名。(错误#24679907、错误#24695274、错误#24707666)

  • 不兼容的更改: 这些更改是对mysqld_safe进行的:

    • mysqld_safe中 不安全地使用rmchown 可能会导致特权升级。 chown now 只能在目标目录为. 一个不兼容的变化是,如果 Unix 套接字文件的目录丢失,则不再创建它;相反,会发生错误。由于这些更改, /bin/bash需要 在 Solaris 上运行mysqld_safe 。/bin/sh仍在其他 Unix/Linux 平台上使用。 /var/log

    • --ledir选项现在仅在命令行中被接受,而不是在选项文件中。

    • mysqld_safe忽略当前工作目录。

    其他相关变化:

    • 调用 mysqld_safe的初始化脚本显式传递 --basedir

    • 仅当基本目录为/var/log或 时,初始化脚本才会创建错误日志文件/var/lib

    • 删除了 SLES 未使用的 systemd 文件。

    (错误#24483092、错误#25088048、错误#25378439、错误#25378565)

    参考资料:另请参阅:Bug #24464380、Bug #24388753、Bug #24619033、Bug #82920。

  • yaSSL 已升级到版本 2.4.2。此升级纠正了以下问题:潜在的 AES 侧信道泄漏;异常尺寸的 DSA 填充;SSL_CTX_load_verify_locations()OpenSSL 兼容性功能无法处理长路径目录名称。 (错误#24512715,错误#24740291)

  • OpenSSL 将于 2016 年 12 月结束对版本 1.0.1 的支持;请参阅 https://www.openssl.org/policies/releasestrat.html。因此,MySQL Commercial Server 构建现在使用 1.0.2 版而不是 1.0.1 版,并且 MySQL Commercial Server 的链接 OpenSSL 库已从 1.0.1 版更新到 1.0.2j 版。有关此版本中修复的问题的说明,请参阅 https://www.openssl.org/news/vulnerabilities.html

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。

空间数据支持

SQL 语法说明

  • 派生表语法现在允许在表名之后列出显式列名,以覆盖从选择列表中获取的默认列名。例如,此派生表的列名来自其选择列表:

    mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt;
    +---+---+---+---+
    | 1 | 2 | 3 | 4 |
    +---+---+---+---+
    | 1 | 2 | 3 | 4 |
    +---+---+---+---+

    要提供列名,请在派生表名称后加上带括号的列名列表:

    mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
    +---+---+---+---+
    | a | b | c | d |
    +---+---+---+---+
    | 1 | 2 | 3 | 4 |
    +---+---+---+---+

测试套件说明

  • mysql-test-run.pl现在有一个 选项可以指定 数据库的默认字符集。默认值为 。(漏洞 #25494068,漏洞 #84806)--charset-for-testdb=charset_nametestlatin1

  • mysql-test-run.pl现在有一个 --only-big-tests选项,它只运行大测试。跳过正常(非大型)测试。如果同时 --big-test--only-big-tests--only-big-tests则忽略。(缺陷号 25182306)

  • mysql-test-run.pl有一个新 --discover选项。给定后, mysql-test-run.pldiscover会在启动mysqld时尝试预加载 。来自的报告discover可以在 log/mysqld.%p.txt给出的目录下--vardir。此选项仅在 SPARC-M7 系统上受支持。(漏洞 #25048971)

  • mysqltest现在支持一个 expr命令,该命令允许对表达式进行求值并将其分配给变量。有关详细信息,请参阅 MySQL Server Doxygen 文档中的命令说明,该文档位于 https://mysql.net.cn/doc/index-other.html。(漏洞 #24806741)

  • mysqltest现在支持将 force-cpdir源目录递归复制到目标目录的命令(即复制子目录)。(漏洞 #24806681)

  • mysql-test-run.pl有一个新 --summary-report选项。给定后, mysql-test-run.pl 仅生成测试摘要的纯文本版本,并将其写入名为选项参数的文件。该文件适合通过电子邮件发送。(缺陷 #24512357,缺陷 #82708)

  • custom_tool对于诸如 massifhelgrind之类的值,无法使用 --valgrind-option=--tool=custom_tool 运行 mysql-test-run.pl,因为它添加了 其他工具可能无法理解的memcheck选项。此外, mysql-test-run.pl --callgrind选项不起作用,因为它向callgrind--base提供了无效选项 。感谢 Daniel Black 提供修复程序所基于的补丁。(漏洞 #23713613,漏洞 #82039)

  • mysqltest 函数现在允许参数 和 值 ,以指定使用套接字文件和 TCP/IP 连接协议。 connect()SOCKETTCPoptions

    此外,传输协议现在必须与当前系统相匹配。以前,在非 Windows 系统上传递PIPE或 导致使用默认(套接字文件)传输协议。SHM现在这会导致错误,同样,SOCKET在 Windows 系统上传递也会导致错误。(漏洞 #21046241)

  • mysql-test-run.pl现在支持一个 --bootstrap选项,使 mysqld选项能够被指定为引导选项。当mysql-test-run.pl找到 --bootstrap选项时 master.opt,它会删除并重新初始化数据目录,并使用新的选项设置重新启动服务器。(漏洞 #18184868)

X 插件说明

  • MYSQLX_TCP_PORT CMake选项被忽略 。(漏洞 #25493867,漏洞 #84804)

  • protobuf 编译器 为 mysqlx.proto发出了未使用的导入”警告。(错误#25444009,错误#84641)

  • 验证发生时未初始化的连接已释放。(缺陷号 25392280)

  • Mysqlx_notice_warning_sent 状态Mysqlx_notice_other_sent 变量值没有按预期递增。(错误#25289949、错误#84258、错误#25290001、错误#84260)

  • 宏的手动定义 MYSQL_DYNAMIC_PLUGIN是多余的。(漏洞 #25162590,漏洞 #83988)

  • IPv6 连接支持定义了一个 mysqlx_bind_address默认值为“0.0.0.0”的新系统变量,但默认值应该是“*”,以便可以使用 IPv6 地址、IPv4 地址或主机名连接到 X 插件. (漏洞 #25047909,漏洞 #83688)

  • stmt字段在消息中被标记为 required

    message Mysqlx.Crud.ModifyView {
       required Collection collection = 1;
    
       optional string definer = 2;
       optional ViewAlgorithm algorithm = 3;
       optional ViewSqlSecurity security = 4;
       optional ViewCheckOption check = 5;
    
       repeated string column = 6;
       required Mysqlx.Crud.Find stmt = 7;
    }

    (缺陷 #24968735,缺陷 #83595)

  • 对于使用 创建的表CREATE TABLE foo (doc JSON),该语句list_objects 错误地将表报告为集合。(漏洞 #24963952)

  • 在身份验证之前发送Expect.Open到已连接的套接字会导致以下错误消息:

    ... Plugin mysqlx reported: '10: Invalid message 24 received during client initialization'
    ... Plugin mysqlx reported: '10: ERROR reading from socket Bad file descriptor (9) 2'

    (错误#24940144,错误#83494)

  • 在 Linux 上,如果集合名称中的字母大小写不统一,则 JavaScript 和 Python 交互模式中的 MySQL Shell 会隐藏集合。(漏洞 #24848125)

  • 如果存在多个与身份验证用户匹配的用户帐户,X 插件将尝试对所有匹配的帐户而不是最匹配的帐户进行身份验证。(漏洞 #24847537)

  • 移动或包装了 C++ 11 中具有相应功能的 Boost 类。(缺陷号 24680856)

  • 当两个 X Plugin 实例在同一端口上启动时,生成的错误消息分为两行并包含重复信息。(漏洞 #24679018,漏洞 #83008)

  • performance_schema.threads表没有显示processlistX 插件的统计信息。(漏洞 #24638038)

  • 如果客户端向服务器发送未知消息类型,服务器将发回错误消息,然后断开客户端。(错误#24611754,错误#82868)

  • 当客户端发送零长度消息时,X 插件没有发送响应。对于后续消息,客户端收到错误E_X_BAD_MESSAGE并断开连接,具体取决于标头内容。(缺陷 #24595459,缺陷 #82862)

  • X Plugin 向任何连接的用户显示其版本,包括那些未通过身份验证的用户。(错误#24562707,错误#82784)

  • 当语句中存在重复的字段名称时,X 插件生成了不正确的查询Update。(漏洞 #24510083)

  • 该语句为数据库list_objects中的某些视图返回了不正确的信息。sys(漏洞#24472325)

  • X Plugin 试图将结果集发送到客户端,即使连接已关闭。如果连接被重置,插件现在会停止执行存储过程。(缺陷号 24440344)

  • 尝试在 list_objects未显式设置数据库名称的情况下使用该语句列出对象会导致集合被错误地归类为表。(漏洞 #23205895,漏洞 #81248)

  • X Plugin 现在支持该sha256_password 插件。

添加或更改的功能

  • 不兼容的更改: 以前,对于引用INSERT ... SELECT ... ON DUPLICATE KEY UPDATE语句, 如果 是. 现在这样的陈述是被禁止的并且会产生错误。要解决此限制,请将 编写 为派生表,以便可以将其行视为允许的单表结果集。请参见INSERT ... ON DUPLICATE KEY UPDATE 语句UPDATESELECTSELECTUNIONUNION

  • InnoDB: 默认情况下,InnoDB在计算统计时读取未提交的数据。在从表中删除行的未提交事务的情况下, InnoDB在计算行估计和索引统计信息时排除被删除标记的记录,这可能导致同时使用表操作的其他事务的非最佳执行计划以外的事务隔离级别 READ UNCOMMITTED。为了避免这种情况, innodb_stats_include_delete_marked可以启用一个新的配置选项,以确保InnoDB在计算持久优化器统计信息时包括删除标记的记录。(缺陷号 23333990)

  • InnoDB: R 树的几何解析和边界框计算代码已从服务器移至InnoDB服务器。

  • InnoDB: InnoDB现在支持NOWAITSKIP LOCKED选项SELECT ... FOR SHARE以及SELECT ... FOR UPDATE锁定读取语句。 NOWAIT如果请求的行被另一个事务锁定,则语句立即返回。 SKIP LOCKED从结果集中删除锁定的行。请参阅 使用 NOWAIT 和 SKIP LOCKED 锁定读取并发

    SELECT ... FOR SHARE替换SELECT ... LOCK IN SHARE MODE,但LOCK IN SHARE MODE仍可用于向后兼容。这些陈述是等价的。但是,FOR SHARE 支持NOWAITSKIP LOCKED和选项。请参阅 SELECT 语句OF tbl_name

    OF tbl_name 将锁定查询应用于命名表。

    笔记

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

    SELECT ... FOR SHAREandSELECT ... FOR UPDATE语句现在需要 SELECT权限和至少DELETELOCK TABLESUPDATE权限之一。以前,只SELECT需要权限。

  • InnoDB:静态 数据InnoDB加密功能现在支持重做日志和撤消日志数据的加密,由 innodb_redo_log_encryptinnodb_undo_log_encrypt 配置选项控制。请参阅 重做日志加密撤消日志加密

  • InnoDB: InnoDB存储在磁盘上的内部临时表现在支持多个游标位置,允许同一线程内的单个写入器和多个读取器访问。此增强功能的目的是为递归和非递归公用表表达式 (CTE) 提供支持。

    此外,对磁盘内部临时表的一致读取访问 InnoDB被脏读方案取代, InnoDB磁盘内部临时表的行计数现在使用行计数统计信息而不是较慢的表扫描。

  • InnoDB: InnoDB现在zlib为使用ROW_FORMAT=COMPRESSED. 以前,大型对象数据被压缩到单个 zlib流中。

  • 复制: 现在可以将组复制组中的视图更改事件复制到类型为 的外部多线程从属 (MTS) DATABASE。(漏洞 #25170698,漏洞 #84008)

  • 复制: 当向 提供负超时参数或小数超时参数时 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(),服务器会以意想不到的方式运行。有了这个修复:

    • 小数超时值按原样读取,没有舍入。

    • 如果服务器处于严格 SQL 模式,则负超时值将被拒绝并报错;如果服务器不在严格的 SQL 模式下,该值使函数立即返回 NULL,无需等待,然后发出警告。

    (错误#24976304,错误#83537)

  • 复制: 已经完成工作以减少接收方 (I/O) 和应用程序 (SQL) 复制线程之间的争用。这确保从服务器跟上其主服务器上更高的插入负载。(错误#78246,错误#21753696)

  • 复制: 添加了 binlog_expire_logs_seconds 系统变量,它以秒为单位设置清除二进制日志的时间间隔。此变量的影响 expire_logs_days是累积的,因此可以设置一个周期,例如 1.5 天。要完全禁用自动二进制日志清除,请将两个变量都设置为 0,这是它们的默认值。(错误#71697,错误#18260088)

  • 复制: 已添加性能模式表以监控复制滞后和队列。该 replication_connection_status表更新了有关在中继日志中排队的最后一个事务的信息,以及当前在中继日志中排队的事务的信息。该 replication_applier_status_by_coordinator 表更新了有关写入工作程序缓冲区的最后一个事务的信息,以及协调器当前正在处理的事务。这 replication_applier_status_by_worker 表更新了工人申请的最后一笔交易的信息,以及当前正在申请的交易的信息。每个表中显示的信息包含事务的 GTID、提交时间戳、处理阶段时间戳和完成时间戳。

    replication_applier_status_by_worker 表格中,LAST_SEEN_TRANSACTION列被列替换APPLYING_TRANSACTION

  • 复制: 除了现有的 expire_logs_days 变量之外,新的 binlog_expire_logs_seconds 变量是一个全局服务器变量。目的是促进比当前粒度更细粒度的二进制日志保留策略。

  • Replication: 通过二进制日志正确恢复DDL语句或事务,实现了基于二进制日志数据正确恢复DDL事务的支持。在新数据字典的上下文中,可以使用两阶段提交协议进行元数据更改并将它们作为单个事务写入二进制日志。

  • 复制: 多源复制现在支持每通道复制过滤器。这使得可以从特定通道过滤掉所选复制数据的执行。到目前为止,复制过滤器是全局的,并且只适用于所有通道。

  • 复制: 基于行的复制现在使用二进制日志中的扩展表元数据。扩展的元数据有两个主要目的:slaves在表结构与master不同时使用元数据顺利传输数据,外部软件可以使用元数据解码行事件并将数据存储到外部数据库中。

  • 复制: 组复制现在支持SAVEPOINTSQL 事务。

  • 复制: 添加了基于 GTID 的延迟复制和复制滞后监视的基础结构,使您能够正确监视复制滞后。引入了与二进制日志中每个事务(不是每个事件或语句)关联的两个新时间戳。original_commit_timestamp 是从事务提交到原始 master 的纪元开始的微秒数,而 immediate_commit_timestamp 是从事务提交到直接 master 的纪元以来的微秒数。

  • 复制:RESET MASTER语句已扩展为允许指定二进制日志文件编号。该RESET MASTER TO语句接受一个参数,该参数指定要使用的新二进制日志文件的索引。目的是通过用单个 替换FLUSH BINARY LOGSand 。 PURGE BINARY LOGS TORESET MASTER

  • 复制: 用于延迟定义和计算延迟复制的过程已得到改进。这依赖于二进制日志中的新时间戳,即 immediate_commit_timestamp,它是从纪元开始的微秒数,当时事务被写入直接 master 的二进制日志。这意味着延迟不再按事件计算,现在按事务应用。

  • 复制: 现在可以指定写入二进制日志的信息是否使复制从站能够根据提交时间戳或事务写入集进行并行化。

    使用写集比使用提交时间戳具有更高的并行性,因为它不依赖于提交历史。当以这种方式在复制从站上应用二进制日志时,它可能能够利用底层计算硬件(例如 CPU 内核)的功能,从而加快此过程。

    用于选择并行化源的接口被实现为一个新的服务器系统变量 binlog_transaction_dependency_tracking ,它可以采用 、 或 中的任何 COMMIT_ORDER一个WRITESETWRITESET_SESSIONCOMMIT_ORDER(默认)导致使用提交时间戳记录并行化信息;WRITESET导致使用写集记录此信息,这样任何不更新同一行的事务都可以并行化;并 WRITESET_SESSION以与 相同的方式运行 WRITESET,除了无法重新排序来自同一会话的更新。保存在内存中用于跟踪事务依赖性的行哈希历史的大小可以使用 binlog_transaction_dependency_history_size,也在此版本中引入。

  • JSON: 添加了 JSON 实用函数 JSON_PRETTY(),它以人类易于阅读的格式打印现有JSON值或任何可以成功解析为 JSON 文档的字符串。每个 JSON 对象成员或数组值都显示在输出的单独一行上;每个子对象或数组相对于其父对象有 2 个空格。

    例子:

    mysql> SELECT JSON_PRETTY('123');
    +--------------------+
    | JSON_PRETTY('123') |
    +--------------------+
    | 123                |
    +--------------------+
    
    mysql> SELECT JSON_PRETTY("[1,3,5]");
    +------------------------+
    | JSON_PRETTY("[1,3,5]") |
    +------------------------+
    | [
      1,
      3,
      5
    ]      |
    +------------------------+
    
    mysql> SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}');
    +---------------------------------------------+
    | JSON_PRETTY('{"a":"10","b":"15","x":"25"}') |
    +---------------------------------------------+
    | {
      "a": "10",
      "b": "15",
      "x": "25"
    }   |
    +---------------------------------------------+
  • JSON: 以前,当JSON 使用 对查询中的值进行ORDER BY,每个值都由排序键中具有固定长度的部分表示,每个这样的部分需要 1K 的内存。在许多情况下,这种使用是过度的——例如,整数标量值只需要相对很少的字节,因此 1K 的剩余部分(90% 或更多)被填充占用。

    引入了 JSON 排序键的可变长度部分来解决此问题,现在每个键部分仅占用存储值所需的空间。这对性能有以下好处:

    • 因为更有效地使用了排序缓冲区空间,所以文件排序不需要过早或经常刷新到磁盘,这意味着可以在内存中对更多数据进行排序。

    • 较短的键可以比较长的键更快地进行比较,从而显着提高内存中排序以及需要磁盘使用的排序的性能。

  • WEIGHT_STRING()调试功能不再支持该 子句LEVEL。(漏洞 #25469683,漏洞 #84723)

  • 对于 Developer Studio 12.5,32 位版本现在被禁用,除非FORCE_UNSUPPORTED_COMPILER 给出该选项。(缺陷 #25267157,缺陷 #84230)

  • 一些与存储引擎无关的外键约束检查正在内部进行InnoDB。这些现在都在 SQL 层完成。(缺陷号 25252847)

  • 简化了一些 GIS 越界检查。感谢 Daniel Black 的贡献。(漏洞 #25202470,漏洞 #84062)

  • 用于 Developer Studio 12.5 的编译器标志集得到改进。(漏洞 #25148549,漏洞 #83955)

  • CMake现在使用 CMAKE_POLICYCMP0022 NEW不是CMP0022 OLD. (漏洞 #25090147,漏洞 #83804)

  • -Wno-error如果 MySQL 配置为使用该选项 构建 , mysql_config会为其--cflags选项生成不正确的输出。

    mysql_configpkg-config现在生成 的编译器选项集由白名单而不是黑名单决定。(错误#25040566、错误#22898475、错误#80662)

  • UTF-8 二进制排序规则的性能得到改进。(错误#24788778、错误#83247、错误#25076862)

  • mysqld 的 systemd 服务文件现在在部分中包含一个Documentation值, [Unit]以提供指向 MySQL 参考手册中 systemd 文档的链接。(漏洞 #24735762)

  • 单元测试现在使用 Google Mock 1.8。(缺陷 #24572381,缺陷 #82823)

  • 不再支持 未实现的非标准WITH CUBE 子句。GROUP BY

    笔记

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

    (漏洞 #24572048,漏洞 #82821)

  • 这些过时的构建脚本已从 MySQL 源代码分发中删除 : BUILD/SETUP.sh、、、、 和 。(漏洞 #24512933)BUILD/autorun.shBUILD/cmake_configure.shBUILD/compile-distcmake/configure.pl

  • mysql_shutdown()恢复了 MySQL 8.0.0 中 C API 函数 的删除。它仍将在未来的 MySQL 版本中被删除,但该删除已被推迟。(漏洞 #24496976,漏洞 #82681)

  • Debian/Ubuntu 打包维护脚本的一致性和可维护性得到改进。(漏洞#23588977)

  • 如果修改的列不涉及生成的列表达式,则现在可以对包含生成的列的表的列修改进行 就地ALTER TABLE操作,这些生成的列依赖于具有 值的列。DEFAULT例如,更改NULL单独列的属性可以在不重建表的情况下就地完成。(漏洞 #22987899,漏洞 #80832)

  • 对于mysql系统数据库的转储, mysqldump不再为innodb_index_statsinnodb_table_stats表生成 DDL 语句。此类语句在转储重新加载时失败,因为用户无法访问这些表。(漏洞 #22655287)

  • 如果mysqld被调用 --daemonizestdout并且 stderr被重定向到 /dev/null如果连接到终端类型的设备,那么mysqld可以作为一个真正的守护进程。(缺陷号 21627629)

  • mysql_secure_installation对其认为有效的是和否响应更加严格。(缺陷 #13344753,缺陷 #62925)

  • MySQL 客户端和实用程序在使用该选项调用时报告了它们自己的特定于程序的版本号 --version,并且版本字符串没有遵循一致的格式。现在这些程序以一致的格式打印 MySQL 版本号(与mysqld相同)。(缺陷 #11763201,缺陷 #55885)

  • 一个新mysqldump选项 , 通过将其设置为最大值并将网络读取和写入超时设置为较大的值来--network-timeout启用大型表的转储 。max-allowed-packet默认情况下启用此选项。要禁用它,请使用 --skip-network-timeout. (缺陷 #11754493,缺陷 #46103)

  • 添加了两个 JSON 聚合函数 JSON_ARRAYAGG()JSON_OBJECTAGG(). 该 JSON_ARRAYAGG()函数将列或列表达式作为参数,并将结果集聚合为单个JSON 数组,如下所示:

    mysql> SELECT col FROM t1;
    +--------------------------------------+
    | col                                  |
    +--------------------------------------+
    | {"key1": "value1", "key2": "value2"} |
    | {"keyA": "valueA", "keyB": "valueB"} |
    +--------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> SELECT JSON_ARRAYAGG(col) FROM t1;
    +------------------------------------------------------------------------------+
    | JSON_ARRAYAGG(col)                                                           |
    +------------------------------------------------------------------------------+
    | [{"key1": "value1", "key2": "value2"}, {"keyA": "valueA", "keyB": "valueB"}] |
    +------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    数组元素的顺序是未指定的。

    JSON_OBJECTAGG()接受两列或表达式,分别将其解释为键和值;它将结果作为单个 JSON对象返回,如下所示:

    mysql> SELECT id, col FROM t1;
    +------+--------------------------------------+
    | id   | col                                  |
    +------+--------------------------------------+
    |    1 | {"key1": "value1", "key2": "value2"} |
    |    2 | {"keyA": "valueA", "keyB": "valueB"} |
    +------+--------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> SELECT JSON_OBJECTAGG(id, col) FROM t1;
    +----------------------------------------------------------------------------------------+
    | JSON_OBJECTAGG(id, col)                                                                |
    +----------------------------------------------------------------------------------------+
    | {"1": {"key1": "value1", "key2": "value2"}, "2": {"keyA": "valueA", "keyB": "valueB"}} |
    +----------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    一个NULL键导致错误;忽略重复键。

    有关详细信息,请参阅 聚合函数。(错误#78117,错误#21647417)

  • MySQL 现在支持根据(序列化字典信息)元数据文件 中包含的信息导入表 的IMPORT TABLE语句。此语句对于从一台服务器导出 原始表文件并将其导入另一台服务器很有用,并提供了一种更快的替代方法,可以使用 mysqldump将表转储为 SQL 语句文件并使用mysql处理转储文件 。有关详细信息,请参阅 IMPORT TABLE 语句MyISAM.SDI

修正错误

  • 不兼容的更改: 为其提供显式列名列表的视图的存储定义可能无效。例如,对于此语句:

    CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 ORDER BY name1;

    存储的定义看起来像这样,这是无效的:

    CREATE VIEW v1 AS SELECT 1 AS name2 UNION SELECT 2 AS 2 ORDER BY name1;

    现在存储定义中的列名不会被列名列表替换:

    CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 AS 2 ORDER BY name1;

    此更改导致的不兼容性是 CREATE VIEW无法再仅从 INFORMATION_SCHEMA VIEWS表中重新创建语句,因为该 VIEW_DEFINITION值不显示列名列表。相反,您还必须查阅该 COLUMNS表以获取列名列表。或者(更简单),使用 SHOW CREATE VIEW. (缺陷 #23265335,缺陷 #81377)

  • 创新数据库;Microsoft Windows: 在 Windows 上的 MySQL 64 位版本上,文件 I/O 重试结果由于缺少正确操作重试路径所必需的转换而被误解,导致断言失败和操作系统错误。(漏洞 #24711351)

  • InnoDB: 在调试版本中,初始化闩锁调试的调用由于竞争条件引发了断言。(漏洞 #25700405)

  • InnoDB: 删除了要求第一个撤消表空间使用空间 ID 1 的限制。现在可以为第一个撤消表空间分配一个空间 ID,而不是 1。撤消表空间的空间 ID 值仍然按连续顺序分配。(漏洞 #25551311)

  • InnoDB: 操作DROP TABLEinnodb_force_recovery设置为 5 或 6设置DROP TABLE不再允许 innodb_force_recovery(漏洞 #25385590)

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

  • InnoDB: 在没有 Performance Schema 的情况下编译服务器导致构建失败。(缺陷号 25348787)

  • InnoDB: 在预读期间,使用了错误的页面大小来计算表空间大小。(缺陷号 25330449)

  • InnoDB: 在 Fedora 25 上编译使用 DWITH_LZ4=system导致构建失败,因为 LZ4_COMPRESS_LIMITEDOUTPUT函数已弃用。(缺陷号 25297593)

  • InnoDB:UNIV_PFS_MUTEX禁用、 UNIV_PFS_RWLOCK和 等宏UNIV_PFS_THREAD导致编译错误。(漏洞 #25251082)

  • InnoDB: 虚拟索引中的 NULL 虚拟列字段名导致服务器在填充受外键约束影响的虚拟列时发生的字段名比较期间退出。(缺陷号 25222337)

  • InnoDB:InnoDB文件 I/O 性能模式检测 的文件句柄类型名称os_pfs_file_tpfs_os_file_t. (漏洞 #25220118)

  • InnoDB: 具有表子查询的事务 INFORMATION_SCHEMA可能会阻止并发 DDL 操作。(漏洞 #25200952)

  • InnoDB: 在范围比较中,传递了二级索引字段号而不是聚集索引字段号,最终导致检索到错误的字段。(漏洞 #25175249)

  • InnoDB: 服务器在重启时退出是由于 结构my_thread_init()my_thread_exit()函数st_my_thread_var(缺陷号 25167032)

  • InnoDB:具有非默认读取批量大小配置 的memcached读取操作导致服务器退出。(缺陷号 25147515)

  • InnoDB: 重启 服务器后表报INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSNULL键约束名(UNIQUE_CONSTRAINT_NAME(缺陷号 25126722)

  • InnoDB:READ COMMITTED在使用隔离级别 时,在外键验证期间不必要地采用了间隙锁(漏洞 #25082593)

  • InnoDB:在 MySQL 5.7 中 加载InnoDB表需要更多内存,这主要是由于临时表优化引入了内存结构成员。仅用于临时表的内存结构成员现在仅在需要时分配。(缺陷号 25080442)

  • InnoDB:TRUNCATE TABLE对带有索引的表进行操作 后FULLTEXT,空间大小计算错误导致读取无效。(漏洞 #25053705)

  • InnoDB: 准备好的 XA 事务被高优先级事务回滚。如果阻塞事务处于准备状态,则高优先级事务应该等待。(漏洞 #25032066)

  • InnoDB: InnoDB传递了一个无效的参数给 syscall(SYS_futex). (漏洞 #24923840,漏洞 #83375)

  • InnoDB: 重做日志恢复后,undo 表空间对象的节点大小偶发性为零,最终导致错误。此外,undo 表空间对象被错误地放置在 LRU 列表中,当表空间对象被释放时,undo 表空间的头页可能会出现在缓冲区缓存中,导致在读取第一页时文件打开失败。(漏洞 #24916359)

  • InnoDB: 在检查点期间,所有MLOG_FILE_NAME重做日志记录都写入单个小事务 (mtr),导致日志解析缓冲区溢出。(缺陷 #24793413,缺陷 #83245)

  • InnoDB: GCCmach_parse_compressed函数应该根据第一个字节的值加载一到五个字节。由于 GCC 错误,GCC 5 和 6 发出代码以在检查第一个字节值之前加载四个字节(GCC Bug #77673)。解决方法可防止此行为。感谢 Laurynas Biveinis 提供补丁。(漏洞 #24707869,漏洞 #83073)

  • InnoDB: 改进了与表空间类型函数相关的代码,以解决命名一致性、函数分布和函数使用方面的问题。(漏洞 #24706739,漏洞 #83092)

  • InnoDB: 添加了一种机制来调试构建,以确保 InnoDB性能模式检测的密钥已在性能模式中注册。如果性能模式密钥的数量与已注册的性能模式密钥的数量不匹配,该机制会导致启动在调试版本上失败。(漏洞#24686908)

  • InnoDB: 更新表统计信息时的竞争条件可能导致估计行数为 1 和不正确的查询执行计划。(错误#24666839,错误#82968)

  • InnoDB: 由于一个glibc错误,短暂的分离线程可能会在调用者从 返回之前退出 pthread_create(),从而导致服务器退出。感谢 Laurynas Biveinis 提供补丁。(缺陷 #24605956,缺陷 #82886)

  • InnoDB: 与表统计相关的代码中的错误在dict0stats.cc源文件中引发了断言。(漏洞#24585978)

  • InnoDB: 模块基本名称列表,表示 InnoDB代码库中使用 ut_mallocut_new不完整分配内存的模块。性能模式使用该列表来报告InnoDB内存分配事件数据。(漏洞 #24571816)

  • InnoDB: 一些InnoDBrw-lock 和 mutex 键未注册用于性能模式。(漏洞 #24571597)

  • InnoDB: 增加值 innodb_undo_logs并重新启动服务器后,在将撤消表空间分配给新分配的回滚段时,活动撤消表空间的数量没有增加。(漏洞 #24488141)

  • InnoDB:删除 了未使用的MLOG_UNDO_HDR_DISCARD重做日志记录类型和相关功能。(漏洞 #24482001)

  • InnoDB: 由于服务器未将表空间 ID 识别为撤消表空间 ID,因此在启动清除线程时引发断言。(漏洞 #24479773)

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

  • InnoDB: InnoDB在恢复过程中从双写缓冲区恢复页面时错误地报告了有关缺少加密的错误。(漏洞#24471076)

  • InnoDB: InnoDB报告了对表缓冲池中页数的错误估计。删除页面时,页面数量未正确减少。(漏洞#24464147)

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

  • InnoDB: 实施了以下与撤消表空间管理相关的代码更改:

    • 添加了一个用于临时表空间回滚段的内存数组,释放了 TRX_SYS页面中的 32 个槽以供启用重做的回滚段使用。

      由于此更改, innodb_rollback_segments 在配置单独的撤消表空间期间设置配置选项时,您不再需要考虑临时表空间回滚段。

    • 修改了与撤消日志和回滚段相关的代码注释。

    • 列出回滚段和撤消表空间的固定数组已替换为动态大小数组。

    • 重构了初始化撤销表空间的函数。

    • 添加了一个类来管理撤消和撤消文件名的即时创建。

    (漏洞#24462978)

  • InnoDB: 在缓慢关闭期间,缓存的撤消段未从回滚段历史记录中删除。(漏洞 #24450908)

  • InnoDB:GEN_CLUST_INDEX由于使用无效键名调用的错误, 在仅生成聚集索引 () 的表上进行表重建操作期间出现错误(漏洞 #24444831)

  • InnoDB: MySQL 没有使用 GCC 6.1.1 构建。(缺陷号 24438752)

  • InnoDB: 当服务器处于只读模式时旋转表空间加密主密钥引发断言而不是显示错误消息。(漏洞 #24404091)

  • InnoDB: 在没有显式定义主键的表上, 列上定义了唯一键时InnoDB没有替换隐式聚集索引((缺陷号 24397406)GEN_CLUST_INDEXNOT NULL

  • InnoDB: handler::keys_to_use_for_scanning()已从处理程序 API 中删除。该功能不再使用。HA_READ_ORDER索引标志为每个索引提供相同的信息。(漏洞#24364448)

  • InnoDB: 页面清理器线程由于与自适应哈希索引功能相关的回归而断言。(缺陷号 24346574)

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

  • InnoDB: InnoDB无法释放全文优化器线程使用的内存。(漏洞 #24331265)

  • InnoDB: 在恢复期间,InnoDB尝试使用空引用获取 LOB 页面。(漏洞 #23615208)

  • InnoDB: 添加新索引时,服务器删除了内部定义的外键索引,并试图使用虚拟生成列上定义的二级索引作为外键索引,导致服务器退出。InnoDB现在允许外键约束引用在虚拟生成列上定义的二级索引。(缺陷号 23533396)

  • InnoDB:由于并发表空间创建操作 的INFORMATION_SCHEMA.FILES竞争条件,查询导致服务器退出。(漏洞 #23477214,漏洞 #81614)

  • InnoDB:重建表 的就地操作期间的并发 DML 操作 ALTER TABLE未更新虚拟索引,导致虚拟索引和聚集索引之间不匹配。(漏洞 #23219499)

  • InnoDB: 一个TRUNCATE TABLE操作dict_sys在扫描缓冲池中的页面并从中删除页面时持有互斥锁,导致并发 DDL 操作停止。互斥量现在在扫描期间释放,并在扫描完成时再次获取。(漏洞 #23070734,漏洞 #80060)

  • InnoDB: 由于在存储 B 树游标时遇到缺少页码字段,将 GIS 数据插入 R 树引发了断言。(缺陷 #23044098,缺陷 #80939)

  • InnoDB: 写入InnoDB内部临时表不会增加 Handler_write计数器。(缺陷号 23024178)

  • InnoDB:在 MySQL 5.7 中对恢复过程的更改InnoDB可能需要在恢复期间最多扫描三次重做日志。为了减少扫描次数,合并了第一次和第二次扫描。通过此更改,除非扫描填充的重做日志记录哈希表达到其内存阈值,否则只有一次扫描。在这种情况下,会启动第二次扫描,同时执行扫描和应用。(缺陷 #22963951,缺陷 #80788)

  • InnoDB:对具有索引虚拟列的表进行 表复制联机ALTER TABLE操作 ROW_FORMAT=REDUNDANT(缺陷号 22018745)

  • InnoDB: 服务器重启后,并发 INSERT操作自增主键表出现重复录入错误。当前自动增量值在修改设置后没有 auto_increment_increment改变 auto_increment_offset。(缺陷 #20989615,缺陷 #76872)

  • InnoDB:InnoDB 在 Windows 上禁用了文件 I/O 的 性能模式检测(漏洞 #14025581)

  • InnoDB: 超过 64 个字符限制的自动生成的外键约束标识符在 列中被截断。自动生成的外键约束标识符不能再超过 64 个字符的限制。(错误#11745347,错误#13942)INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONSTRAINT_NAME

  • InnoDB:row_search_mvcc()函数不必要地遍历整个表进行范围查询,这发生在记录不在事务读取视图中时。(错误#84202、错误#23481444、错误#25251375)

  • 打包: mysys 库中 的my_create_minidump函数使用不正确的 ExceptionParam 参数值 (NULL)调用了 Windows API 函数 MiniDumpWriteDump 。这导致小型转储文件中遗漏了异常信息。(漏洞 #24505650,漏洞 #82695)

  • 分区: 对于分区表,删除分区也会触发表的删除触发器。(漏洞#24449174)

  • 分区: 更新在生成列上具有分区的表的一行可能会引发调试构建的断言失败,并在非调试构建中返回不正确的结果。(漏洞 #22574695,漏洞 #80080)

  • 复制: MySQL 8.0.1 增加了原来的提交时间戳相关语句,但是mysqlbinlog错误地报告说这些语句自 MySQL 8.0.0 以来一直存在,因为它们以错误的版本号写入日志80000。该修复程序将版本更改为80001mysqlbinlog 转储。(漏洞#25710507)

  • 复制: 如果错误状态是由于 ER3092 导致的,则MEMBER_STATE组复制成员的复制没有从ERROROFFLINE执行STOP GROUP_REPLICATION(漏洞#25674926)

  • 复制: 启用流量控制后,达到最小流量控制配额 1 会导致组复制在限制原因不再有效时不停止限制。(漏洞#25461354)

  • 复制: 使用无法解析的主机名 group_replication_group_seeds 导致START GROUP_REPLICATION失败。该修复程序可确保 group_replication_group_seeds 在启动组复制时验证主机名,并且该列表必须至少包含一个有效地址。无效地址将被忽略。(错误#25460324,错误#84674)

  • 复制: 在从站上处理中继日志文件期间,锁争用阻碍了二进制中继性能。(缺陷 #25321231,缺陷 #77778)

  • 复制: 从集群中删除的故障节点可以在重新加入集群时被驱逐。(漏洞 #25311008)

  • 复制:卸载插件时,组复制插件安装创建 的_gr_user帐户未可靠删除。(缺陷号 25298987)

  • 复制: 在离线节点上启动组复制时,该节点可以配置为复制,但无法恢复。(缺陷号 25256910)

  • 复制: 使用多线程从站时,应用程序错误显示的工作人员 ID 数据与性能模式复制表中外部化的数据不一致。(漏洞 #25231367)

  • 复制: 并非所有组复制 GCS 调试和跟踪消息都在调试模式下启用。(漏洞 #25209109,漏洞 #84079)

  • 复制: 编译 MySQL 5.7.17 失败,出现可变长度数组错误。(错误#25163241,错误#83994)

  • 复制: 在基于行的复制中,当从具有 utf8mb3列的表复制到具有相同定义的表(其中该列是使用 utf8mb4字符集定义的)时,会返回错误显示字段长度的消息。(漏洞 #25135304,漏洞 #83918)

  • 复制: 当组内的成员处于非活动状态时,组复制 GCS 不会丢弃消息。(缺陷号 25134074)

  • Replication: Group Replication 插件在Windows 平台上编译时给出了一些不必要的警告。(缺陷号 25119288)

  • 复制: 如果主服务器上的二进制日志被轮转,并且存储二进制日志文件的分区出现磁盘已满的情况,则服务器可能会意外停止。当转储线程切换到下一个二进制日志文件时,该修复添加了对二进制日志是否存在的检查。如果二进制日志被禁用,所有二​​进制日志直到当前活动日志被传输到slave,并向接收线程返回一个错误。(缺陷号 25076007)

  • 复制: 如果 Group Replication 插件在不再可能时尝试联系服务器,则可能会引发断言。(漏洞 #25071492)

  • 复制: 静默跳过先前执行的 GTID 事务的 GTID 事务跳过机制不适用于 XA 事务。(漏洞 #25041920)

  • 复制: 在组复制应用程序 SQL 线程上执行重启后,插件无法再检测到线程故障。(漏洞 #24969065)

  • 复制: 在 Windows 上构建组复制需要最低 CMAKE 版本 2.8.12。(漏洞 #24964522)

  • Replication: 如果一个名为 relay log files 的 relay log 索引文件不存在,RESET SLAVE ALL有时无法完全正确清理。(漏洞 #24901077)

  • 复制: 当 MTS 从属应用程序由于(注入的)错误而停止时,它没有报告任何对故障排除有用的信息。(漏洞#24822686)

  • 复制: FLUSH BINARY LOGS从许多服务器复制数据可能会变慢。(漏洞 #24806259,漏洞 #83270)

  • 复制: 当使用 XA 事务时,如果复制从属服务器上的应用程序 (SQL) 线程发生锁定等待超时或死锁,则自动重试不起作用。原因是当 SQL 线程执行回滚时,它不会回滚 XA 事务。这意味着当事务被重试时,第一个事件是XA START无效的,因为 XA 事务已经在进行中,导致XAER_RMFAIL错误。(缺陷号 24764800)

    参考资料:另请参阅:Bug #83588、Bug #24923091、Bug #24966941。

  • 复制: 启用组复制插件导致 performance_schema_max_mutex_classes 超过默认值 200。结果,一些组复制互斥工具没有出现在 performance_schema.setup_instruments 表中。(漏洞 #24746530)

  • 复制:禁用二进制日志记录时, 部分失败CREATE USERRENAME USERALTER USER语句未正确使用自动生成或指定的 GTID。(漏洞#24693798)

  • Replication: Binlog_sender将事件从二进制日志写入数据包缓冲区,然后将数据包发送到从属设备,并没有按预期减少发送缓冲区的大小。(漏洞 #24643036)

  • 复制: GTID 的组提交更新已经过重构,以提高具有许多小事务的工作负载的性能。(缺陷号 24398760)

  • 复制: 如果relay_log未在配置文件中指定该选项,则该 relay_log_basename变量正在内部动态构建, hostnamerelay_log_basename变量。当从服务器试图访问这个未初始化的变量时,会导致服务器意外停止。(漏洞#24352667)

  • 复制: 对于使用 yaSSL 构建的服务器,使用具有加密连接的组复制可能会导致等待视图传递的超时失败。(漏洞#23592214)

  • 复制: 当使用多线程从站(slave_parallel_workers大于 0)Seconds_Behind_Master 时,旋转中继日志时的值不正确。(缺陷号 23532304)

  • 复制:在中间步骤中失败 的XA PREPARE语句可能导致不一致的 XA事务状态,其中 ID= -1 但binlogged 标志设置为true. XA COMMIT这导致在执行和XA ROLLBACK查询时断言(漏洞 #22915670)

  • 复制:read_only如果启用了系统变量 ,服务器会阻止几个与复制相关的管理语句工作 (错误#22857926、错误#25363745、错误#25326058、错误#84350、错误#84437)

  • 复制: CHANGE MASTER TO对于不存在的通道可以提出断言。(缺陷号 22255698)

  • 复制:系统变量 指定的延迟 binlog_group_commit_sync_delay应用于过多的二进制日志提交组。(漏洞 #21420180)

  • 复制: 减少了复制到从站的二进制日志文件中生成的不需要的 fseeks 的数量。(漏洞 #83226,漏洞 #24763579)

  • 复制: 针对 Bug #81657 的修复未正确合并到 MySQL 8.0 中。感谢 Laurynas Biveinis 提醒我们。(缺陷 #83124,缺陷 #24715790)

  • 复制: 测试rpl.rpl_binlog_errors在 Windows 上偶尔会失败。(漏洞 #82302,漏洞 #24330138)

  • Replication:binlog_group_commit_sync_delay 被设置为1到9之间的值时,如果 binlog_group_commit_sync_no_delay_count 被设置为大于1的值,并且事务提交的数量小于 binlog_group_commit_sync_no_delay_count,如果没有收到更多的提交,这些提交将永远挂起;如果 binlog_group_commit_sync_no_delay_count 设置为 0,则所有事务提交将永远挂起。(缺陷 #80652,缺陷 #22891628)

  • 复制: 并发CREATE TRIGGERDROP TRIGGER语句没有以正确的顺序进行二进制记录,导致从站失败。(错误#77095,错误#21114768)

  • Microsoft Windows: 在 Windows 上,以大写形式给出则挂起 (漏洞 #24800048,漏洞 #83262)SHOW TABLES FROM db_namedb_name

  • Microsoft Windows:Windows 不再支持 32 位构建,但 CMake未能检测到何时尝试构建 32 位构建,导致稍后出现编译错误。现在 CMake检测 32 位构建尝试并生成相应的错误消息。(错误#24487483,错误#82645)

  • Solaris:启用CMake选项后, 现在可以使用 Developer Studio 12.5 编译器在 Solaris 11 和 12 上构建memcached 。(漏洞 #24504155,漏洞 #82692)WITH_INNODB_MEMCACHED

  • Solaris:Solaris 上的库搜索路径处理不正确。(漏洞 #24487934,漏洞 #82646)

  • Solaris: 由于对系统运行时库的依赖,Solaris 的最低要求版本现在是 Solaris 11 update 3。

  • Solaris: 在 Solaris 上,MySQL 现在是使用 Developer Studio 12.5 而不是gcc构建的。二进制文件需要安装 Developer Studio C/C++ 运行时库。有关如何仅安装库的信息,请参见此处:

    https://docs.oracle.com/cd/E60778_01/html/E60743/gozsu.html
  • JSON: 当一个JSON值由包裹在许多级别的 JSON 数组、对象或两者中的大型子文档组成时,JSON 值的序列化有时需要过多的时间才能完成。(漏洞 #23031146)

  • JSON:NULL存在值时 JSON,使用GROUP_CONCAT() withORDER BY子句的查询结果并不总是正确的。(缺陷号 22992666)

  • JSON: 内部rapid_json_handler使用自己的数据结构来表示一个部分构建的DOM;在返回结果之前,必须将这些转换成Json_dom图表。现在此处理程序直接构建图形,从而减少了构建图形所需的工作量,从而减少了解析 JSON 文档的工作量。(缺陷号 22900110)

  • JSON:当表达式计算为 内部函数 Item_func_case::val_json()并不总是按预期设置空值标志 ,导致在服务器的调试版本中出现断言。(缺陷号 22887227)CASENULL

  • JSON:SUM()函数截断从 JSON 文档中提取的十进制值,生成整数结果 。(漏洞 #84935,漏洞 #25530204)

  • JSON: 一个 JSON 文档,其中包含一个双精度值,该双精度值略大于可以用双精度表示的最大值,它会自动将其替换为零,而不是拒绝该值并引发错误。这些值现在可以在 MySQL JSON 文档中正确处理。

    根本问题可追溯到 RapidJSON 的问题,该问题已作为 Issue #849报告给该库的开发人员。(漏洞 #84891,漏洞 #25518504)

  • JSON: 当 使用 UTF-16 编码指定参数JSON_SEARCH()JSON_CONTAINS_PATH()函数不起作用one_or_all对于这两个函数,此参数现在 utfmb4在检查其值之前转换为 if need be。(漏洞 #84880,漏洞 #22516960)

  • JSON:JSON_UNQUOTE()函数不适用于使用 UTF-16 编码的字符串。现在这些字符串在被处理之前被转换为utfmb4内部。(漏洞 #84878,漏洞 #25516881)

  • JSON:在单个语句中 更新同一JSON列可能会导致将不正确的值写入表中。当第二次更新用自身的子集覆盖列值时,就会发生这种情况。此处显示了此类声明的示例:

    UPDATE t SET col = JSON_ARRAY(value), col = col->'$[0]';

    (错误#84694,错误#25461627)

  • JSON: 功能JSON_QUOTE()JSON_UNQUOTE()字节字符集,例如 utf8mb4. (缺陷 #84680,缺陷 #25455065)

    参考资料:另请参阅:Bug #77234、Bug #21193273。

  • JSON: 错误 3152 的错误消息 ER_JSON_USED_AS_KEY已从JSON 列“%s”不能在键规范中使用更改为更容易混淆和更准确的 JSON 列“%s”支持仅通过指定 JSON 路径上生成的列进行索引。(错误#81364,错误#23274244)

  • JSON: 针对启用调试的服务器运行时,MySQL JSON 功能的内部测试在某些平台上用完了堆栈空间。由于没有及时检查堆栈使用情况,服务器没有发现这种情况,导致服务器退出。

    此问题的修复有两个方面:

    • 现在在尝试序列化嵌套数组或对象之前进行堆栈溢出检查,以便在处理深度嵌套的 JSON 文档时操作正常失败,而不是导致退出。

    • JSON 文档的序列化已经过重组,因此在没有优化的情况下编译时需要更少的堆栈使用。

    (错误#81083、错误#23106330、错误#26399306)

  • BIN()在 .中使用时,可能会产生多字节字符集的错误截断 UNION。(漏洞 #27511490,漏洞 #89581)

  • MySQL 未使用 GCC 7 进行编译。(Bug #25643811,Bug #26825211)

  • (未记录的)WINDOWS_RUNTIME_MD CMake选项已被删除。(漏洞#25611359)

  • 如果 --skip-innodb 使用了或其变体之一, avoid_temporal_upgrade则会生成有关的虚假警告。(漏洞#25573578)

  • PID_FILE.shutdown 如果文件存在, mysqld_safe无法重新启动服务器 (漏洞 #25572504)

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

  • 对于 Debian/Ubuntu 软件包,用户定义的归类文件可能会在 MySQL 升级期间被覆盖。字符集文件现在标记为配置文件,以便用户自定义在升级期间生成是否覆盖它们的提示。(漏洞 #25525628,漏洞 #84761)

  • 对于CREATE TABLE使用数据库限定符指定表名并包含DATA DIRECTORYorINDEX DIRECTORY选项的语句,如果没有默认数据库,则会发生错误。(漏洞 #25514146,漏洞 #84861)

  • referenced_table_schema启用时,数据字典表中的 referenced_table_name字段值 mysql.foreign_keys未以小写形式存储 。lower_case_table_names(缺陷号 25495714)

  • 启动服务器 performance_schema_digests_size=1 导致异常退出。(缺陷 #25492129,缺陷 #84786)

  • 对于链接到 yaSSL 的客户端,当读取超时发生时连接变得无效,而不是重试读取。(漏洞#25444075)

  • 不同目录中的 MySQL 编译产生不同的构建,以将绝对路径泄漏到调试信息和 __FILE__. (错误#25436469、错误#84608、错误#25859274、错误#85855)

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

  • 负的内部连接超时值导致连接空闲并中止。负值现在会导致连接在没有 I/O 的情况下无限期阻塞。(缺陷号 25408557)

  • 互斥性能模式名称太长,在服务器启动时产生了警告。(漏洞 #25406915)

  • MySQL 在某些带有 -DWITH_LIBWRAP=ON. CMake支持现在检查是否 tcpd.h具有正确的函数原型。(漏洞 #25395543,漏洞 #84495)

  • 当使用 启动实例时,在数据字典表列上定义的索引超过了最大索引键长度 innodb_page_size=4k。(缺陷号 25384527)

  • mysqld_safe不检查--basedir选项命名的目录是否存在。(漏洞#25365194)

  • 配置CMake导致-G ninja构建输出不适用于 Xcode 或 Visual Studio 以外的构建平台。(缺陷号 25358460)

  • 如果选项命名的错误日志文件--log-error是 FIFO ,则mysqld_safe失败。(漏洞 #25356221,漏洞 #84427)

  • 对于准备好的语句,如果另一个别名依赖于它,子查询或派生表中的别名可能会在语句执行期间导致不正确的行为。(错误#25343335、错误#84398、错误#25171608)

  • 如果 --datadir选项值以 /字符结尾, mysqld_safe可能会失败。(漏洞 #25319457)

  • 最近对mysqld_safe的更改导致 mysql.server脚本无法启动它,如果基目录被指定为绝对路径,这与编译时的默认绝对路径不同。(漏洞 #25319392,漏洞 #84263)

  • 如果性能模式被禁用,CONNECTION_CONTROL插件将无法编译。(漏洞 #25308357,漏洞 #84304)

  • 使用 MySQL Workbench 创建的帐户的密码未正确过期。(缺陷号 25299309)

  • 对于 RPM 的 System V 初始化脚本, [mysqld]某些选项的选项文件部分被忽略,例如pid-file. (漏洞 #25287707,漏洞 #84172)

  • 如果使用非默认基目录,则 初始化脚本无法启动mysqld_safe 。(漏洞 #25261472,漏洞 #84219)

  • CMake现在检测是否出现 GCC 5.3.0 循环优化错误,如果出现则尝试解决方法。(缺陷号 25253540)

  • mysqld_safe --no-defaults不起作用(早期错误修复的无意结果)。(错误#25244898,错误#84173)

  • 语句内或语句之间的分号 ( ;) 字符可能会导致从相同的语句生成不同的摘要。(漏洞 #25244533,漏洞 #83253)

  • 组件无法在不引用其私有实现的情况下注册服务。现在有一个 宏可以避免这种情况。(缺陷号 25238906)SERVICE_IMPLEMENTATION(component,service)

  • 某些存储函数,如果在查询 WHERE子句中使用,可以使用索引条件下推(这不应该发生)来处理,从而导致服务器退出。(错误#25196653,错误#25174454)

  • 对于ai_ci基于 Unicode 归类算法 9.0.0 的归类,比较相等的重音字符被视为不同 LIKE。(错误#25167284,错误#83999)

  • 对于链接到 的客户端libmysqlclient,在使用准备好的语句期间可能会发生无效的内存访问。(缺陷号 25164932)

  • 一些 Linux 启动脚本没有 datadir正确处理设置。(漏洞 #25159791)

  • 如果为分区表的列指定了字符集,则升级时可能会出现段错误。(漏洞 #25153261)

  • LOAD DATA无法接受转义序列后的多字节字符。(错误#25147988、错误#83950、错误#25865525)

  • Bug #25088048 的修复导致 mysqld_safe用于启动 MySQL 服务器的命令不再包含mysqld路径。(缺陷号 25144379)

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

  • 对于 UCA 归类,LIKE 与以转义字符结尾的模式进行比较会返回不正确的结果。(漏洞 #25140629,漏洞 #83930)

  • db.opt将模式从 MySQL 5.7 升级到 MySQL 8.0 时 ,使用了默认字符集和排序规则,而不是文件中定义的字符集和排序 规则。(缺陷号 25139901)

  • 数据字典缓存现在不是在 DDL 语句末尾使用单独的函数调用更新数据字典缓存,而是作为事务提交的一部分进行更新。(漏洞 #25095798,漏洞 #83818)

  • CREATE TABLE如果或被明确指定为表或分区选项, 现在需要 FILE特权。如果任一选项被明确指定为分区选项,则需要 特权(如果指定为表选项,它将忽略它们)。(漏洞 #25092566)DATA DIRECTORYINDEX DIRECTORYALTER TABLEFILE

  • ICU 顺序和 MySQL Unicode 排序规则之间存在一些差异,用于匈牙利语收缩和连字。MySQL 现在遵循 ICU 命令。(缺陷号 25090543)

  • 使用二进制排序规则时,数据字典无法初始化和启动。为创建数据字典架构而生成的查询字符串未向二进制排序规则名称添加引号。(缺陷 #25054104,缺陷 #83706)

  • 执行包含访问视图的查询的存储过程可能会分配直到会话结束才释放的内存。(缺陷号 25053286)

  • FreeBSD 11 上的编译尝试检查失败 MAP_NORESERVE,不再定义。(漏洞 #25048128,漏洞 #83689)

  • mysql-test-run.pl现在检查是否 TSAN_OPTIONS设置了环境变量。如果是这样,该值将被视为包含 ThreadSanitizer 抑制的文件的路径名(在测试运行期间要忽略的错误)。此外,该--sanitize选项现在会导致mysql-test-run.pl扫描服务器错误日志以查找 ThreadSanizer 消息。(缺陷 #24970905,缺陷 #83601)

  • 在使用非零设置启动服务器后 ,当第一个客户端发出第一条指令--lower-case-table-names 时会引发断言。USE INFORMATION_SCHEMA;(漏洞 #24963580)

  • 对于不区分大小写的 Unicode 归类,各种空格字符不会散列为相同的值,从而导致它们之间的比较不正确。(缺陷 #24956750,缺陷 #83549)

  • 字典客户端现在跟踪由 DDL 语句修改的未提交字典对象,使同一会话未提交的更改对字典客户端可见,而不会在提交时间之前影响字典对象缓存。(漏洞 #24956365,漏洞 #83548)

  • 未正确处理同时发生的字典对象缓存未命中。一个线程检索到的对象可能会在等待线程尝试访问它之前从缓存中逐出。(漏洞 #24949179)

  • CMake现在避免 -fexpensive-optimizations为 GCC 版本配置选项,该选项会触发错误的移位或优化。(漏洞 #24947597,漏洞 #83517)

  • CMake-std=c++03添加了对使用Developer Studio 12.5 下的选项进行编译的支持。现在使用而不是stlport默认使用。(错误#24947136、错误#83512、错误#25229424)

  • NCHARNATIONAL CHAR 是同义词,但 成功了,而 没有。现在两者都有效。(漏洞 #24934161)CAST(expr AS NCHAR)CAST(expr AS NATIONAL CHAR)

  • OEL RPM 包现在可以更好地检测哪些平台具有多库支持(可以安装 32 位和 64 位库)。感谢 Alexey Kopytov 提供的补丁。(漏洞 #24925181,漏洞 #83457)

  • OEL RPM 包现在可以更好地检测哪些平台没有多库支持(可以安装 32 位和 64 位库)。感谢 Alexey Kopytov 提供的补丁。(错误#24916428,错误#83428)

  • 如果 or参数为 则LOCATE()函数返回 ,但如果 参数为 则不返回。现在它返回 如果任何参数是。(缺陷 #24911350,缺陷 #83427)NULLsubstrstrNULLposNULLNULLNULL

  • 如果参数可空性处理不当,位操作可能会导致服务器退出。(错误#24910958、错误#24930038、错误#24930829)

  • 块嵌套循环算法可能会在查询执行期间分配过多内存。(漏洞 #24909223)

  • 有关在 MySQL 5.7 及更高版本文件中构建 MySQL 5.6 兼容性库的信息.spec仅在构建libmysqlclientlibmysqld. 有关构建 InnoDBmemcached 插件的信息已删除。(漏洞 #24908345,漏洞 #83409)

  • 视图元数据的不正确更新可能会引发断言。(漏洞#24834622)

  • 如果配置文件中缺少keyring_okv该设置,则插件 初始化失败 ,这实际上是一项强制设置。 现在是可选的。(漏洞 #24816271)STANDBY_SERVERokvclient.oraSTANDBY_SERVER

  • 获取的数据字典对象 Dictionary_client::acquire_uncached()现在由当前自动释放器拥有,而不是调用者拥有。此外,TABLE_SHARE视图对象的获取是由acquire() and clone() 而不是 acquire_uncached(). (漏洞 #24813358,漏洞 #83296)

  • UPDATE 如果派生表合并到外部查询中,则对于在存储过程或视图对象中调用 的多表中使用的派生表,对于对象的第二次或后续执行,特权检查可能不正确。(漏洞 #24810564)

  • Created_tmp_tables在某些情况下,当没有创建临时表时,状态变量会增加 。(漏洞 #24808970,漏洞 #83287)

  • 如果在迁移例程时解析存储的例程主体失败,则从 MySQL 5.7 到 MySQL 8.0 的就地升级失败。现在会报告一个警告,并且会在不解析其主体的情况下创建例程。此外,在视图迁移过程中,当视图的依赖项解析失败时,现在会报告警告。(缺陷 #24805140,缺陷 #83275)

  • 对于编译,mysql_upgrade依赖于动态生成的 sql_commands_system_tables_data_fix.h文件,但缺少依赖项可能导致无法生成该文件。(漏洞 #24802377,漏洞 #83272)

  • 访问访问控制列表 (ACL) 缓存和使用 ACL 缓存填充INFORMATION_SCHEMA表的事务之间的竞争条件可能会导致服务器退出。(漏洞#24786029)

  • 对于调试版本,EXPLAIN或者 DESCRIBE对于数据库或表名长于最大允许长度的表,会引发断言而不是显示适当的错误。(漏洞 #24751177,漏洞 #83114)

  • 多个 INFORMATION_SCHEMA表作为数据字典表视图的实现引入了许多本机 SQL 函数,仅供服务器内部使用,但用户可以调用它们。如果用户调用这些函数,现在会产生错误。(漏洞 #24749248,漏洞 #83189)

  • CASE, COALESCE(), IF()并且 IFNULL()可能错误地合并有符号和无符号参数的混合,并产生不正确的结果类型。(漏洞 #24733658,漏洞 #83148)

  • 从客户端到启用了 SSL 的服务器的连接成功,即使--ssl-mode值为VERIFY_CAor VERIFY_IDENTITY且客户端未提供 CA 证书。(错误#24732452、错误#23189252、错误#25397416、错误#84508)

  • 在数据目录中手动创建目录会 成功,即使该目录未在数据字典中注册为数据库。(错误#24732194,错误#83140)USE dir_name

  • 如果InnoDB统计信息不正确, FOUND_ROWS()即使前一个SELECT没有返回任何行,也可能返回 1。(漏洞 #24714857,漏洞 #83110)

  • ALTER TABLE如果存在具有相同名称的非临时表,则在临时表上可能会引发断言。(漏洞 #24713918,漏洞 #83117)

  • CMake现在 -DWITH_NUMA=ON尽可能设置为 Debian 平台。(漏洞 #24689101)

  • 为了更好地提供原子文件创建,Debian 打包脚本现在使用 coreutils install命令而不是touchchmodchown。(缺陷号 24688682)

  • 启用DISABLE_SHARED CMake选项导致编译失败。(漏洞 #24687701,漏洞 #83039)

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

  • BIN()和 函数可能会错误处理数据类型OCT()的 值。(漏洞 #24686658,漏洞 #83031)HEX()BIT

  • 对于调试版本, or语句utf8的注释中 的无效字符引发了断言。这现在会产生一个 错误。(漏洞#24679962)CREATE EVENTALTER EVENTER_INVALID_CHARACTER_STRING

  • 字符集的编码utf8允许 U+D800 和 U+DFFF 之间的字符有效,尽管它们保留用于代理对并且不直接表示字符。他们现在被认为是无效的。(漏洞#24672415)

  • 如果 WHERE子句包含依赖子查询,表在选择列表中的列上有二级索引,后跟子查询中的列,和GROUP BY/或DISTINCT允许查询使用松散索引扫描,查询可能会产生不正确的结果。(漏洞 #24671968,漏洞 #83005)

  • 对带有外键的表进行操作后RENAME TABLE,生成的约束名称未在TABLE_CONSTRAINTS. (漏洞#24666169)

  • 在 macOS 上,CMakeAddressSanitizer 支持不起作用。(错误#24661626,错误#82976)

    参考资料:这个问题是 Bug #23759968 的回归。

  • 使用 Xcode 8.0 在 macOS 10.11 上编译失败。(漏洞 #24661523,漏洞 #82975)

  • 应用于不可见索引的索引提示不会产生任何错误。(漏洞 #24660093,漏洞 #82960)

  • 在某些情况下, INFORMATION_SCHEMA.KEY_COLUMN_USAGE 没有报告所有外键约束的数据。(漏洞 #24655803,漏洞 #82961)

  • REPLACE()在大字符串上可能会很慢且无法杀死。(漏洞 #24652792)

  • 和单元测试没有在 Aarch64 平台上正确处理除零测试DebugPrintTestDebugPrintDeathTest感谢 Alexey Kopytov 提供的补丁。(缺陷 #24624555,缺陷 #82889)

  • 使用 GCC 6 在 FreeBSD 上编译不工作。(漏洞 #24619561,漏洞 #82922)

  • 在最近的 MySQL 版本中 对mysqld_safe 所做的更改需要在命令行上指定--ledir, --mysqld, 选项;--mysqld-version它们不能再在选项文件中指定。这可能导致调用mysqld_safe的初始化脚本失败。此类脚本现在将MYSQLD_OPTS 环境变量的值作为第一个命令行参数传递给 mysqld_safe ,并将该值设置为可能需要的仅命令行mysqld_safe选项值。在使用 systemd 的平台上, 可以使用如下一行 MYSQLD_OPTS设置该值 :/etc/sysconfig/mysqld

    MYSQLD_OPTS=" --ledir=/mysqld_ledir --mysqld=my_wrapper "

    的值MYSQLD_OPTS还可以包括 mysqld_safe传递给 mysqld的mysqld选项 。(漏洞 #24619033,漏洞 #82920)

    参考:此问题是以下问题的回归:Bug #24464380、Bug #24483092、Bug #25088048、Bug #25378439、Bug #25378565。

  • SET PERSIST innodb_buffer_pool_size = valueinnodb_buffer_pool_size存储了to 的原始值, 而mysqld-auto.cnf不是新值。(漏洞 #24613005,漏洞 #82905)

  • 对于 SLES 包,安装脚本后同步码中的拼写错误阻止了某些清理工作的进行。(漏洞 #24605300,漏洞 #82389)

  • 升级数据目录时服务器写入错误日志的一些消息缺少标准时间戳和进程 ID 信息。(漏洞 #24600054,漏洞 #82874)

  • Last_query_cost和 状态变量 的会话值可能 Last_query_partial_plans 在初始化之前被访问。(漏洞#24596263)

  • 期间发生的警告CREATE TABLE ... SELECT可能会导致服务器退出。(漏洞 #24595992)

  • 对于LOAD DATA用于将数据插入到可更新视图中,缺少用于验证列是否实际可更新的检查。(缺陷号 24595937)

  • LONGTEXT当在子查询中使用 确定性函数返回时,服务器可以取消引用空指针。(漏洞 #24595581)

  • ALTER VIEW 如果语句因错误而失败,则 更改的视图可能会被删除。(漏洞 #24594140)

  • JSON如果文档很大并且包含许多带符号的整数,则将文档 转换为字符串可能会很慢。(缺陷号 24586888)

  • 数据字典可以包含临时表的条目(名称以 开头#sql)。这些表暴露给INFORMATION_SCHEMA查询和通过SHOW语句。这可能会导致mysqldumpmysqlpump在尝试转储此类表时失败。临时表现在对 INFORMATION_SCHEMA查询和 SHOW语句是隐藏的。(错误#24580599,错误#24571427)

  • 定义视图时,未考虑定义的字符集。如果这与默认字符集不同,则可能无法识别视图中使用的表名,从而导致视图被标记为无效。

    对于调试版本,如果在解析语句时发生错误ALTER VIEW并且诊断区域为空,则可以引发断言。(缺陷号 24580586)

  • 对于LOAD DATA语句,具有太多列值的输入数据只会产生警告,而不是像 MySQL 5.6 中那样产生错误。现在发生错误。(漏洞 #24577194,漏洞 #82830)

  • 使用系统变量是无效SET PERSIST的。global_log(漏洞 #24569624,漏洞 #82807)

  • 在 Performance Schema variables_info表中,对于 VARIABLE_SOURCE在没有变量的选项文件中指定的某些布尔选项,该列未正确设置。(缺陷号 24567960)

  • .mylogin.cnf选项文件旨在供客户端程序使用,但服务器也在读取它。服务器不再读取它。(漏洞 #24557925)

  • 使用boost::chrono被替换为 std::chrono因为前者导致链接错误。(漏洞 #24556808,漏洞 #82781)

  • X 插件是使用不同于其他插件的编译选项构建的。(漏洞 #24555770,漏洞 #82777)

  • 填充 variables_by_thread表时,性能模式可能会尝试访问正在取消初始化的其他线程的会话变量。(漏洞#24555658)

  • 没有适当权限的用户可以加载和卸载服务器组件。(漏洞#24528148)

  • 并发执行INSTALL COMPONENTUNINSTALL COMPONENT语句可能会导致服务器退出。(漏洞#24527148)

  • 在 Debian/Ubuntu 平台上,MySQL 的 systemd 启动脚本忽略datadir/etc/mysql/my.cnf. (漏洞 #24517024,漏洞 #82709)

  • LOCK TABLES语句生效的情况下,具有触发器的表上的 DML 语句可能会导致服务器退出。(漏洞 #24506766)

  • 由于处理特权缓存锁的竞争条件,运行帐户管理语句的并行从属线程可能会失败。(漏洞 #24503606)

  • 在具有触发器的表上与其他 DDL 操作同时执行ALTER TABLE可能会导致数据字典损坏。(缺陷号 24497803)

  • 如果mysqladmin shutdown在确定服务器进程 ID 文件时遇到错误,它会显示一条错误消息,但没有明确指出该错误是非致命错误。它现在表示执行继续。(缺陷号 24496214)

  • 对于null_audit插件, null_audit_event_record系统变量设置不当可能导致服务器退出。这个变量只能在null_audit插件中设置,所以它现在是只读的。(缺陷 #24493829,缺陷 #82670)

  • 在某些上下文中,诸如 之类的表达式IF(col_name > 5000, (1 / col_name), 5000)可能会得到一种 类型 DECIMAL(6,4),这会截断结果。(漏洞 #24492965,漏洞 #82668)

  • 用于ZEROFILL列的数据结构可能会遇到内存损坏,最终导致服务器退出。(漏洞 #24489302)

  • mysql-multi.server.sh脚本 的运行基于my.cnf数据目录。该选项文件不再使用,因此 mysql-multi.server.sh已被删除。(漏洞 #24487870)

  • 如果 MIN()MAX()在引用索引列的子查询中,查询可能会产生不正确的结果。(错误#24484060、错误#82638、错误#24657798、错误#82965)

  • SHOW TRIGGERSLinux 和 Windows 上的输出顺序可能不同。(漏洞 #24482919,漏洞 #82637)

  • mysqld_safe试图读取 my.cnf数据目录,尽管那不再是标准的选项文件位置。(漏洞#24482156)

  • 运行mysql_upgrade后,执行 INSTALL COMPONENT语句可能会导致服务器退出。(漏洞 #24453571)

  • 由于内存分配失败或整数溢出,将正则表达式模式匹配到大字符串可能会导致服务器退出。(漏洞 #24449076,漏洞 #24449090)

  • default_roles 使用 MySQL 5.7 数据目录启动服务器会由于缺少和role_edges系统表 而导致失败。(漏洞#24447771)

  • 表选项CREATE TABLE的值较大的语句 报告了不正确的错误。CONNECTION该值现在限制为 1024 字节。(漏洞#24437124)

  • ER_LOCK_WAIT_TIMEOUT如果在执行期间发生错误, 则可以提出断言 SHOW CREATE TRIGGER。(漏洞 #24420809,漏洞 #82483)

  • 对于大的无符号整数,常量折叠可能会产生不正确的结果。(缺陷 #24401273,缺陷 #82425)

  • 使用非常长的子分区名称可能会导致服务器退出。现在,大于 64 个字符的分区或子分区名称会产生 ER_TOO_LONG_IDENT错误。(漏洞 #24400628,漏洞 #82429)

  • 复制构造Gis_wkb_vector<Gis_point>函数未显式实例化,导致英特尔编译器出现构建问题。(漏洞 #24397833,漏洞 #82358)

  • 通过利用 REPAIR TABLE使用临时文件的方式可以提升权限。(漏洞#24388746)

  • UNINSTALL PLUGIN和 之间的竞争条件SHOW PLUGINS 可能导致服务器退出。(缺陷号 24344026)

  • 使用ROW模式二进制日志记录,组件安装会引发断言。(漏洞 #24343582)

  • 与角色相关的潜在内存泄漏已修复。(错误号 24337928)

  • 转换为半连接并以编程方式生成INFORMATION_SCHEMA表的子查询可能会错误地将INFORMATION_SCHEMA 表视为空表。

    在错误修复之前解决此问题的方法:(SET optimizer_switch='semijoin=off'; 错误#24287772,错误#82214)

  • mysqldumpslow无法解析慢查询日志中的时间戳;它尚未更新以跟踪日志时间戳格式的更改。(缺陷号 24007040)

  • Ubuntu 软件包安装的 AppArmor 配置文件缺少允许libnuma读取 /sys层次结构路径的条目,导致服务器启动失败。(漏洞 #23854929)

  • RAND()对于经过半连接转换的查询 ,优化器可能会错误地将 其视为常量。(漏洞 #23854015)

  • 对于调试版本,位运算符的不等长二进制操作数可能会引发断言。(缺陷号 23853628)

  • 如果事务回滚请求仅回滚语句而不是整个事务,则任何将另一个操作附加到事务的尝试都会引发断言。(缺陷 #23753319,缺陷 #82143)

  • STRCMP()对于具有 utf8mb4_unicode_ci排序规则的参数可能会返回不同于ORDER BY. STRCMP()已更正。(漏洞 #23752284,漏洞 #82132)

  • 如果启用了 GTID,则无法恢复使用 mysqlpump 制作的完整逻辑备份。

    为了能够控制写入转储文件的 GTID 信息,mysqlpump现在有一个 --set-gtid-purged选项指示是否向 输出添加语句。(缺陷号 23748432)SET @@GLOBAL.gtid_purged

  • audit_log如果插件在处理错误时发出错误信号, 则可能会发生无限递归 。(漏洞 #23717558,漏洞 #82052)

  • audit_log插件写入有关事件失败的错误日志的 消息MYSQL_AUDIT_CONNECT 现在也打印出潜在的错误原因以帮助调试。(缺陷号 23710632)

  • MySQL 现在使用readdir()而不是 readdir_r(). 后者自glibc2.24 以来已被弃用,并导致 MySQL 的调试构建和使用 GCC 6.1 的构建失败。

    此外,导致 GCC 6.1 编译器警告的几个问题已得到纠正。(错误#23708395、错误#24437737、错误#82515、错误#24459890、错误#82583、错误#25103242)

  • FORCE INDEXSELECT COUNT(*)查询无效。(漏洞 #23596760,漏洞 #81854)

  • 在启动期间,服务器会为 Unix 套接字文件创建一个锁定文件(例如,mysql.sock.lock 作为 的锁定文件mysql.sock)。如果服务器未能将进程 ID 写入锁定文件,则无法删除该文件,这可能导致后续服务器启动失败,直到手动删除该文件。(缺陷 #23582603,缺陷 #81838)

  • 对于调试版本,使用执行的查询 Item_func_spatial_collection::val_str()可能会引发断言。(缺陷号 23573720)

  • 对于连接类中的审核日志事件,该 connection_type值仅适用于连接事件。该值现在可用于连接、断开连接和更改用户事件。(漏洞 #23541550)

  • 如果给定参数 ,audit_log插件 audit_log_filter_remove_filter()函数会导致服务器退出。NULL(漏洞 #23522793)

  • 尝试在没有 FEDERATED存储引擎的情况下配置 MySQL 失败(CMake -DWITH_FEDERATED_STORAGE_ENGINE=0选项不起作用)。(漏洞 #23508203,漏洞 #81665)

  • 在 Solaris 上,gettimeofday()可能返回无效值并导致服务器关闭。(缺陷号 23499695)

  • keyring_file文件不存在时,插件可能会尝试将密钥写入其存储文件。为确保仅当存在正确的存储文件时才刷新密钥,keyring_file现在将密钥环的 SHA-256 校验和存储在文件中。在更新文件之前,插件会验证它是否包含预期的校验和。(缺陷号 23498254)

  • START GROUP REPLICATION使用堆栈 Srv_session并没有返回到正确的线程。START GROUP REPLICATION并且 STOP GROUP REPLICATION现在已从允许的命令列表中删除。(缺陷号 23337984)

  • 导致元组大于 max_join_size可能导致服务器退出的联合查询。(漏洞 #23303485)

  • 结构不正确的授权表可能会导致用户管理操作出现问题。作为此修复的结果,对于修改授权表的任何操作,服务器现在检查表是否具有预期的结构,如果没有则产生错误。必须运行mysql_upgrade以将表更新为预期的结构。(错误#23295423、错误#25095876、错误#25448037)

  • ST_ExteriorRing()由于传递了一个被认为有效的无效 WKB 字符串,可能会导致服务器退出。(缺陷号 23280574)

  • 对于调试版本,无法准备 XA 事务的分支可能会导致服务器退出。(漏洞 #23264552,漏洞 #81375)

  • 优化器可以选择 ref访问二级索引而不是range 访问主键,即使成本更高。(漏洞 #23259872,漏洞 #81341)

  • 磁盘已满错误消息的实例包含错误的错误代码。(漏洞 #23247332,漏洞 #81346)

  • 对于带有ORDER BYand 的查询LIMIT,优化器跟踪没有记录优化器切换到不同的索引。(缺陷 #23227428,缺陷 #81250)

  • 如果在卸载时调用其中一个函数 ,则对插件和函数使用的锁的不当处理 version_tokens可能会导致服务器退出 。version_tokens(缺陷号 23210850)

  • 在存储程序中执行的 DML 语句中的某些错误可能会被错误处理并导致服务器退出。(漏洞 #23209989)

  • QUOTE()函数可能会分配过多的内存。max_allowed_packet现在施加了字节限制, 并NULL在尝试分配更多字节时返回警告。(漏洞 #23195404)

  • 对于一些深度嵌套的表达式,优化器未能检测到堆栈溢出,导致服务器退出。(缺陷号 23135667)

  • 对于通过 X 插件创建的会话,不正确的线程附加/分离可能会导致服务器退出。(缺陷号 23057045)

  • 当试图定位数据目录时, mysqld_safe被错误地认为 $MY_BASEDIR_VERSION/var是可能的位置之一。(漏洞 #23013510,漏洞 #80866)

  • 对于某些生成的列,表重建的列定义的字符集转换可能会更改列值。(漏洞 #22991924)

  • OS X DMG 安装程序未正确设置密钥环插件安装。(漏洞 #22991650)

  • 如果查询在派生表的列上执行,并且选择列表包含混合聚合函数和组列的表达式,则在启用 SQL 模式时GROUP BY会引发错误 。ONLY_FULL_GROUP_BY(漏洞 #22924183,漏洞 #80726)

  • 从 MySQL 5.6 二进制(就地)升级到 5.7,然后使用mysqlpump执行数据导出 导致尝试重新加载转储文件时出错。(漏洞 #22919028,漏洞 #80706)Invalid default value for date_column

  • 将长浮点数转换为整数失败可能会导致服务器退出。(漏洞 #22907691)

  • 在 Unix 和类 Unix 系统上,如果还给出--log-error了选项,则在 PID 文件的目录中错误地创建了由于没有指定选项值而导致的错误日志文件。--pid-file(缺陷号 22900354)

  • main.log_tables-big测试用例在高负载主机上可能不稳定 。感谢 Laurynas Biveinis 提供补丁。(缺陷 #22874167,缺陷 #80607)

  • 通过 X 插件执行的 SQL 语句未在性能模式中进行检测。(漏洞 #22859462)

  • rpl.rpl_key_rotation测试用例未与主服务器正确同步 。感谢 Laurynas Biveinis 提供补丁。(漏洞 #22838596,漏洞 #80531)

  • DROP INDEXTEXT由于对-type 列(TINYTEXT等等) 的索引前缀长度的处理不一致,操作可能会失败 。

    此修复的结果是 指定索引前缀超过最大列数据类型大小的语句的 CREATE TABLE行为 更具限制性:CREATE INDEX

    • 对于非唯一索引,要么发生错误(如果启用了严格 SQL 模式),要么索引长度减少到位于最大列数据类型大小内并产生警告(如果未启用严格模式)。

    • 对于唯一索引,无论 SQL 模式如何,都会发生错误,因为减少索引长度可能会启用不满足指定唯一性要求的非唯一条目的插入。

    (漏洞 #22740093,漏洞 #80392)

  • 存储例程名称上的元数据锁定是在区分大小写的基础上执行的,但例程名称不区分大小写。(缺陷号 22700385)

  • 使用聚合函数的查询 DISTINCT可能会产生不正确的结果。(漏洞 #22686994,漏洞 #80310)

  • innodb_numa_interleave 系统变量在某些未启用 NUMA 的系统上错误地可用 。感谢 Tomislav Plavcic 提供的补丁。

    CMakeWITH_NUMA现在根据当前平台是否NUMA支持设置默认 对于不支持 NUMA 的平台, CMake的行为如下:

    • 没有 NUMA 选项(正常情况), CMake正常继续,只产生这个警告:NUMA library missing or required version not available

    • 使用-DWITH_NUMA=ONCMake中止并出现此错误:NUMA 库丢失或所需版本不可用

    (缺陷 #22678436,缺陷 #80288)

  • 某些涉及复杂WHERE 条件的 SQL 查询可能会导致警告、内存损坏或服务器退出。(漏洞 #22671573)

  • 使服务器脱机时,性能模式中的竞争条件可能导致服务器退出。(漏洞 #22551677)

  • 在 macOS 上,如果将具有关联触发器的表重命名为包含小写和大写字符的新名称, DROP TRIGGER则触发器会导致ER_NO_SUCH_TABLE 表出错。(缺陷 #22512899,缺陷 #79873)

  • MYSQL_FIELDC API 结构中, org_table派生表的值为 *,这可能导致依赖于此值的查询失败。视图和派生表的org_table值现在设置如下:如果列是从视图中选择的,则org_table命名视图。如果列是从派生表中选择的,则 org_table命名基表。如果派生表包装视图,org_table仍会命名基表。如果列是表达式, org_table则为空字符串。(错误#22364401,错误#79641)

  • 对于 RPM 包,error-log 部署/etc/my.cnf文件中的默认位置与安装的 logrotate脚本中的位置不同,导致 logrotate失败。(漏洞 #22322685)

  • Performance Schema events_statements_summary_by_digest 表可以包含相同语句摘要和模式组合的多行,而不是预期的单个(唯一)行。(缺陷 #22320066,缺陷 #79533)

  • 对于 Performance Schema 系统和状态变量表,以不同于 的字符集表示的变量值 utf8可能会被截断或不正确。(漏洞 #22313205)

  • 对于调试版本,使用具有无效 UTF-8 名称的表达式属性更改表分区表达式会导致引发断言。(漏洞 #22152229)

  • 在包含 AUTO_INCREMENT列的表中执行插入然后执行 SELECT操作后, LAST_INSERT_ID()返回正确的值,但 mysql_insert_id()C API 函数的值被重置为 0。(错误 #22028117,错误 #78778)

  • 在 Ubuntu 上,从社区包升级到商业包期间会显示错误消息,这使得它看起来好像 mysqldmy_print_defaults尚未安装。这些消息是虚假的,已被消音。(缺陷号 21807248)

  • 禁用系统变量 的use_index_extensions 标志后,某些查询可能会返回不正确的结果。(缺陷 #21749123,缺陷 #78244)optimizer_switchSELECT DISTINCT

  • WHERE语句子句中的 无效字符串值UPDATE导致使用索引扫描而不是范围扫描。对于索引中不存在的值,这可能会慢得多。现在优化器确定这是一个不可能 WHERE的条件。(缺陷 #21032418,缺陷 #76933)

  • Debian 软件包缺少与 AppArmor 相关的包含文件,并且错误地标记为依赖于 AppArmor(因此无法通过卸载来禁用 AppArmor)。(缺陷号 20768958)

  • 启用系统变量后 automatic_sp_privileges,它对匿名用户没有预期的效果。(缺陷号 20266641)

  • 在复制环境中,SET PASSWORD或者ALTER USER 由于未能正确解析哈希字符串而无法在从站上执行。(缺陷号 20228478)

  • 优化器resolve_const_item()函数Item_decimal()以错误的顺序调用了最后两个参数。(漏洞 #19062566)

  • 在这些条件下添加或列时 ,就地ALTER TABLE操作无法报告错误:a) 列是并且没有提供默认值;b)启用了严格模式和 SQL 模式;c) 桌子不是空的。 DATEDATETIMENOT NULLNO_ZERO_DATE

    在这些条件下添加或列时,操作失败并 出现ALTER TABLE错误而不是警告 :a) 列是并且没有提供默认值;b) 启用严格SQL模式,未启用SQL模式;c) 桌子不是空的。(漏洞 #16888677)DATEDATETIMENOT NULLNO_ZERO_DATE

  • TIME将带有小数秒部分的、 DATE或 值 插入TIMESTAMP到具有相同类型但小数位数较少的列中会导致四舍五入。这与 MySQL 5.5 不同,后者使用截断而不是舍入。要启用对此行为的控制,可以使用新的 TIME_TRUNCATE_FRACTIONALSQL 模式。默认是使用舍入。如果启用此模式,则会发生截断。(缺陷 #16583910,缺陷 #68760)

  • NOT IN当使用内表的索引前缀时,子查询可能会产生不正确的结果。(漏洞 #13915291)

  • 在非 Linux Unix 系统上,mysql.server 启动脚本使用 Linux 命令pidof 而不是pgrep。(漏洞 #13788154,漏洞 #64342)

  • 在服务器异常退出后 启动多个mysqld_safe实例可能会导致一个mysqld_safe实例杀死另一个实例。由于错误修复,该 mysqld_safe.pid文件不再使用。(缺陷 #11751149,缺陷 #41908)

  • mysqld_safe--help消息 已更正为提到 、 和 选项(如果给定)必须是第一个参数。(缺陷 #11745176,缺陷 #11192)--no-defaults--defaults-file--defaults-extra-file

  • 每个级别(具有固定深度)的 XML 解析器位置堆栈的边界检查使用数组的大小作为上限,因此偏离了一个。这是通过将允许的深度减少一个来解决的,这实际上与位置堆栈中的最大元素数相匹配。(缺陷 #83871,缺陷 #25111907)

    参考资料:另请参阅:Bug #14040071、Bug #15948580。