Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.31 的变化(2020-07-13,正式发布)

MySQL 5.7.31 的变化(2020-07-13,正式发布)

配置注意事项

  • tcmalloc不再是mysqld_safe --malloc-lib选项的允许值。(缺陷号 31372027)

包装说明

  • libevent与 MySQL 捆绑 的库已升级到版本 2.1.11。另外,对于 CMake选项,做了如下两处改动: WITH_LIBEVENT

    1. yes不再允许作为 . 的同义词system。改用system

    2. 如果system指定但未 libevent找到系统,则不再使用捆绑版本来代替缺少的系统库,而是发生错误。

    (缺陷号 30926742)

安全说明

修正错误

  • InnoDB:定义为模块所有者的计数器 的INNODB_METRICSAVG_COUNT_RESETMETRIC_AVG_VALUE_RESET字段被错误地标记为 NULL。感谢 Fungo Wang 的贡献。(漏洞 #31084706,漏洞 #98990)

  • InnoDB: 当历史列表长度接近零时,清除线程活动过多,浪费 CPU 资源并导致互斥锁争用。(缺陷号 30875956)

  • InnoDB: 服务器间歇性失败,出现ibuf 游标恢复失败错误。(漏洞 #30770380,漏洞 #91033)

  • InnoDB:关闭期间发生 致命的页面仍然固定或脏错误。(缺陷 #29759555,缺陷 #95285)

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

  • 分区: 针对使用 的分区表的查询 ORDER BY在以下条件下返回无序结果:

    • 该表有一个复合索引,其中一列带有前缀。

    • 查询的WHERE子句包含前缀列的相等条件。

    • 带有前缀的列是索引中最左边的列。

    • 中使用的ORDER BY列是索引中最右边的列。

    • 该索引用于处理ORDER BY.

    感谢韩全安的建议。(漏洞 #84070,漏洞 #25207522)

  • 复制: 当复制源服务器关闭并重新启动时,其 MEMORY表变为空。为了将此效果复制到副本,源在启动后第一次使用给定 语句MEMORY写入二进制日志来通知副本必须清空DELETE以前,生成的DELETE语句被写入当前会话的二进制日志语句缓存,这可能导致它与同一 GTID 下的其他语句一起记录,或者在没有 BEGIN语句COMMIT 。此外,在某些情况下,生成的 DELETE语句可以使用用于触发它的事务的 GTID。生成的DELETE语句现在与伴随的语句一起记录,BEGIN生成 COMMIT的事务在写入语句缓存后立即刷新到二进制日志,因此它始终接收自己的 GTID 并与其他事务分开。(错误#30527929,错误#25681518,错误#77729)

  • 复制: 如果它们与组成员的更改同时发生,则从组复制到性能模式的内部查询对本地组成员的统计信息失败。改进了内部查询的锁定以解决此问题。(错误#30049349,错误#30791583,错误#30963553)

  • 复制: 在 MySQL 8.0.14 和 MySQL 5.7.25 中针对涉及系统变量的死锁场景进行了修复, binlog_transaction_dependency_trackingbinlog_transaction_dependency_history_size 具有使用于事务依赖性跟踪的写入集历史不受并发更新保护的副作用。写入集历史记录和跟踪模式现在在访问时被正确锁定。(缺陷 #29719364,缺陷 #95181)

    参考资料:另请参阅:Bug #28511326、Bug #91941。

  • 配置 -DWITH_EDITLINE=system导致旧库版本的编译失败。(缺陷号 31366715)

  • 以前的 MySQL 发行版中捆绑库的升级libedit导致使用该库的构建出现问题,因此 在某些情况下, mysql客户端中的CTRL + C (SIGINT) 需要以下 Enter 才能生效。(缺陷号 31360025)

  • CONCAT('')将or 分配CONCAT_WS('')给变量将变量设置为NULL,而不是空字符串。(错误#31320716、错误#99485、错误#31413167、错误#99722)

  • 用户定义的gen_range()函数可能对其参数处理不当,导致服务器退出。(缺陷号 30763294)

  • UPDATE处理过程中,将内部内存表转换为 InnoDB可能会导致密钥长度错误。(缺陷号 30674616)

  • 可以定义一个名为* (单个星号字符)的列,但SELECT `*` 被视为与 相同SELECT *,因此不可能在查询中仅选择该列;换句话说,星号字符被扩展为所有表列的列表,即使它被反引号包围。(缺陷号 30528450)

  • 内部数据包长度函数返回错误整数类型的值。(缺陷号 30139031)

  • mysqldump对语句长度的 计算INSERT没有考虑_binary用于VARBINARY 字符串的字符集引入器。(缺陷 #29998457,缺陷 #96053)

  • 内部方法Field_tiny::pack()并不总是按预期执行边界检查。(缺陷号 29948029)

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

  • mysql_store_result()可能无法检测到无效的数据包。(漏洞#29921423)

  • UPDATE更新首张表key的多表中,如果使用临时表策略,可能会在临时表中写入重复的条目,导致Can't find record错误。(漏洞 #28716103)

  • 优化器可能会尝试将伪表作为表来访问,从而导致意外的服务器行为。(漏洞 #28651673)

  • 服务器有时会在优化查询时错误地删除带有 a 的子 GROUP BY查询,即使在某些情况下该子查询被外部选择使用。当子查询也使用聚合函数时,可能会发生这种情况。(缺陷号 28240054)

  • 功能的可强制性NAME_CONST() 评估不正确。(缺陷号 26319675)

  • 当优化器在生成的列上选择索引来获取值时,可能会出现不正确的结果。(错误#24345509,错误#29451999)