Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.27 的变化(2019-07-22,正式发布)

MySQL 5.7.27 的变化(2019-07-22,正式发布)

钥匙圈笔记

  • keyring_aws插件已更新为使用最新的 AWS 加密 SDK,因此它适用于 OpenSSL 1.1。

    keyring_aws_region变量支持新 SDK 支持的其他 AWS 区域。有关支持的 AWS 区域列表,请参阅变量描述。

包装说明

  • 包含curl而不是链接到系统curl库的二进制包现在使用 curl7.64.0。(漏洞#29357198)

X 插件说明

  • 在 Windows 上,X 插件记录了一些不必要或信息不足的消息。这些消息已被适当删除或改进。(漏洞 #27839153)

添加或更改的功能

  • Microsoft Windows: 一条新的警告消息现在提醒 DBA,在 Windows 上使用 MySQL 命名管道建立的连接限制了连接器可以在命名管道上请求的权限。

    以前, named_pipe_full_access_group 系统变量默认设置为映射到内置 WindowsEveryone组 (SID S-1-1-0) 的值。但是,这个组并不理想,应该替换为一个限制其成员资格的组,这些连接器无法在 MySQL 命名管道上请求更少的权限。

    named_pipe_full_access_group如果分配给的字符串值是 '*everyone*'(或等效的 Windows 系统语言)并且启用了命名管道,则 新警告将在启动时写入错误日志 。此外,如果Everyone 在运行时将系统变量重置为组,警告将写入错误日志并向客户端发出。

修正错误

  • InnoDB: rw-lock 实现中的内存屏障不足导致 ARM 出现死锁。

    感谢 Arm Technology 的 Yibo Cai 做出的贡献。(漏洞 #29508001,漏洞 #94699)

  • InnoDB: 在 MySQL 服务器运行时手动更改系统时间导致页面清理器线程延迟。(缺陷 #29138644,缺陷 #93708)

  • InnoDB: 在日志应用期间,在OPTIMIZE TABLE操作之后,InnoDB在检查虚拟列索引更新之前没有填充虚拟列。(缺陷号 28834208)

  • InnoDB:INSERT涉及生成的虚拟 的BLOB导致二级索引被更新为不正确的值。(漏洞#28652826)

  • InnoDB: 如果全文缓存大小超过全文缓存大小限制,则不会释放数据同步时获取的全文缓存锁。(缺陷号 25289359)

  • InnoDB:在执行并发插入操作时 使用不同 auto_increment_increment值的客户端会话可能会导致重复键错误。(错误#15851528,错误#67526)

    参考资料:恢复的补丁:Bug #14049391,Bug #65225。

  • 分区: 当分区表具有使用不同行格式的分区时,即使要交换的分区使用与非分区表相同的行格式,ALTER TABLE ... EXCHANGE PARTITION的错误 Non matching attribute 'ROW_FORMAT' 也会失败。(漏洞#28687608)

  • 复制: 针对组成员数量和自增间隔之间的差异发出的错误消息错误地引用了 group_replication_auto_increment_increment 系统变量,而不是 auto_increment_increment系统变量。的值 auto_increment_increment更改为 group_replication_auto_increment_increment 组复制启动时指定的值,但前提是 auto_increment_incrementauto_increment_offset具有它们的默认值,并且从 MySQL 8.0 开始,仅在多主模式下。的值 auto_increment_increment始终是为错误消息检查的值,现在已更正以提供准确的系统变量名称。(漏洞#29542425)

  • 复制: 当一个 MySQL 服务器实例生成的事件被写入另一个实例的二进制日志时,第二个服务器隐含地假设第一个服务器支持与它自己相同数量的二进制日志事件类型。如果不是这种情况,则事件标头处理不正确。该问题现已解决。感谢 Facebook 的贡献。(缺陷 #29417234,缺陷 #94500)

  • 复制: 在组复制中,加入成员可能会错误地将自己标识为与现有复制组不兼容,即使组中已经有相同版本的成员,因为他们检查所有其他成员,包括最高版本的成员。加入成员还在兼容性检查中包括了他们自己的版本。现在,加入成员只会在最低版本上与已有的群成员进行比较,不计入自己的版本。(缺陷 #29390946,缺陷 #94429)

  • 复制: 如果FLUSH LOGS在二进制日志文件初始化之前发出一条语句,则该语句试图将二进制日志轮换事件写入未初始化的文件。服务器现在首先检查二进制日志文件是否可用。(漏洞 #29201665)

  • 复制:MEMORY服务器重启后主服务器上的表被隐式删除时,主服务器将一条 DELETE语句写入二进制日志,以便从服务器也清空该表。DELETE这个生成的事件现在在二进制日志中包含一条注释,这样就很容易识别该语句的原因感谢 Daniël van Eeden 的贡献。(缺陷 #29157796,缺陷 #93771)

  • 复制: 在使用基于语句的复制的情况下,如果 super_read_only设置为 ON,事务将写入二进制日志并分配一个 GTID。在这种情况下,交易现在被阻止。从 MySQL 8.0 开始,在 super_read_only事务处理过程中不能更改 的值。(缺陷 #29009092,缺陷 #93440)

  • 复制: 用于组复制的组通信引擎(XCom,一种 Paxos 变体)没有以适当的方式处理内存不足错误。如果无法分配内存来复制消息的有效负载,则会记录错误,但仍会发送消息,但有效负载为空。接收成员上的组通信系统 (GCS) 将消息丢弃为空,接收成员上的 XCom 实例接受了此操作并且没有重试,导致消息被有效地跳过。这导致接收成员上设置的 GTID 与组不同,从而导致复制错误。如果 XCom 遇到内存不足错误,它现在会正常终止,这样就不会发生这种情况。

  • Replication: 在二进制日志中的查询日志事件中,用于执行DROP TABLEand DELETE语句的线程ID被错误识别或根本没有识别。在涉及临时表的多线程复制从站上(需要正确的线程 ID,因为它们是特定于会话的),这种遗漏导致在使用mysqlbinlog重放二进制日志以进行时间点恢复时出错。线程 ID 现在已正确设置。(错误#28642318,错误#92398)

  • 复制: 当从服务器将主服务器状态和连接信息记录到表 (master_info_repository=TABLE) 时,这是 MySQL 8.0 中的默认设置, mysql.slave_master_info如果服务器处于超级只读模式 (super_read_only=ON). 此时没有错误写入错误日志,但服务器启动后复制失败,因为主日志文件和主日志位置信息已过时。在关闭时更新主信息日志的线程现在像其他复制线程一样被排除在只读检查之外,因此即使服务器处于超级只读模式,它也可以更新表。正在关闭的从站的错误处理也得到了改进,因此任何写入从站状态日志的失败都会导致错误日志中出现错误。(错误#27675107,错误#89987)

  • 在对存储的程序本地对象进行排序期间,可能会出现过于严格的断言。(缺陷 #29759547,缺陷 #95062)

  • 从 RPM 包安装可能会导致错误日志中包含不正确的权限。(漏洞 #29702462)

  • 启用审核日志加密可能会导致服务器退出。(漏洞 #29549327)

  • mysql.service在 Debian 和 Ubuntu 上,MySQL 包在从本机 MySQL 包升级后 未启用 。(漏洞#29435592)

  • 发生错误时服务器未正确关闭共享内存连接,这可能会导致意外的服务器行为。(漏洞#29435426)

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

  • 解析器可能会泄漏某些多语句查询的内存。(漏洞 #29419820)

  • CREATE USER并且在与语法ALTER USER 一起使用时不检查散列身份验证字符串的有效性。(漏洞#29395944)IDENTIFIED WITH auth_plugin AS 'hash_string'

  • 对于InnoDB在列上包含索引VARCHAR并在 MySQL 5.7.23 之前创建ALTER TABLE的表,在升级到 MySQL 5.7.23 或更高版本后,通过表重建执行了一些本应就地完成的简单语句。(缺陷 #29375764,缺陷 #94383)

  • HANDLER语句并不总是能正确处理具有生成列的表。(漏洞 #29300049)

  • 客户端/服务器协议中的会话跟踪信息可能处理不当。(缺陷号 29297652)

  • 启用 SQL 模式后 PAD_CHAR_TO_FULL_LENGTH,密码更改失败,没有警告或错误报告。(漏洞#29287785)

  • audit_log插件没有记录 UNINSTALL PLUGIN audit_log语句。(缺陷号 29248047)

  • audit_log过滤操作可能会泄漏内存。(漏洞 #29201747)

  • 如果列在外键关系中具有基列,则在虚拟生成列上定义的索引可能无法更新。(缺陷 #29127203,缺陷 #93670)

  • 删除某些 Performance Schema 表的权限检查不正确。(漏洞 #29010031)

  • 使用包含 的派生表的查询 ORDER BY并不总是被正确处理。(漏洞 #28942965)

  • 基列未被生成列排除在仅索引访问之外。(漏洞#28652733)

    参考资料:另请参阅:Bug #29664369。此问题是 Bug #23169112 的回归。

  • 当线程进程滴答时间超过最大允许值时,线程池组可能会被阻塞。滴答时间现在使用更大的数据类型来允许更大的值。(缺陷号 28072609)

  • MySQL 不支持 OpenSSL 会话票证,但没有设置SSL_OP_NO_TICKET标志来通知 OpenSSL。现在已经设置了标志。(漏洞#27655493)

  • audit_null插件未正确检查空事件记录。(漏洞 #27638290)

  • UpdateXML()在某些情况下并不总是正确释放内存。(漏洞#27312862)

  • name系统表列中的 空值mysql.plugin导致服务器在启动期间退出。(漏洞#27302459)

  • 启用插件后thread_pool,Performance Schemastatus_by_thread 表不包含任何数据。(缺陷号 25933891)

  • 如果INSTALL PLUGIN语句在共享库名称中包含无效的 UTF-8 字符,则会导致服务器挂起(或在调试版本中引发断言)。(错误#14653594,错误#23080148,错误#27167197)

  • 不同半连接嵌套的内表在物化过程中交错,这可能导致同一查询在使用不同的查询计划时得到不同的结果。为了防止这种情况发生,添加了一个检查以防止这种交织。(缺陷 #92809,缺陷 #28835179)

  • 涉及列的查询GROUP BY导致 TIMESTAMP键 ( ER_DUP_ENTRY) 错误的重复条目。当使用给定的时区设置将值插入到表中并且这些值稍后在时区设置更改后获取时会出现此问题TIMESTAMP,这样至少有一些插入的 TIMESTAMP值发生在时间更改的那个小时内从标准时间到新时区的夏令时 (DST),在此期间相同的 TIMESTAMP值可以存在两次。现在,当服务器返回错误DUPLICATE ENTRY FOR KEY ' group_key'时,如果分组涉及TIMESTAMP列,它反而会引发错误Grouping on temporal is non-deterministic for time zones having DST。请考虑为此查询切换到 UTC。

    此外,建议设置 explicit_defaults_for_timestampON以及 MODE_NO_ZERO_IN_DATEMODE_NO_ZERO_DATEMODE_INVALID_DATES作为服务器 SQL 模式的一部分,以帮助避免此问题。(缺陷 #90398,缺陷 #27970159)