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

MySQL 5.7.29 的变化(2020-01-13,正式发布)

审核日志说明

  • ANALYZE TABLE语句现在产生read审计事件。(漏洞 #29625461)

包装说明

  • 包含curl而不是链接到系统curl库的二进制包已升级为使用curl7.66.0。(缺陷号 30356844)

修正错误

  • InnoDB: os_file_get_parent_dir使用 GCC 9.2.0 编译 MySQL 时遇到警告。(漏洞 #30499288,漏洞 #97466)

  • InnoDB: 一个内部函数 (btr_push_update_extern_fields()) 用于获取新添加的外部存储字段并在悲观更新期间或不再需要返回到以前版本的记录时更新它们。新添加的外部存储字段由不同的函数更新。此外,用于确定外部存储字段数量的方法已得到更正。(缺陷号 30342846)

  • InnoDB: 比较函数在尝试合并空间索引的非叶页时发现两条记录相等。该函数无法处理这种意外情况,导致长时间的信号量等待和最终的断言失败。(缺陷号 30287668)

  • InnoDB: 由于使用不同DATA DIRECTORY子句定义源表和目标表而失败的表空间导入操作报告了描述性不足的模式不匹配错误。此外,如果 .cfg文件不存在,相同的操作将引发断言失败。在导入操作因数据目录不匹配而终止之前,现在在这两种情况下都会报告一条信息更丰富的错误消息。(错误#30190199、错误#30190227、错误#20644698、错误#76142)

  • InnoDB:btr_cur_will_modify_tree()检测修改记录是否需要修改树结构 的函数使用的条件 (缺陷号 30113362)

  • InnoDB: 操作ALTER TABLE ... DISCARD TABLESPACE导致挂起情况。(错误#29942556,错误#30324703)

  • InnoDB: 通过禁止会话临时表的不必要的隐式到显式二级索引锁转换来解决代码回归问题。(缺陷号 29718243)

  • InnoDB: 当游标位于损坏的页面上并清除删除标记的记录时,表空间导入操作引发断言。导入操作现在终止并报告错误,而不是在遇到损坏的页面时断言。(缺陷 #29454828,缺陷 #94541)

  • Replication: 当成员加入或重新加入复制组时,如果Group Replication检测到分布式恢复过程中出现错误(在此期间加入成员从现有在线成员接收状态转移),它会自动切换到新的捐赠者,并且重试状态转移。加入成员在放弃前重试的次数由 group_replication_recovery_retry_count 系统变量设置。Performance Schema 表 replication_applier_status_by_worker 显示导致上次重试的错误。以前,只有在组成员配置了并行复制应用程序线程(由 slave_parallel_workers系统变量)。如果群组成员配置了单个applier线程,每次重试后都会通过内部RESET SLAVE操作清除错误,因此无法查看。SHOW SLAVE STATUS无论是单个应用程序线程还是多个应用程序线程,命令的输出也是如此。RESET SLAVE现在重试分布式恢复后不再执行该 操作,因此始终可以查看导致上次重试的错误。(错误#30517160、错误#30517172、错误#97540)

  • 复制: 当失败的复制组成员试图重新加入少数组但被禁止这样做时,可能会发生内存泄漏。(漏洞 #30162547,漏洞 #96471)

  • 复制:CHANGE MASTER TO如果使用未指定主日志文件名和主日志位置 的语句设置复制从属 START SLAVE发出之前关闭,然后使用 --relay-log-recovery设置的选项重新启动,复制不会启动。发生这种情况是因为在尝试中继日志恢复之前接收器线程尚未启动,因此中继日志中没有可用的日志轮换事件来提供主日志文件名和主日志位置。在这种情况下,从属现在跳过中继日志恢复并记录警告,然后继续开始复制。(缺陷 #28996606,缺陷 #93397)

  • 复制: 当在复制主机和从机上启用 GTID,并且从机连接到带有 MASTER_AUTO_POSITION=1选项集的主机时,主机必须向从机发送从机尚未接收、提交或两者都没有的所有事务。如果任何应该由主服务器发送的事务已经从主服务器的二进制日志中清除,主服务器将错误 ER_MASTER_HAS_PURGED_REQUIRED_GTIDS (1789) 发送到从服务器,并且复制不会开始。

    为错误提供的消息 ER_MASTER_HAS_PURGED_REQUIRED_GTIDS 已更改为在这种情况下提供有关正确操作的建议,即从服务器从另一个源复制丢失的事务,或者从更新的创建的新从服务器替换从服务器备份。该消息建议可以修改主服务器的二进制日志有效期以避免将来出现这种情况。此外,master 现在识别已清除事务的 GTID,并在警告消息 ER_FOUND_MISSING_GTIDS(11809) 的错误日志中提供它们,因此您无需手动计算丢失的 GTID。(错误#26004541,错误#29769293)

  • macOS: 在 macOS 上,配置 MySQL -DWITH_SSL=system导致 mysql_config输出错误地包含静态 SSL 库的内部CMake名称。(漏洞 #30541879,漏洞 #97632)

  • 用于构建服务器的 OpenSSL 版本与用于 MySQL 其他部分(例如库或插件)的版本之间可能存在不匹配。这可能会导致某些功能无法工作,例如 LDAP 身份验证插件。现在,相同版本的 OpenSSL 用于构建所有内容。(错误#30573696,错误#30515370)

  • Docker 包缺少 LDAP 身份验证插件。(缺陷号 30465247)

  • 派生表中字段的原始表名并不总是正确显示。(缺陷号 30362898)

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

  • MySQL 安装程序无法在 Windows Server 2012 上卸载 MySQL 5.7。(错误号 30323924,错误号 96940)

  • INSERT ... ON DUPLICATE KEY UPDATE如果多个会话对具有AUTO_INCREMENT列但未指定值的表 执行并发语句AUTO_INCREMENT,则插入可能会因唯一索引冲突而失败。(漏洞 #30194841,漏洞 #96578)

  • 使用lower_case_table_names=2, SHOW TABLES可能无法显示具有大写名称的表。(漏洞#29957361)

  • 通过 keyring_encrypted_file_password 在服务器启动时在命令行上进行设置,系统实用程序可以看到密码值。(缺陷号 29848634)

  • 如果LOCK TABLES语句生效,锁定表的元数据更改可能会导致性能模式或SHOW会话变量查询挂起 opening_tables。(漏洞 #29836204,漏洞 #92387)

  • 使用表格 SELECT的 条件导致不可能的范围导致服务器意外退出。(漏洞#29770705)WHEREA AND (B OR C [OR ...])

  • 对于 JSON 格式的审计日志记录,该id字段现在可以包含大于 65535 的值。以前,随着日志记录活动的增加,每秒可以执行超过 65536 个查询,超过了 id值允许的 16 位。(漏洞#29661920)

  • 不完整的连接数据包可能导致客户端无法正确初始化身份验证插件名称。(缺陷号 29630767)

  • 使用 C 客户端库的客户端程序libmysqlclient 可能会在收到 OK包含格式错误的会话跟踪信息的数据包时退出。(错误#29297620,错误#29630735)

  • 在某些情况下,启用 read_onlyor super_read_only系统变量不会阻止没有SUPER权限的用户执行并发 DDL 语句。(漏洞 #28438114,漏洞 #91852)

  • 按照设计, mysqlpump 会退出而不是转储包含无效视图的数据库,但如果存在无效视图但不在要转储的任何数据库中,它也会失败。(漏洞 #27096081)