Documentation Home
MySQL 8.0 发行说明  /  MySQL 8.0.2 的变化(2017-07-17,发展里程碑)

MySQL 8.0.2 的变化(2017-07-17,发展里程碑)

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

笔记

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

账户管理注意事项

  • 在数据目录初始化或升级期间,MySQL 现在会创建一个'mysql.session'@'localhost' 保留帐户。该帐户由插件在内部使用以访问服务器。它被锁定,因此不能用于客户端连接。(漏洞#25642343)

  • 这些系统变量现在可用于定义强制角色并使授予的角色能够在客户端连接时自动激活:

    • mandatory_roles接受一个值列表角色,服务器应该将其视为自动授予所有用户。

    • activate_all_roles_on_login 当用户登录到服务器时,可以控制所有授予角色的自动激活。

    有关详细信息,请参阅使用角色

字符集支持

  • 对于使用NO PAD排序规则的 Unicode 数据,改进了多字节和可变长度值的排序:

    • NO PAD排序规则是基于 UCA 9.0.0 及更高版本的排序规则,例如 utf8mb4_0900_ai_cior utf8mb4_ja_0900_as_cs

    • 对于权重字符串较短的键值,性能提升最大;也就是说,权重字符串未填满其整个允许长度的字符串。对于 VARCHAR(10)使用utf8mb4_0900_ai_ci排序规则的列,值最多可能占用 160 个字节。该字符串'a' 仅使用可能的 160 个字节中的 2 个字节,并且比'abcdefghij'. 但 'abcdefghij'Even 只使用了 160 个可能的 20 个字节,并且比一个字符串更稀疏,例如,U+337F SQUARE CORPORATION (㍿) 的十个副本,其权重字符串需要全部可用的 160 个字节。

    (漏洞 #25750527,漏洞 #85546)

  • MySQL 现在支持 Unicode 字符集的新排序 utf8mb4_0900_as_ci规则 utf8mb4。此排序规则区分重音且不区分大小写。它类似于默认utf8mb4排序规则 ( utf8mb4_0900_ai_ci),只是默认排序规则不区分重音。

    utf8mb4_ja_0900_as_cs_ksMySQL 现在还支持用于 utf8mb4Unicode 字符集 的新日语排序规则 。这种排序规则的相似之处utf8mb4_ja_0900_as_cs在于它区分重音和区分大小写,但 utf8mb4_ja_0900_as_cs_ks也区分假名并将片假名字符与平假名字符区分开来。utf8mb4_ja_0900_as_cs将片假名和平假名字符视为相同的排序。需要日语排序规则但不区分假名的应用程序可用于utf8mb4_ja_0900_as_cs获得更好的排序性能。 utf8mb4_ja_0900_as_cs使用三个权重级别进行排序;utf8mb4_ja_0900_as_cs_ks 使用四个。

    utf8mb4_ja_0900_as_cs_ks是第一个使用_ks归类后缀的归类。没有此后缀的日语排序规则不区分假名。

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

  • 对 MySQL 客户端支持进行了这些字符集更改:

    • 这些客户端使用默认字符集 utf8mb4而不是 latin1mysqlmysql_upgrademysqladminmysqlcheckmysqldumpmysqlimportmysqlpumpmysqlslapmysqlshowmysqltest。(此更改不影响 mysqlmysqladminmysqlcheckmysqlimport执行的字符集自动检测, 和 mysqlshow, 如 连接字符集和排序规则中所述)。

    • 使用库创建的客户端连接 libmysqlclient使用默认字符集utf8mb4而不是 latin1.

    • mysqltest程序支持显式指定字符集的 选项--default-character-set

编译笔记

  • 性能: 不再禁用 GCC 的严格别名优化,这导致 MySQL 单线程性能略有改进。

  • Linux: MySQL 现在可以在 Alpine Linux 上编译。(漏洞 #25945568,漏洞 #80322)

  • Solaris: 在 Solaris 上,服务器构建现在使用 std::atomic,因此它们必须链接到 libstatomic. (漏洞#25957991)

  • MySQL 现在使用 Visual Studio 2017 进行编译。(缺陷号 25788406)

  • 用于服务器构建的 Boost 库的最低版本现在是 1.64.0。(漏洞 #25772329,漏洞 #85593)

  • 这些更改是针对客户端程序开发进行的:

    • 客户端程序应该只需要 #include<mysql.h>文件。特别是<my_config.h>应该不需要了,就不再安装了。

    • my_init()函数不再包含在从 导出的符号列表中 libmysqlclient。它不需要由客户端程序显式调用,因为它会被其他 C API 初始化函数隐式调用。

    (漏洞#25732787)

  • 对于 Xcode IDE,头文件被添加到 MySQL 项目源中,以便可以搜索它们。(缺陷号 25636986)

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

组件注释

  • 新服务可用于使组件能够注册和注销系统变量 ( component_sys_variable_register, component_sys_variable_unregister) 以及注册状态变量 ( status_variable_registration)。

  • 两个新服务可用于使组件和插件能够注册和注销可加载函数: 分别为标量mysql_service_udf_registrationmysql_service_udf_registration_aggregate 聚合可加载函数提供注册服务。这些服务使组件和插件能够自行管理可加载函数,而无需使用 CREATE FUNCTIONand DROP FUNCTION语句。

    使用这些服务注册的可加载函数或 CREATE FUNCTION列在新的性能模式 user_defined_functions表中。请参阅 user_defined_functions 表。此类可加载函数mysql.func系统表中列出,因此该 user_defined_functions表更适合检查安装了哪些可加载函数。

  • mysql_string字符串操作服务已从插件服务转换为组件服务:一组供组件使用的字符串服务 API 。密码验证组件已更新为使用修改后的服务实现。

配置注意事项

  • 以前,在某些情况下默认启用操作LOCAL功能 LOAD DATA:MySQL 二进制分发版中的客户端库是在启用客户端 LOCAL功能的情况下编译的,并且 local_infile在服务器端启用了系统变量。LOCAL 现在在所有上下文中默认禁用该功能。客户端程序必须显式配置为启用 LOCAL,并且服务器必须在 local_infile启用的情况下运行。请参阅 LOAD DATA LOCAL 的安全注意事项。(漏洞 #24511108)

  • mysqld启动行为已修改如下。通常,在不使用mysqld_safe时,这些更改可以使服务器启动更一致或更容易 。

    • 服务器可执行文件在启动时确定自己的完整路径名,并使用其所在目录的父目录作为默认 basedir值。这反过来又使服务器能够 basedir在搜索与服务器相关的信息(例如 share包含错误消息的目录)时使用它。

    • 如果无法将错误日志输出重定向到 --log-error选项值,则错误输出可能会丢失。现在这种可能性较小。

    • 如果服务器使用该 --daemonize选项启动并且未连接到 tty 设备, --log-error=""则在没有显式日志记录选项的情况下使用默认错误日志记录选项,将错误输出定向到默认日志文件。以前,在这些情况下可能会发生错误。

    • -D-I选项现在分别是--daemonize 和 的同义词--initialize

    (缺陷 #20398088,缺陷 #75343)

  • MySQL 现在支持语句语法的 SET PERSIST_ONLY变体SET ,用于在运行时进行配置更改,这些更改在服务器重新启动时也会持续存在。与 一样 SET PERSISTSET PERSIST_ONLY将变量设置写入mysqld-auto.cnf数据目录中命名的选项文件。但是,与 不同的是PERSISTPERSIST_ONLY不会修改运行时全局系统变量值。这 PERSIST_ONLY适用于配置只能在服务器启动时设置的只读系统变量。有关详细信息,请参阅 使用选项文件用于变量分配的 SET 语法

    除了 持久化系统变量所需的特权 之外, 使用还SET PERSIST_ONLY需要新 的特权。PERSIST_RO_VARIABLES_ADMINSYSTEM_VARIABLES_ADMIN

数据字典注释

  • 系统column_stats表已被删除并被column_statistics 数据字典表取代。

  • version数据字典表已重命名 为dd_properties.

    由动态插件创建的表的元数据INFORMATION_SCHEMA现在记录在数据字典中并通过 INFORMATION_SCHEMA TABLES表可见。

    INFORMATION_SCHEMA这些表格在: SHOW_STATISTICS, SHOW_STATISTICS_DYNAMIC, STATISTICS_BASE, STATISTICS_DYNAMIC, 中不再可见 TABLES_DYNAMIC。对用户的影响很小,因为这些表供服务器内部使用。

  • 存储引擎现在InnoDB使用 MySQL 数据字典,而不是它自己的特定于存储引擎的数据字典。有关数据字典的信息,请参阅 MySQL 数据字典

    以下列表简要描述了此更改的主要影响:

    • 升级和降级影响:

      • 要从 MySQL 5.7 升级到 MySQL 8.0,您必须执行 升级 MySQL中描述的升级过程。

      • 仅支持使用逻辑降级方法( mysqldump降级)从 MySQL 8.0 降级到 MySQL 5.7。不支持就地降级。

    • 与使用可传输表空间功能导出和导入表空间关联的元数据更新现在在全局数据字典表而不是 InnoDB数据字典表上执行。

    • InnoDB内存中的元数据现在从全局数据字典对象实例化。此元数据以前是从InnoDB 系统表中读取的。

    • 表示表空间加密和透明页面压缩的表选项现在从全局数据字典中检索。

    • InnoDB FULLTEXT 索引添加了数据字典支持。辅助索引表名称更改为小写。

    • InnoDB在 DDL 操作期间创建或修改的元数据现在写入全局数据字典。

  • mysql系统表和数据字典表现在在 MySQL 数据目录中InnoDB 命名的单个表空间文件中创建。mysql.ibd以前,这些表是在数据库目录中的各个InnoDB表空间文件中 创建的。mysql相关的变化包括:

    • InnoDB存储快速变化的InnoDB 元数据 的数据字典缓冲表已重命名innodb_dynamic_metadata并从InnoDB系统表空间移动到数据字典表空间。

    • 撤消表空间元数据现在驻留在数据字典表空间中。

    • 临时表空间元数据现在驻留在数据字典表空间中。

    • mysql在表空间、 InnoDB系统表空间 ( innodb_system) 或通用表空间 中创建的表的表定义 现在包含一个TABLESPACE属性。此更改具有以下含义:

      • 您不能CREATE TEMPORY TABLE ... LIKE根据驻留在上述任何表空间中的表的定义来创建空表,因为这些表空间不支持临时表。

      • CREATE TABLE ... LIKE保留 TABLESPACE原始表的属性并在定义的表空间中创建一个新表,而不管 innodb_file_per_table 设置如何。这是暂时的倒退。

      有关详细信息和解决方法,请参阅 CREATE TABLE ... LIKE 语句CREATE TEMPORARY TABLE 语句

弃用和移除说明

  • 默认情况下,mysql客户端会去除发送到服务器的语句中的注释,并且使用 --skip-comments (strip comments) 和--comments (preserve comments) 来控制此行为。

    评论剥离现已弃用。此功能和控制它的选项将在未来的 MySQL 版本中删除。

  • 系统 explicit_defaults_for_timestamp 变量现在默认启用(以前默认禁用),如果禁用它会出现警告。这意味着现在默认禁用列中 默认值和NULL-value 处理 的非标准(和弃用)行为。TIMESTAMP

  • 已删除对这些已弃用的表和列引用语法结构的支持,现在使用它们会导致错误。应更改这些构造的实例以删除前导句点。

    • .col_name

    • .tbl_name

    • .tbl_name.col_name

  • 在Using Symbolic Links for MyISAM Tables on Unix 中描述的符号链接支持 以及控制它的 --symbolic-links选项现已弃用,并将在未来的 MySQL 版本中删除。此外,该选项现在默认处于禁用状态。相关的 have_symlink系统变量也已弃用,将在未来的 MySQL 版本中删除。

SQL 函数和运算符注释

  • MySQL 现在支持窗口函数,对于查询中的每一行,使用与该行相关的行执行计算。其中包括 RANK()LAG()和 等函数NTILE()。此外,现在大多数现有的聚合函数都可以用作窗口函数;例如,SUM()AVG()。有关详细信息,请参阅 窗口函数

    笔记

    以下每个词现在都是保留字,不能在没有标识符引用的情况下用作标识符: CUME_DIST, DENSE_RANK, FIRST_VALUE, GROUPS, LAG, LAST_VALUE, LEAD, NTH_VALUE, NTILE, OVER, PERCENT_RANK, RANK, ROW_NUMBER, WINDOW

日志记录

  • 不兼容的更改: 已进行这些错误记录更改:

    • 如果服务器找不到配置的错误消息文件(使用 lc_messages_dirlc_messages系统变量指定),则服务器会更加宽容。以前,服务器向错误日志写入一条消息以指示问题,然后中止启动过程并退出。现在服务器写了一条消息,但继续启动并默认为内置的英文消息。这适用于服务器写入错误日志并发送给客户端的消息。请参阅 设置错误消息语言

    • 错误日志被重写以使用 MySQL 组件架构。传统的错误日志记录是使用内置组件实现的,而使用系统日志的日志记录是作为可加载组件实现的。此外,还提供可加载的 JSON 格式日志接收器。要控制启用哪些日志组件,请使用 log_error_services系统变量。有关详细信息,请参阅 错误日志

    • 不兼容:要启用记录到系统日志,您必须加载log_sink_syseventlog日志组件并将其列在 log_error_services值中(请参阅错误记录到系统日志)。这与 MySQL 5.7 及更早版本不同,后者在 Windows 上默认启用记录到系统日志的功能,并且在所有平台上都不需要加载组件。

      此配置更改的结果是 log_syslog以前用于控制记录到系统日志的系统变量已过时,对其值的更改无效。 log_syslog现在已弃用,将在未来的 MySQL 版本中删除。

优化器注释

  • MySQL 现在可以管理表列值的直方图统计信息:

    • ANALYZE TABLE语句支持用于生成和删除列直方图统计信息的子句 UPDATE HISTOGRAMDROP HISTOGRAM

    • 服务器将直方图信息存储在 column_statistics数据字典表中。使用 INFORMATION_SCHEMA.COLUMN_STATISTICS 表格可以查看直方图。

    • 系统变量控制可用于直方图生成的histogram_generation_max_mem_size 内存量。

    • Performance Schema 有一个 memory/sql/histograms用于监视为直方图生成执行的内存分配的工具。

    • mysqldump并且 mysqlpump可以 --column-statistics选择向输出添加 ANALYZE TABLE语句以在重新加载转储文件时为转储表生成直方图统计信息。

    有关详细信息,请参阅ANALYZE TABLE 语句优化器统计信息和 INFORMATION_SCHEMA COLUMN_STATISTICS 表

包装说明

  • mysqladmin被添加到 Docker/Minimal 包中,因为 InnoDB Cluster 需要它。(缺陷号 25998285)

  • 对于 Windows,MSI 安装程序包现在包括对所需 Visual Studio 可再发行包的检查,并在缺少时生成一条消息,要求用户安装它。(缺陷号 25658832)

  • Debian/Ubuntu 软件包现在支持带有 systemd 的多个 MySQL 实例。请参阅使用 systemd 管理 MySQL 服务器。(漏洞 #24559588,漏洞 #82785)

解析器注释

  • 的解析器规则ALTER TABLE 被重构为与上下文无关,并提高了可维护性和可扩展性。由此产生的影响是不再接受一些以前接受的未记录的语法变体。例如,CREATE TABLE 允许使用由表名或当前数据库和表名限定的列名的ALTER TABLE语句,某些只允许列名的语句也是如此。这样的语句现在会产生错误。

性能模式注释

  • Performance Schema 表现在threads 包含一个 RESOURCE_GROUP指示资源组标签的列。

  • 性能模式现在支持版本控制,并在内部维护其表的当前定义。在启动时,服务器将其支持的性能模式版本与存储在数据字典中的性能模式版本进行比较。如果版本不同,服务器会删除所有旧的性能模式表并使用当前定义重新创建它们。由于此更改:

    • 对于 MySQL 升级,不再需要运行 mysql_upgrade来将更改合并到 Performance Schema 表中,因为它们会在服务器启动时根据需要自动重新创建。

    • mysql_system_tables.sql支持脚本不再包含用于创建 Performance Schema 表的 SQL 语句,因为这些表定义是在内部维护的 。

    pfs_table_service为了支持动态 Performance Schema 表操作,现在可以使用 名为的新组件服务。

  • Performance Schema 默认检测设置已更改:

    • 仪器transaction和 消费者events_transactions_current现在 events_transactions_history默认启用。请参阅 性能模式事务表

    • memory/%现在默认启用 所有内存工具。请参阅 内存汇总表

    • wait/lock/metadata/sql/mdl数据锁定工具现在默认启用。请参阅 metadata_locks 表

安全说明

  • MySQL Commercial Server 的链接 OpenSSL 库已更新到版本 1.0.2l。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(缺陷号 26160962)

  • 以前,任何用户都可以执行该 XA RECOVER语句来发现未完成的准备好的 XA 事务的 XID 值,这可能导致启动 XA 事务的用户以外的用户提交或回滚 XA 事务。现在 XA RECOVER只允许拥有新版本的用户使用 XA_RECOVER_ADMIN特权,预计仅授予需要它的管理用户。这可能是这种情况,例如,对于 XA 应用程序的管理员来说,如果它崩溃并且有必要找到应用程序启动的未完成的事务以便它们可以回滚。此特权要求不会影响 XA 事务的正常提交或回滚,因为启动它的用户知道它的 XID。

    对于 MySQL 升级,mysql_upgrade授予 XA_RECOVER_ADMIN具有SUPER权限的用户,除非发现某些帐户已经拥有 XA_RECOVER_ADMIN. (漏洞 #17188129)

空间数据支持

测试套件说明

  • mysql-test-run.pl--do-test-list选项 接受一个包含每行一个测试的文件的参数。文件中的行现在接受以下任何格式:

    test_name
    test_name.test
    suite_name.test_name
    suite_name.test_name.test
    path/to/test/file

    (漏洞 #25700362)

  • mysql-test-run.plmysqltest现在对允许的测试用例和结果文件名有更多限制。名称必须仅包含字母数字字符 (A-Z, a-z,0-9)、破折号 (-) 或下划线 (_),并且不能以破折号或下划线开头。不一致的文件名会出错。(漏洞#25487471)

  • 对mysql-test-run.pl--xml-report的 选项进行 了这些更改:

    • <failure>标签标识在重试尝试时失败的任何测试 。

    • 跳过和禁用的测试包含单独的统计信息和字段。

    • 如果没有为源外构建提供绝对路径,则在构建目录中创建 XML 报告。

    • 对于组合运行,名为的字段 variation包含在 <testcase>标记中。

    • 属于一个套件的所有测试的结果都聚集在一个<testsuite>标签中。

    • 有关失败的信息在名为 的属性中报告,并附有简要原因message,以及标记中的其他详细信息。

    (缺陷号 25349924)

  • mysql-test-run.pl现在支持 --report-unstable-tests具有以下效果的选项:

    • 在摘要 中称为不稳定测试 的单独类别中使用至少一次重试尝试报告已通过的任何测试。

    • 如果所有失败都是由于不稳定的测试造成的, mysql-test-run.pl会产生警告但会成功退出。

    • --xml-report如果还指定 了该选项,则添加一个新的 XML 标记来报告不稳定的测试 。

    (错误#24473420,错误#25984429)

  • mysqltest现在支持一个 replace_numeric_round命令,该命令采用从 0 到 16 的参数值,指示将数值四舍五入到的小数位数。这可用于帮助防止测试的结果内容不匹配错误,在这些测试中,由于精度差异而跨平台获得的结果略有不同。感谢 Daniel Black 提供的补丁。(缺陷 #23280117,缺陷 #81399)

  • mysql-test-run.pl现在寻找一个 testname-client.opt 文件,该文件类似于该 testname-master.opt 文件,但用于指定特定于测试的客户端选项。(漏洞 #17084918)

X 插件说明

  • X 插件现在可以正确处理过期的 SSL 证书。(缺陷号 25835833)

  • GROUP BY和 等子句的输出HAVING已通过将 grouping_criteria表达式移动到派生查询得到改进。(错误#25549637,错误#24497007)

  • 在安装 X 插件期间,防火墙白名单中生成了一条空白规则。(缺陷号 24488234)

添加或更改的功能

  • 不相容的变化;InnoDB: ADD PARTITIONDROP PARTITIONCOALESCE PARTITIONREORGANIZE PARTITIONREBUILD PARTITION ALTER TABLE 选项现在由本机分区就地 API 支持,并且可以与ALGORITHM={COPY|INPLACE}LOCK子句一起使用。

    EXCHANGE PARTITION,以前支持ALGORITHMLOCK子句,由新的服务器层 API 执行,以与 MySQL 数据字典兼容。分区和表交换由本机分区处理程序在内部执行。

    DROP PARTITIONwith ALGORITHM=INPLACE删除存储在分区中的数据并删除分区。但是,DROP PARTITION使用ALGORITHM=COPYold_alter_table=ON重建分区表并尝试将数据从删除的分区移动到具有兼容 PARTITION ... VALUES定义的另一个分区。无法移动到另一个分区的数据将被删除。

  • InnoDB: InnoDB现在在恢复期间使用表空间映射文件来识别需要重做日志应用程序的表空间。这是对以前使用的重做日志表空间发现的更改。

    如果表空间映射文件丢失或损坏, innodb_scan_directories启动选项可用于在服务器中断后启动 MySQL 时指定表空间目录。

    有关详细信息,请参阅 崩溃恢复期间的表空间发现。(漏洞#24793413)

  • InnoDB: 在以前的版本中,or InnoDB存储 ROW_FORMATKEY_BLOCK_SIZE属性, 即使在创建或更改表时这些属性被静默忽略。在这种情况下,所报告的列 显示指定的属性 而不是表的实际属性。现在存储和报告表的实际和 属性。 CREATE TABLEALTER TABLESHOW CREATE TABLECreate_optionsSHOW TABLE STATUSROW_FORMATKEY_BLOCK_SIZEInnoDBROW_FORMATKEY_BLOCK_SIZE

  • 复制: 在以前的版本中,发布STOP GROUP_REPLICATION停止了插件,但服务器仍然接受事务。这意味着交易没有传输到集团。为了STOP GROUP_REPLICATION更安全,now super_read_only设置为 ONimmediately upon issued STOP GROUP_REPLICATION,确保不接受任何交易。(缺陷 #25495067,缺陷 #84795)

  • 复制: 当存在网络分区并且某个成员占少数时,对该成员的所有查询都会被阻止。为了改善这种情况, group_replication_unreachable_majority_timeout 添加了变量,使您可以配置少数成员在离开组之前等待与多数成员重新联系的时间。(漏洞#25473794)

  • 复制:添加 该 group_replication_transaction_size_limit 变量是为了使您能够保护组免受导致故障的大型事务的影响。(缺陷 #84785,缺陷 #25510757)

  • Replication:删除了对 MySQL 5.0 之前版本创建的二进制日志文件的支持,slaves 或mysqlbinlog 不再支持二进制日志版本 1 和版本 3 格式 。

  • Replication:replication_group_membersPerformance replication_group_member_stats Schema 表已扩展,可为 Group Replication 提供更多监控信息。该 replication_group_members表现在包含有关成员角色的信息,以及在成员上运行的 MySQL 版本。该 replication_group_member_stats 表现在包含有关组中所有成员、应用程序和本地队列以及回滚事务的信息。

  • 复制: 接收线程已得到改进,在等待磁盘空间时不再阻塞其他线程的活动。这改进了对复制的监视,确保它在接收线程等待磁盘空间时正确报告。如果您无法释放磁盘空间以允许接收线程继续其活动,则在大多数情况下可以强制停止它而不会产生副作用。

  • 复制: 添加了一个新的事务长度字段, Gtid_log_event以字节为单位存储事务长度。

  • 复制: 以下变量的默认值已更改,以确保复制在默认情况下尽可能稳健和高效:

  • 复制: Group Replication 插件现在通知服务器中的其他组件一些相关事件已经发生。在视图更改、恢复状态更新、网络分区和主要选举时,插件会通知在服务注册表中注册的侦听器并通知他们事件已经发生。这些侦听器,甚至可以是其他插件,然后可以对这些事件做出反应。

  • 复制:group_replication_member_weight 添加了变量,使您能够在单主模式下控制新主节点的选举 。 在以前的版本中,主要选举是基于成员的 UUID,在发生故障转移时,最低的 UUID 被选为新的主要成员。使用此变量为成员分配数字权重以确保选出特定成员,例如在主节点的计划维护期间或确保优先考虑某些硬件。

  • 复制: 添加了以下新系统变量来配置组复制:

    这些变量使您能够微调单个组成员的流量控制,根据成员在组中执行的任务调整配额。

  • JSON: 添加了对用于许多 MySQL JSON 函数的 XPath 表达式范围的支持,包括 JSON_EXTRACT()JSON_REMOVE()。此类范围使用语法 指定 ,其中 和 分别是 JSON 数组中元素范围的第一个和最后一个索引(编号始终从 0 开始)。例如,包括第二个、第三个和第四个元素,如下所示: start to endstartend$[1 to 3]

    mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');
    +----------------------------------------------+
    | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') |
    +----------------------------------------------+
    | [2, 3, 4]                                    |
    +----------------------------------------------+
    1 row in set (0.00 sec)

    这项工作还为关键字的此类表达式提供了支持 last,您可以使用它来表示当前数组中最后一个(最右边)元素的索引,如下所示:

    mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]');
    +--------------------------------------------+
    | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]') |
    +--------------------------------------------+
    | 5                                          |
    +--------------------------------------------+
    1 row in set (0.00 sec)

    还支持相对于数组末尾的索引,如下所示:

    mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]');
    +--------------------------------------------------------+
    | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]') |
    +--------------------------------------------------------+
    | [1, 2, 3]                                              |
    +--------------------------------------------------------+
    1 row in set (0.00 sec)

    有关更多信息和示例,请参阅 搜索和修改 JSON 值。(缺陷 #79052,缺陷 #22285926)

  • JSON:JSON_SET()优化器现在支持在使用、 JSON_REPLACE()或 时对 JSON 文档进行部分(就地)更新JSON_REMOVE()。(以前,所有JSON列值的更新都是通过完全删除以前的文档并在其位置写入新文档来完成的。)一般来说,当替换值的大小小于或等于列的原始值时,可以执行此优化,并且没有新元素添加到原始值。不能对表单的 列值进行简单的替换。 UPDATE tbl SET json_col = json_val

    JSON 数据类型提供了有关以这种方式优化更新的要求的更多信息。

    这项工作包括 在 MySQL 服务器中添加两个 JSON 实用函数,JSON_STORAGE_SIZE()和 。返回用于存储 JSON 文档的二进制表示的字节数,无论该文档是作为表中的列值、用户变量的值还是 JSON 文字呈现。在列的情况下,这是用于存储 JSON 文档的空间,因为它被插入到列中,在从那时起可能对其执行的任何部分更新之前。 JSON_STORAGE_FREE()JSON_STORAGE_SIZE()JSONJSON_STORAGE_FREE()显示由列的最近部分更新释放的 JSON 列值的二进制表示中的字节数。对于存储 JSON 文档的用户变量, JSON_STORAGE_FREE()始终返回 0;如果参数是 JSON 文字,它也会返回 0。

    这些函数中的每一个,就像许多其他作用于 JSON 值的 MySQL 函数一样,也接受一个可以成功解析为 JSON 文档的字符串。有关更多信息和示例,请参阅JSON 实用程序函数

  • RPM.spec文件现在包括对运行单元测试的支持。(漏洞 #25814143,漏洞 #85743)

  • mysql客户端现在支持 --binary-as-hex使用十六进制表示法 ( ) 显示二进制数据 的选项。感谢 Daniël van Eeden 提供补丁。(漏洞 #25340722,漏洞 #84391)0xvalue

  • SHOW TABLES语句现在支持一个可选EXTENDED关键字,该关键字使语句输出列出由失败 ALTER TABLE语句创建的隐藏表。(这些临时表的名称以 . 开头 #sql。)有关详细信息,请参阅 SHOW TABLES 语句。(漏洞 #24786075,漏洞 #83241)

  • 序列化字典信息 (SDI) 文件现在具有小写扩展名 ( .sdi) 而不是大写。

  • TempTable存储引擎取代 MEMORY存储引擎成为内存内部临时表的默认引擎 。TempTable存储引擎为VARCHAR和 列 提供高效存储VARBINARY。会话变量定义内存内部临时表的 internal_tmp_mem_storage_engine 存储引擎。允许的值为 TempTable(默认值)和 MEMORY. 配置选项定义存储引擎在开始将数据存储到磁盘之前temptable_max_ram可以占用的最大内存量。 TempTable默认值为 1073741824 字节 (1GiB)。

    和Performance Schema 工具可用于监视 内存分配memory/temptable/physical_ram和 磁盘存储。 memory/temptable/physical_diskTempTable

  • MySQL 8.0.2 版本引入了一些与撤消相关的更改:

    • 现在可以使用 innodb_undo_tablespaces 配置选项在运行时或重新启动服务器时修改撤消表空间的数量。之前,undo表空间的数量只能在初始化MySQL实例时配置,之后无法更改。此更改允许在数据库增长时添加撤消表空间和回滚段。

    • innodb_undo_log_truncate默认情况下启用。启用后,任何超过由定义的阈值的撤消表空间都 innodb_max_undo_log_size被标记为截断。请参阅 截断撤消表空间

    • innodb_undo_tablespaces 默认值从 0 更改为 2,这意味着回滚段默认在两个单独的撤消表空间而不是 系统InnoDB表空间中创建。至少需要两个撤消表空间才能允许截断撤消日志。

      设置 innodb_undo_tablespaces为 0 已弃用,未来的 MySQL 版本将不支持。

    • 用于撤消表空间文件的命名约定从更改 为 ,其中是撤消空间编号。 undoNNNundo_NNNNNN

    • 配置选项定义每个撤消表空间的 innodb_rollback_segments 回滚段数。以前, innodb_rollback_segments 是一个全局设置,用于指定 MySQL 实例的回滚段总数。此更改增加了可用于并发事务的回滚段数。更多的回滚段增加了并发事务为撤消日志使用单独的回滚段的可能性,从而减少了资源争用。

    • 配置选项已innodb_undo_logs删除。配置选项执行相同的 innodb_rollback_segments 功能,应该改为使用。

    • Innodb_available_undo_logs状态变量被删除 。每个表空间的可用回滚段数可以使用SHOW VARIABLES LIKE 'innodb_rollback_segments';

  • SHOW COLUMNSand SHOW INDEX语句现在支持一个可选关键字, 该EXTENDED关键字使语句输出包含有关 MySQL 内部使用且用户无法访问的隐藏列和索引的信息。有关详细信息,请参阅SHOW COLUMNS 语句SHOW INDEX 语句

修正错误

  • Incompatible Change: Group Replication 和 X Plugin 等插件现在使用 mysql.session这个版本添加的帐户。如果您从不包含mysql.session帐户的先前版本升级,则必须运行mysql_upgrade以确保创建帐户。如果mysql_upgrade未运行,插件将无法启动,并显示错误消息There was an error when try to access the server with user: mysql.session@localhost。确保用户存在于服务器中并且 mysql_upgrade 在服务器更新后运行。mysqlxsys不再创建以前使用过的用户,例如 (缺陷号 26042764)

    参考资料:另请参阅:Bug #24311527、Bug #25642343、Bug #25750822、Bug #25103980、Bug #83841。

  • InnoDB: 查询运行在 设置INFORMATION_SCHEMA.TABLES执行得更慢。(缺陷号 26197113)information_schema_statslatest

  • InnoDB:ALTER TABLE ... ADD PARTITION指定 的DATA DIRECTORY未能忽略 TABLESPACE表的属性。(漏洞#26113652)

  • InnoDB:禁用 时foreign_key_checks,可以在父表之前创建具有外键约束的子表,这可能导致外键约束失败,因为父表不知道该约束。创建表时,现在会调用加载表的外键约束并检查子表。(漏洞 #25976199)

  • InnoDB: 优化带有全文索引的表时发生解析错误。(缺陷号 25914332)

  • InnoDB: 使用 Microsoft Visual C++ 2015 或 macOS 10.12.4 使用 GCC 4.2.1 或 Apple LLVM 版本 8.0.0 (clang-800.0.38) 在 Windows 上编译 MySQL 返回警告。(缺陷号 25910531)

  • InnoDB: 在调试版本中,当系统表空间文件 (ibdata1) 在创建双写页面期间空间不足时,在引导期间引发断言。(漏洞#25872368)

  • InnoDB:InnoDB尝试将自动递增计数器值保存到磁盘 时,不正确的锁定顺序导致死锁 (缺陷号 25833228)

  • InnoDB: 访问字典表对象数据的内部方法没有考虑虚拟列。(漏洞#25822154)

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

  • InnoDB: 虚拟索引记录中虚拟列字段的长度小于预期的模板列长度。(缺陷号 25793677)

  • InnoDB: 在调试版本中,关闭服务器并 --innodb-fast-shutdown=0引发断言。(缺陷号 25756224)

  • InnoDB: ibd2sdi实用程序在不受支持的文件类型上运行时退出(漏洞#25738491)

  • InnoDB: InnoDB打开分区表时没有设置压缩算法。(缺陷号 25685868)

  • InnoDB: 就地ALTER TABLE操作未能设置加密类型,导致 FLUSH TABLES ... FOR EXPORT操作断言。(漏洞#25672779)

  • InnoDB: 注册文件关闭时持有的闩锁导致挂起情况。(漏洞#25658467)

  • InnoDB:innodb_force_recovery在恢复期间,如果设置大于 0 ,准备好的事务将被回滚

  • InnoDB:CREATE TABLE如果未定义主键,则在 NOT NULL 字段上定义具有八个字符前缀的唯一键 的TEXT将引发断言。(漏洞#25647413)

  • InnoDB: 对数据字典表的更新与 InnoDB对全文搜索辅助表的系统表的更新相结合引发了与锁相关的断言。(漏洞 #25610353)

  • InnoDB: 服务器为重建表的操作分配了不必要的内存。(漏洞 #25573565,漏洞 #85043)

  • InnoDB: 旨在模拟不存在页面上的随机读取的测试相关代码引发了无效断言。(缺陷号 25479538)

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

  • InnoDB: 当对引用不存在的外键的表执行操作时,foreign_key_checks 禁用、InnoDB(漏洞 #25365223)

  • InnoDB:TRUNCATE TABLE对 file-per-table 表空间进行操作期间,在从缓冲池中驱逐脏页之前释放了字典操作锁,导致闩锁顺序冲突。(漏洞#25357789)

  • InnoDB:DROP TABLE操作 TRUNCATE TABLE可能会在在线操作失败后引发断言 ALTER TABLE .. ADD INDEX。索引根页面被过早删除。(漏洞#25357789)

  • InnoDB: 当使用索引合并优化器开关时,SELECT COUNT(*)操作有时会返回 0。分区代码错误地执行了memcpy索引读取的列的复制,而不是列复制,导致复制了错误的记录。(漏洞 #25332330,漏洞 #81031)

  • InnoDB: 在将RENAME TABLE表移动到不同模式的操作 InnoDB在重新启动时返回错误,指示它无法找到表空间数据文件。 InnoDB操作期间未能更新 INNODB_SYS_DATAFILES数据字典表RENAME TABLE 。(漏洞 #25189192,漏洞 #84038)

  • InnoDB:ALTER TABLE重建包含虚拟列的表的操作期间, InnoDB无法应用并发插入日志记录。(漏洞#24961167)

  • InnoDB: 由于虚拟列验证问题,无法InnoDB为就地操作应用并发删除日志ALTER TABLE(缺陷号 24960450)

  • 分区: 执行 ALTER TABLE ... OPTIMIZE PARTITION语句后,表使用的表空间名称未保留,随后对该表的访问最终导致服务器失败。(漏洞 #25512556)

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

  • 复制:USE声明后面的 声明SET GTID_NEXT有时没有效果。(缺陷号 26128931)

  • 复制: 当命令FLUSH LOGSPURGE LOGS BEFORE用于设置了到期时间的二进制日志文件并且二进制日志文件正在使用中时,会发出误导性警告。该警告与正在使用的文件有关,并暗示已发生清除尝试,即使尚未达到到期时间。现在,MySQL首先检查二进制日志文件的过期时间,然后才检查该文件是否在使用中。因此,警告仅针对使用中的二进制日志文件发出,该文件已经足够旧,可以被清除。(缺陷号 25973525)

  • 复制: 组现在可以包含运行不同服务器版本的成员,使您能够在线升级复制组。将不同版本的组中的成员合并的规则是:

    • 如果您的群组有 8.0 位成员,则无法添加 5​​.7 位成员

    • 如果您的群组有 5.7 位成员,您可以添加 8.0 位成员,但它仍处于只读模式。当该组包含多个服务器版本时,写入该成员是危险的,应该避免。

    在single-primary group中,如果当前primary离开group,需要选举新的primary,则primary首先从低版本的成员中选出。如果没有找到较低版本的成员,则从较新版本的成员中选择主要成员。(缺陷号 25876807)

  • Replication:binlog_checksum=NONEMySQL服务器启动后设置,然后启动Group Replication,如果出现错误,服务器保持 RECOVERING状态,无法关闭。(漏洞 #25793366,漏洞 #85667)

  • 复制: 既然 XA 事务是分两部分准备和提交的,那么基于语句的复制的问题已经确定。如果在主服务器上提交的两个 XA 事务正在以相反的顺序在从服务器上准备,则可能会发生无法安全解析的锁定依赖关系。基于行的复制不存在此问题。

    因此,XA 事务现在被认为对于基于语句的复制是不安全的。

    • 当 时binlog_format = STATEMENT,对 XA 事务内的 DML 语句发出警告,并且复制可能会因从站死锁而失败。

    • 当 时binlog_format = MIXED,使用基于行的复制记录 XA 事务中的 DML 语句。

    • 当 时binlog_format = ROW,XA 事务内的 DML 语句会像以前一样被记录下来。

    (漏洞 #25786490,漏洞 #85639)

  • 复制: 当性能模式被禁用时,以下性能模式复制表现在继续被填充:

    replication_connection_status例外是复制表、 replication_applier_status_by_coordinator和 中的本地计时信息(事务的开始和结束时间戳) replication_applier_status_by_worker。禁用性能模式时不会收集此信息。(缺陷号 25694813)

  • 复制: 在组复制设置中,在不同复制组的成员之间实现了循环异步复制,视图更改日志事件在组之间重复复制,每次都有新生成的 GTID。该修复确保视图更改日志事件在它们发生的命名复制组之外被忽略,并且永远不会生成新的 GTID。(漏洞#25674926)

    参考资料:另请参阅:Bug #26049695、Bug #25928854、Bug #25721175。

  • 复制: 从 RPM 安装后首次启动 MySQL 服务器时,默认情况下会激活密码验证插件(仅适用于 RPM 安装)。如果此时已经启用了二进制日志记录,则激活会被记录下来,即使插件激活不应记录在二进制日志中。(漏洞#25672750)

  • 复制: 用于执行 XA 事务 的XA STARTXA ENDXA COMMIT和命名相关数据库的过滤器的计数器。这些语句的计数器不再递增。(缺陷号 25669344)XA ROLLBACKreplicate-do-db

  • 复制: 在单主组复制与异步复制相结合的设置中,例如,S1 和 S2 组成一个组,S2 和 S3 充当主从,辅助节点(例如 S2)正在接受事务,然后这些可以进入团体。该修复可防止辅助节点在属于单一主组时创建异步复制通道,并且在运行异步复制时无法启动组复制。(漏洞 #25574200,漏洞 #85047)

    参考资料:另请参阅:Bug #86325、Bug #26078602。

  • 复制:super_read_only如果启用了系统变量, 则组复制无法启动 (漏洞 #25481287,漏洞 #84733)

  • 复制: MySQL 8.0 服务器无法加入包含 MySQL 5.7 服务器的复制组,并且复制组中的 MySQL 5.7 服务器无法升级到 MySQL 8.0。(漏洞#25477979)

  • 复制: 如果成员未能加入组,则该成员不会停止并继续接受事务。为避免这种情况,请将您的成员设置super_read_only=1my.cfg文件中。Group Replication 现在会在成功启动并设置时检查此设置 super_read_only=0。这确保没有成功加入组的成员不能接受交易。(错误#25474736,错误#84728)

  • 复制: 当MySQL 5.7 服务器的 mysqlbinlogoriginal_commit_timestamp输出应用于 MySQL 8.0 服务器时,MySQL 8.0 服务器为. 该修复确保 的值 original_commit_timestamp正确设置为 0,这意味着时间戳未知。(缺陷号 25316086)

  • 复制: 如果服务器是使用该 --log-bin选项启动的,则发现一个具有无效结构的性能模式表会导致所有随后检查的性能模式表也被标记为无效。(漏洞 #25041396)

  • 复制: 当事务隔离级别设置为 时,交错事务有时可能会使从属应用程序死锁 REPEATABLE-READ。(缺陷号 25040331)

  • 复制: 系统slave_skip_errors变量不允许大于 3000 的错误数。感谢 Tsubasa Tanaka 提供的补丁。(错误#24748639,错误#83184)

  • Replication:ER_TRANSACTION_ROLLBACK_DURING_COMMIT was 的 SQL 状态, HY00是通用的,不适合回滚。SQL 状态已修改为 40000。(错误号 24658431)

  • 复制: mysqlbinlog,如果使用该选项调用,则 --raw在进程终止之前不会刷新输出文件。但是,如果还使用该选项调用,则 --stop-never该过程永远不会终止,因此不会将任何内容写入输出文件。现在输出在每个事件后刷新。(漏洞 #24609402)

  • 复制:修复了mysqlbinlog中 的内存泄漏泄漏发生在处理伪造的轮换事件时,或者使用时 --raw无法创建目标日志文件。泄漏仅在处理来自远程服务器的事件时发生。感谢 Laurynas Biveinis 为修复此错误所做的贡献。(漏洞 #24323288,漏洞 #82283)

  • 复制: 如果没有root帐户,组复制插件的加载和初始化失败。(漏洞 #24311527)

    参考资料:另请参阅:Bug #25750822、Bug #25103980、Bug #83841。

  • 复制:当 时, 从服务器可能会丢失尚未应用的事件 MASTER_AUTO_POSITION=0,两个复制线程都已停止,并且使用更改了应用程序延迟 。(漏洞 #23203678,漏洞 #81232)CHANGE MASTER TO MASTER_DELAY=N

    参考资料:另请参阅:Bug #25340185、Bug #84375。

  • 复制: 大型 GCS 消息的传输可能需要很长时间,发送者似乎已经死亡。(漏洞#22671846)

  • 复制:slave_pending_jobs_size_max如果多线程从站需要处理大于该大小的事务,则 不能使用较小的队列大小进行配置 任何大于的数据包 slave_pending_jobs_size_max都被拒绝并出现错误 ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX,即使数据包小于 设置的限制 slave_max_allowed_packet

    通过此修复, slave_pending_jobs_size_max 成为软限制而不是硬限制。如果一个数据包的大小超过 slave_pending_jobs_size_max但小于 slave_max_allowed_packet,则事务会被暂停,直到所有slave worker的队列都为空,然后再处理。所有后续交易都将暂停,直到大笔交易完成。因此,可以限制从属工作者的队列大小,同时仍然允许偶尔进行较大的事务。(缺陷 #21280753,缺陷 #77406)

  • 复制: 中断复制的事件没有写入具有 GTID 的二进制日志,因此无法使用 跳过该事件。相反,有必要直接设置中继日志文件和中继日志位置;这意味着,当启用自动定位时,必须首先禁用它,然后设置中继日志文件和位置,最后重新启用自动定位。 SET gtid_next=value

    现在在这种情况下,MySQL 将事件事件写入语句缓存,以便在刷新之前为它生成并写入一个 GTID,并且从属应用程序可以处理更改。然后用户可以使用 SQL 语句跳过事件 ,后跟和 。(漏洞#19594845)SET gtid_next=valueBEGINCOMMIT

  • 复制:在使用组复制的服务器重启后 发出SHOW SLAVE STATUS FOR CHANNEL 'group_replication_recovery' 导致意外关闭。(缺陷 #85739,缺陷 #25813258)

  • 复制:CHANGE REPLICATION FILTER使用UBSan 运行测试时 使用引起的问题设置空过滤规则(缺陷 #85405,缺陷 #25702297)

  • 复制: 当接收线程在排队事件时持有中继日志上的锁时,客户端正在执行SHOW SLAVE STATUS或被SHOW RELAYLOG EVENTS阻止。(漏洞 #85084,漏洞 #25584734)

  • 复制: 性能模式表的索引 replication_applier_status_by_worker 仅适用于单线程复制。这是因为索引完全依赖于 SQL 线程 ID,而不管是否存在任何 worker。现在在这种情况下,当在从站上启用多线程时,索引还会考虑工作线程 ID。(漏洞 #84646,漏洞 #25444610)

  • 复制: 在某些情况下,master 可以向二进制日志写入一个 last_committed比它应该的值小的值。这可能会导致从服务器在不应该的并行事务中执行,从而导致不一致或其他错误。(缺陷 #84471,缺陷 #25379659)

  • 复制: 使用时 group_replication_ip_whitelist=AUTOMATIC,自动允许私有网络中的 IP,但未正确允许某些 C 类 IP 地址。(缺陷 #84329,缺陷 #25503458)

  • 复制: 当一个现有的 GTID_NEXT 事务被服务器分配了一个冲突的 GTID 时,Group Replication 在检测到两个具有相同 GTID 的事务时生成一个断言。这是因为组复制在冲突检测后生成 GTID,这比主/从复制晚。该修复放宽了一些条件,仅在提交完成时调用,并且添加了一条消息以在 GTID 已被使用时提醒您。(漏洞 #84153,漏洞 #25232042)

  • 复制:ER_INCONSISTENT_ERROR当预期错误号与实际错误号之间存在差异时, 复制应用程序线程返回错误 3002 现在可以通过将 3002 与slave_skip_errors. (缺陷 #83186,缺陷 #24753281)

  • 复制:当使用mysqldump的转储加载数据 时,MySQL 在重启后丢失了它的 GTID 位置

    为了避免出现此问题,该 mysql.gtid_executed表现在自动从 . 制作的转储中排除mysqldump。(漏洞 #82848,漏洞 #24590891)

    参考资料:另请参阅:Bug #87455、Bug #26643180。

  • 复制:binlog_format当有打开的临时表时, 可以设置 (漏洞 #82467,漏洞 #24411680)

  • 复制: 多源复制中一个通道的中继日志损坏导致服务器重启期间无法初始化良好的通道。此外,当使用 运行时 --skip-slave-start=false,服务器也无法为那些状况良好的通道启动从属线程,尽管事实上它应该为所有良好通道启动从属线程。

    现在,不管其他通道上的任何错误,服务器都会尝试创建和初始化状态良好的通道,并在 --skip-slave-start禁用时为良好通道启动从属线程。作为此修复的一部分,START SLAVE旨在 STOP SLAVE在所有通道上运行的 和 也进行了修改,以便它们继续在所有良好通道上执行,即使它们在其中发现不良通道也是如此。(漏洞 #82209,漏洞 #24285104)

  • 复制: SQL 线程无法通过 GTID 跳过部分事务。(漏洞 #81119,漏洞 #25800025)

  • 复制: 可以FLUSH LOGS将 aRotate_log_event写入未初始化的日志文件。(错误#80368,错误#22732184)

    参考资料:另请参阅:Bug #23531998、Bug #81734。

  • Microsoft Windows: 在 Windows 上,Docs/INFO_SRC文件缺少build-date条目。(缺陷号 25799855)

  • JSON: NULLIF()如果在 JSON 上下文中使用此函数的结果,则在调试构建中失败并出现断言错误。现在可以将此结果安全地用作 JSON 值。

    此修复包括使用DBUG_ASSERT()来处理此错误而不是DBUG_ABORT(),这会在某些平台上导致调试问题。(漏洞#25818544)

    参考资料:另请参阅:Bug #21383497、Bug #21383530。

  • JSON: 内部Json_array现在使用 a std::vector而不是 a Prealloced_array来存储其元素,这减少了它们所需的堆空间量。(错误#85877,错误#25867454)

  • 当一个字符串比较操作数的字符集是另一个操作数的字符集的超集时,一些比较被禁止,而这些比较应该通过将具有较小字符集的操作数转换为较大字符集来允许。 utf8mb4并且utf32被认为是任何其他编码的超集。(错误#27897053、错误#25642319、错误#85224)

  • RPM 包中的mysqld_pre_systemd脚本在选项文件中找到错误日志设置,如果指定为log-error但不是 as log_error,尽管两者都是允许的。(错误#26148391,错误#86466)

  • ALTER TABLE ... ADD PARTITION语句可能导致服务器退出。(漏洞#26132947)

  • SET PERSIST不适用于 X 插件系统变量。(漏洞 #26115672)

  • REFERENCES在某些情况下,特权检查可能会使用不正确的数据库。(漏洞 #26106655)

  • 由于gtid_mode未在选项文件或命令行中设置系统变量.cnf,服务器无法在使用 SET PERSISTSET GLOBAL设置 gtid_modeON_PERMISSIVE. (缺陷号 26085712)

  • 在准备好的语句执行期间,可能会读取过多的缓冲区字节。(缺陷 #26042934,缺陷 #85937)

  • --initialize使用该选项 启动服务器时未加载动态权限。(漏洞 #26005645)

  • Linux: MySQL 8.0 的通用 Linux 构建现在支持其主机系统上的非统一内存访问 (NUMA)。使用构建的系统需要 libnuma安装在它们上面。有关详细信息,请参阅 使用通用二进制文件在 Unix/Linux 上安装 MySQL。(漏洞 #26005558)

  • Debian 客户端包缺少有关与 akonadi-backend-mysql 包冲突的信息。(漏洞 #26002288)

  • mysqldumpUSE可能会在语句中错误地写入数据库名称 (缺陷号 25998635)

  • 如果mysql_stmt_close()调用 C API 函数,它会释放内存,以后可以在调用mysql_stmt_error()mysql_stmt_errno()mysql_stmt_sqlstate()时访问这些内存。要在调用 之后获取错误信息 mysql_stmt_close(),请调用 mysql_error()mysql_errno()mysql_sqlstate()。(缺陷号 25988681)

  • 由于表名超过 64 个字符的长度限制,因此在创建数据字典期间从 MySQL 5.7 升级到 MySQL 8.0 失败。(缺陷 #25973237,缺陷 #86120)

  • InnoDB 在这些情况 下,查询可能会被错误地缓存,从而导致不正确的查询结果:正在插入但尚未提交的行;查询使用该表作为派生表中的基表;优化器选择具体化派生表。(漏洞 #25943038,漏洞 #86047)

  • 如果在启用 AddressSanitizer 的情况下编译并使用 --basedir=(即,使用空选项值)调用,则mysqld行为不正常。(错误#25914296,错误#85994)

  • ST_LatFromGeohash()和 函数不允许来自 列ST_LongFromGeohash()的 数据。(缺陷 #25912557,缺陷 #85981)ST_PointFromGeohash()CHAR

  • 尝试从具有多个数据文件的表空间中删除数据文件返回了重复文件名错误。(缺陷号 25858461)

  • 在数据字典客户端方法声明中添加了一个属性,以便在忽略返回值时生成编译警告。(缺陷号 25840927)

  • 简化了数据字典类层次结构。(漏洞 #25835968,漏洞 #85811)

  • Dictionary_client::update删除了阻止对同一对象调用两次 数据字典对象更新函数 ( ) 的限制。(缺陷 #25833932,缺陷 #85800)

  • 在 Ubuntu 平台上,如果运行脚本的用户没有访问数据目录或 PID 文件的权限,则 MySQL 服务脚本不会正确终止。(漏洞 #25825833)

  • 该字段上的字符串比较查询 INFORMATION_SCHEMA.CHARACTER_SETS.DESCRIPTION 区分大小写,这是对早期版本的回归。(漏洞 #25824297)

  • Debian/Ubuntu 软件包中缺少一些实用程序的手册页。(漏洞#25811814)

  • 在模式下执行的INFORMATION_SCHEMA视图LOCK TABLES,使用 SERIALIZABLE隔离级别并autocommit禁用,无法使用非锁定读取,这可能会阻止 DDL 操作或导致死锁。(漏洞#25811413)

  • 如果表被触发器使用,而另一个数据库中存在同名触发器并且数据库名称仅在字母大小写上不同,则可能会发生表锁定失败。(缺陷号 25807393)

  • .TRG 如果文件缺少created触发器定义行, 就地 MySQL 升级将失败。(从 MySQL 5.7 升级到 MySQL 8.0 不太可能出现此问题,因为该 created行存在于 MySQL 5.7.2 及更高版本。)(错误 #25805260,错误 #85704)

  • field-t单元测试无法在启用 AddressSanitizer 的情况下运行 。感谢 Laurynas Biveinis 提供补丁。(漏洞 #25803823,漏洞 #85678)

  • Debian 客户端包缺少有关与本机包冲突的信息。(漏洞#25799475)

  • 表的CREATE_OPTIONSINFORMATION_SCHEMA.TABLES被视为具有binary排序规则,因此功能如UPPER()LOWER()没有预期的结果。(漏洞#25793429)

  • 导入包含 DECIMAL列的表后,访问该表会引发断言。(漏洞#25792649)

  • ALTER TABLEutf8mb4由于不正确的列长度计算,当默认字符集更改为时可能会失败。(漏洞 #25779239,漏洞 #85614)

  • 如果组件deinit()方法失败,组件仍然被卸载。(缺陷号 25764325)

  • 对于密码过期的帐户,存储程序的执行可能会失败, DEFINER即使这些帐户被锁定并且无法用于连接到服务器。现在DEFINER,如果帐户被锁定,则不会检查过期密码。(漏洞#25741966)

  • DISTINCT由于分配的比较键太小,对临时表的操作可能会产生不正确的结果。(漏洞 #25740550,漏洞 #85518)

  • 在优化器跟踪输出中,num_tmp_files实际上并未指示文件数。它已重命名为 num_initial_chunks_spilled_to_disk并指示发生任何合并之前的块数。(错误#25733784,错误#85487)

  • #!Perl 脚本开头行中 的 Perl 路径已/usr/local/bin/perl针对 FreeBSD 11 进行了调整。(缺陷 #25719975)

  • 启用 SQL 模式后,语法错误消息始终将IGNORE_SPACE第 1 行报告为行号。(漏洞#25717617)

  • mysqldump未能在写入转储输出的 SQL 语句中正确引用某些标识符。(缺陷号 25717383)

  • 删除没有关联表空间文件的表空间失败,并出现错误,指出表空间字典对象无效。(漏洞 #25717019)

  • 服务器的客户端预授权缺少对长度编码字符串的长度检查。(漏洞#25714674)

  • 在调试版本中,CREATE TABLESPACE操作在使用 NDB 存储引擎时引发了无效断言。检查零长度数据文件的验证函数不适用于 NDB 表空间并被删除。(缺陷号 25700242)

  • 对于调试版本,EXPORT_SET() 操作可以为某些参数提出断言。(漏洞#25688192)

  • 对于调试版本,为 Bug#59686 添加的断言过于严格,可能会在不应该出现的时候出现。(缺陷号 25685958)

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

  • MySQL 8.0.1 中的代码重构导致在调试版本中出现多个断言。(错误#25669590、错误#25669606、错误#25669580、错误#25688504)

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

  • 对于某些双精度计算,在计算指数部分时可能会发生溢出。(缺陷 #25664323,缺陷 #85290)

  • SHOW INDEXFULLTEXT对于在多个列上定义的索引,输出不一致。(缺陷号 25659276)

  • 在组提交期间,堆栈可能会错误地报告为耗尽,从而导致堆栈溢出。(缺陷号 25656875)

  • 就地(二进制)升级可能会更改存储例程的默认值 character_set_clientcharacter_set_connection变量,从而可能导致不同的例程行为。(缺陷号 25633041)

  • 对于调试版本,分区处理程序可能不恰当地评估语句中生成的列表达式 UPDATE,从而导致引发断言。(漏洞 #25615803,漏洞 #85179)

  • 在严格的 SQL 模式下, ER_TRUNCATED_WRONG_VALUE错误可以从警告转换为错误但随后被忽略,从而导致引发断言。(错误#25586959,错误#25586673)

  • 包含具有几何数据类型的列ALTER TABLEARCHIVE表 发生故障。NOT NULL对于调试版本,提出了一个断言。对于非调试版本,发生错误。(漏洞 #25582178,漏洞 #85059)

  • 对于调试版本,可以为 DROP TRIGGER视图使用的表的触发器引发断言。(漏洞 #25581925)

  • 对于从 MySQL 5.7 升级到 MySQL 8.0,服务器将不必要的解析警告写入错误日志。这些消息现在被抑制了。(漏洞 #25518436,漏洞 #84889)

  • 服务器异常退出试图访问无效的内存。(漏洞 #25501659)

  • name数据字典表中字段 的最大长度column_type_elements已从 255 字节扩展到 1020 字节,以适应使用多字节字符集可能产生的 longENUM和 值。SET

    使用多字节字符集时,单个 ENUM或元素在数据字典中的列类型定义中SET最多占用Mx 字节,其中为元素字面量长度,为字符集中最大长度字符所需的字节数. wMw

    在以前的版本中,单个 ENUMSET元素的最大支持长度取决于类型中元素的数量。因此,可能有 ( Mx w) = 64K 的单个元素,或 ( Mx w) = 1 的 64K 元素。

    单个 ENUMSET元素的最大支持长度现在 M<= 255 且 ( Mx w) <= 1020,无论类型中的元素数量如何。(漏洞 #25481355)

  • 通过mysqldTCP 包装器保护以及配置为限制来自 IP 地址的访问的 hosts.allowhosts.deny文件,来自该地址的连接尝试导致错误日志中的消息过多。(漏洞 #25476479,漏洞 #84708)

  • mysqlpump不再包括 系统数据库转储中的 slave_master_info和 表。恢复包含这些表的转储文件会因不正确地更改复制状态而导致问题。(漏洞#25469190)slave_relay_log_infomysql

  • 通过调用 mysql_options()set 所做的更改MYSQL_OPT_SSL_MODE可能会受到以后 mysql_options()调用的影响。现在设置MYSQL_OPT_SSL_MODE不受以后mysql_options()调用的影响。(漏洞#25452210)

  • CREATE TABLE带有DATA DIRECTORYorINDEX DIRECTORY 子句 的语句可能会出现竞争条件。(漏洞 #25451091)

  • 启用 AddressSanitizer 后,编译 keyring_file插件会产生单一定义规则违规。(漏洞 #25448205)

  • ALTER TABLE ... MODIFYDATETIME NOT NULL列上使用AFTER 子句导致 ER_INVALID_USE_OF_NULL错误。(缺陷号 25385334)

  • 范围优化器可能会创建不正确的查询树,从而导致服务器退出。(错误#25369742,错误#25586531)

  • --datadir如果用相对路径名指定该选项,则mysqld_failed无法启动服务器 (缺陷号 25364806)

  • XA PREPARE, XA ROLLBACK, 和 XA COMMIT对于来自断开连接的会话的事务没有获取全局提交锁并且 InnoDB即使 FLUSH TABLES WITH READ LOCK在生效时也修改了二进制日志和重做日志。当备份工具假定服务器处于只读状态时,这可能会导致备份不一致。(错误#25364178,错误#84442)

  • GROUP_CONCAT(DISTINCT)如果数据大小大于tmp_table_size系统变量的值,则返回非唯一值。(漏洞 #25331425,漏洞 #84320)

  • Bug #78777 的修复有不同的效果,具体取决于是否启用了 Performance Schema。(漏洞 #25309017,漏洞 #84305)

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

  • 某些嵌套查询中的聚合函数可能会导致服务器退出。(漏洞 #25303711)

  • 如果更改连接字符集,使用 、 或 函数的虚拟生成列表达式可能会BIN_TO_UUID()导致 CONV()问题 。 HEX()在此上下文中,表字符集现在用于这些函数,而不管连接字符集如何。(缺陷号 25287633)

  • 如果启用了系统变量 ,Rewriter插件不会正确执行锁定。read_only(缺陷号 25264253)

  • read_only启用后,在特定条件下允许非用户创建 非表TEMPORARYSUPER(缺陷号 25250768)

  • 对于具有默认值为TIMESTAMP或 的列 的表,如果表具有触发器,则可以将该列初始化为。(漏洞 #25209512,漏洞 #84077)DATETIMECURRENT_TIMESTAMP0000-00-00 00:00:00'BEFORE INSERT

  • 在 Windows 上,输出TimeSHOW PROCESSLIST随时间漂移。(漏洞 #25101724,漏洞 #83019)

  • 当服务器引导程序中的创建函数尝试评估未解析的表达式时,会引发断言。(漏洞#24961932)

  • 减少了数据字典缓存查找的次数, ALTER TABLE改进了触发器的处理,有助于确保在ALTER TABLE 处理过程中服务器退出时触发器的持久性。(缺陷 #24930129,缺陷 #83473)

  • 如果启用了系统变量的标志,则针对InnoDB使用主键和子查询的表的 某些查询可能会返回不正确的结果。(缺陷 #24829050,缺陷 #79675)index_merge_intersectionoptimizer_switch

  • 在 x86 机器上,uint3korr()宏读取 4 个字节的数据而不是预期的 3 个字节。(漏洞 #24807826,漏洞 #83264)

  • 在 memcached 插件的提取操作期间引发了断言。(漏洞 #24605783)

  • 包含UNION在子查询中并GROUP BY可能返回不正确结果的查询。(漏洞 #24595639)

  • 一些语法上不正确CREATE INDEX的语句可能会导致服务器退出而不是语法错误。(漏洞 #24593992)

  • 如果 innodb_table_statsinnodb_index_stats表不在mysql系统数据库中,就地 MySQL 升级失败。(从 MySQL 5.7 升级到 MySQL 8.0 应该不会出现这个问题,因为这些表存在于 MySQL 5.7 中。)(缺陷 #24557143)

  • 如果子句 的一部分引用列列表中的值 INSERT,则在存储程序或准备语句上下文中执行的语句 可能会出现不正确的行为 。(错误#24538207、错误#25361251、错误#25530880、错误#25684790)VALUESON DUPLICATE KEY UPDATEBLOBINSERT

  • Debian 软件包中的 systemd 支持脚本包含对数据目录的硬编码引用,因此很难使用 --datadir. (漏洞 #24398446,漏洞 #82417)

  • MySQL 无法使用 Clang 在 macOS 10.10.5 下编译。(漏洞 #24352163,漏洞 #82340)

  • 如果REPLACE语句试图更新包含 类型的虚拟生成列的表中的行BLOB,则后续 DML 语句的行为可能不正确。(漏洞 #23573575)

  • 一些PROXY授权没有复制到从属,导致不正确的复制。(错误#23289541、错误#81424、错误#23623115)

  • EXPLAINfor single-table UPDATEor DELETEstatements 可能会引发断言,试图优化子查询。(漏洞 #23209903)

  • 改进了mysqlxtest 的帮助输出。(漏洞 #23107137,漏洞 #81086)

  • 对于启用了 AddressSanitizer 的构建,该 ST_Simplify()函数可能会尝试使用已释放的内存。(缺陷号 23023817)

  • keyring_file 编译器标志进行了调整,以消除使用 Clang 编译插件时出现的大量警告。(缺陷 #22834591,缺陷 #80524)

  • 如果启用 Event Scheduler 导致定义为 ON COMPLETION NOT PRESERVE被删除的事件,因为它的执行时间已经过去,则删除事件不会写入二进制日志,导致从属不复制它并且如果稍后创建同名事件则复制失败. (缺陷号 22150112)

  • 对于某些CREATE TABLE ... SELECT语句,添加一个ORDER BY子句会更改列数据类型,或导致为调试版本引发断言。(漏洞#16833464)

  • LOAD XML当读取的 XML 文件包含大量空格时,性能会明显变慢,例如通过缩进或漂亮打印引入的空格。现在,在将每个这样的值读入内存之前,所有前导空格都会被删除。(漏洞 #16212207)