Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.24 的变化(2018-10-22,正式发布)

MySQL 5.7.24 的变化(2018-10-22,正式发布)

弃用和移除说明

  • 创新数据库;分区: 在共享表空间中放置表分区的支持已弃用,并将在未来的 MySQL 版本中删除。共享表空间包括系统表空间和通用表空间。有关识别共享表空间中的分区并将它们移动到 file-per-table 表空间的信息,请参阅 准备安装以进行升级

  • InnoDB:TABLESPACE = innodb_file_per_table不推荐使用对andTABLESPACE = innodb_temporary子句的 支持,CREATE TEMPORARY TABLE并将在未来的 MySQL 版本中删除。

包装说明

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

  • 与 MySQL 捆绑的 zlib 库已从 1.2.3 版本升级到 1.2.11 版本。MySQL 在 zlib 库的帮助下实现压缩。

    zlib 1.2.11 中的 zlibcompressBound()函数返回比 zlib 版本 1.2.3 中压缩给定字节长度所需的缓冲区大小略高的估计值。该compressBound()函数由确定创建压缩表或将行插入压缩表InnoDB时允许的最大行大小 的函数调用。因此, 在早期版本中成功的行大小非常​​接近最大行大小的or 和 操作现在可能会失败。有关其他信息,请参阅 MySQL 5.7 中的更改InnoDBInnoDBCREATE TABLE ... ROW_FORMAT=COMPRESSEDINSERTUPDATE

可插拔认证

  • Microsoft Windows: 在 Windows 上,MySQL Enterprise Edition 发行版现在捆绑了 Cyrus SASL 库文件libsasl.dllsaslSCRAM.dll以便 LDAP 身份验证插件可以使用 SCRAM-SHA-1身份验证方法。

安全说明

  • MySQL 企业版现在提供数据屏蔽和去标识化功能,实现为包含插件和一组可加载函数的插件库。数据屏蔽通过用替代值替换实际值来隐藏敏感信息。MySQL Enterprise Data Masking 和 De-Identification 功能可以使用多种方法来屏蔽现有数据,例如混淆(删除识别特征)、格式化随机数据的生成以及数据替换或替换。例如:

    mysql> SET @ssn = gen_rnd_ssn();
    mysql> SET @masked_ssn1 = mask_ssn(@ssn);
    mysql> SET @masked_ssn2 = mask_outer(mask_inner (@ssn,4,5,'A'), 3,0,'B');
    mysql> SELECT @ssn, @masked_ssn1, @masked_ssn2;
    +-------------+--------------+--------------+
    | @ssn        | @masked_ssn1 | @masked_ssn2 |
    +-------------+--------------+--------------+
    | 980-31-2838 | XXX-XX-2838  | BBB-AA-2838  |
    +-------------+--------------+--------------+

    有关详细信息,请参阅MySQL 企业数据屏蔽和去标识化

添加或更改的功能

  • 复制: 使用该 group_replication_exit_state_action 选项配置当成员非自愿离开组时组复制的行为方式,例如当它由于网络连接不稳定而被逐出组时。当 group_replication_exit_state_action 设置为ABORT_SERVER时,实例无意中退出组时,实例关闭 MySQL,当 group_replication_exit_state_action 设置为READ_ONLY,实例将 MySQL 设置为超级只读模式,其状态设置为 ERROR

  • 以前,在库的 I/O 缓存中执行的文件 I/O mysys没有被检测,特别影响性能模式报告的关于二进制日志索引文件的文件 I/O 统计信息。现在,此 I/O 已检测并且性能模式统计信息是准确的。感谢 Yura Sorokin 的贡献。(缺陷 #27788907,缺陷 #90264)

修正错误

  • InnoDB:添加主键 的ALTER TABLE操作产生了分段错误。(漏洞#28395278)

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

  • InnoDB: 扫描表主键的查询未返回预期结果。(缺陷 #28104394,缺陷 #91032)

  • InnoDB: 锁定等待期间的查询中断导致错误。(缺陷号 28068293)

  • InnoDB: 更新在生成列上定义的二级索引时找不到索引记录。(漏洞#27968952)

  • InnoDB: 作为联机 ALTER TABLE操作的一部分应用的更新日志在更新二级索引时未考虑旧行中生成列的计算值。(漏洞#27921932)

  • InnoDB: 涉及外键约束的不受支持的 DDL 操作引发了断言。(漏洞#27912873)

  • InnoDB: 尝试对丢弃的表进行外键检查导致分段错误。(漏洞#27804668)

  • InnoDB:在操作 期间提出了断言OPTIMIZE TABLE。(漏洞#27753193)

  • InnoDB: 在重命名表操作期间重复了外键约束名称,导致稍后执行查询失败。(漏洞#27545888)

  • InnoDB: 在存储过程中执行语句之前调用的函数中,对其的读写操作 trx->lock.start_stmt不受互斥锁保护。(漏洞#27325898)

  • InnoDB:REDUNDANT由于确定在线日志长度的行格式计算 不匹配,在 DDL 操作期间发生错误 (缺陷号 26375771)

  • InnoDB:wait/io/file/innodb/innodb_temp_file 性能模式工具 报告的 Innodb 合并临时文件的位置 (缺陷 #21339079,缺陷 #77519)

  • 分区:CREATE TABLE ... PARTITION BY ...语句由于无效的分区定义而失败时,服务器不会删除任何可能在遇到无效PARTITION子句之前创建的分区文件。(漏洞#27798708)

    参考资料:另请参阅:Bug #88043、Bug #26945644。

  • 分区: 可以 在丢弃表空间后FLUSH TABLES FOR EXPORT对创建的分区表 innodb_file_per_table=1现在尝试这样做会引发 ER_TABLESPACE_DISCARDED. (缺陷 #90545,缺陷 #27903881)

    参考资料:另请参阅:Bug #80669、Bug #22899690。

  • Replication:binlog_group_commit_sync_delay 系统变量设置为延迟事务同步到磁盘的等待时间,并且 binlog_group_commit_sync_no_delay_count 系统变量也设置为事务数时,如果在执行前达到指定的事务数,则MySQL服务器退出等待过程达到指定的等待时间。服务器通过在 指定的时间的十分之一过去后检查事务计数 binlog_group_commit_sync_delay ,然后从剩余等待时间中减去该时间间隔来管理此过程。

    如果在计算 delta 期间四舍五入意味着等待时间不是 delta 的倍数,则从剩余等待时间中减去 delta 的最终值将导致该值为负,因此回绕到最大等待时间,使得提交挂起。剩余等待时间的数据类型现已更改,因此在这种情况下该值不会换行,并且在原始等待时间结束后可以继续提交。感谢炎黄的贡献。(缺陷 #28091735,缺陷 #91055)

  • Replication: 由于MySQL服务器记录了GTID一致性违规,但在相关语句执行失败后没有删除该记录,因此在调试构建中引发了断言。现在改进了这种情况的处理,以确保服务器在事务结束时检查失败的语句是否产生了 GTID 一致性违规,如果是这种情况,则恢复以前的 GTID 一致性状态。(缺陷 #27903831,缺陷 #90551)

  • 复制: 使用 GTID 进行复制时,包含导致解析错误 (ER_PARSE_ERROR) 的语句的事务无法通过注入具有相同 GTID 的空事务或替换事务的推荐方法手动跳过。此操作应导致从设备将 GTID 识别为已使用,并因此跳过共享其 GTID 的不需要的事务。但是,在解析错误的情况下,由于语句在检查 GTID 以查看是否需要跳过之前已被解析,因此复制应用程序线程由于解析错误而停止,即使本意是要将事务反正跳过了。

    通过此修复,如果由于已使用 GTID 而需要跳过相关事务,复制应用程序线程现在会忽略解析错误。请注意,此行为更改不适用于由mysqlbinlog生成的二进制日志输出组成的工作负载。在这种情况下,将存在这样的风险,即在应该引发错误时,紧跟在已跳过事务之后的解析错误的事务也会被静默跳过。(缺陷号 27638268)

  • 复制:RESET SLAVE在使用 GTID 的复制从站上发出一条语句时,现有的中继日志文件被清除,但是在清除通道的接收到的 GTID 集之前生成了替换的新中继日志文件。因此,以前的 GTID 集作为事件写入新的中继日志文件 PREVIOUS_GTIDS,导致复制中出现致命错误,指出从服务器的 GTID 多于主服务器,即使gtid_executed两个服务器的集都是空的。现在,当RESET SLAVE发出时,在生成新的中继日志文件之前清除接收到的 GTID 集合,这样就不会出现这种情况。(漏洞#27636289)

  • 复制: 半同步复制的 master 接收线程在从 slave 读取确认时持有一个互斥锁,但需要相同的互斥锁来添加或删除半同步从属,导致这些操作被确认活动延迟。该问题现在已通过不获取互斥锁来读取从属设备的确认来解决。(漏洞 #27610678,漏洞 #89370)

  • 复制: 中继日志信息日志( slave_relay_log_info表)中针对组复制特定通道的 group_replication_appliergroup_replication_recovery未被RESET SLAVEor RESET SLAVE ALL命令清除。(漏洞#27411175)

  • 复制: 按照系统变量的指定,自动重试复制从站上的事务, slave_transaction_retries 即使事务有一个非临时错误会在重试时重复或表明更广泛的问题。现在,只有在没有错误或只是暂时的错误时才会自动重试事务。(缺陷 #27373559,缺陷 #89143)

  • 复制: 尝试在 START GROUP_REPLICATION执行时卸载插件可能会导致意外行为。(错误#25423650、错误#91042、错误#28088177)

  • 复制:FLUSH针对特定日志类型(例如FLUSH SLOW LOGS)的语句导致错误时,语句仍然写入二进制日志。这停止了​​复制,因为错误发生在主服务器上,但没有发生在从服务器上。MySQL 服务器现在检查这些 FLUSH语句的结果,如果发生错误,语句不会写入二进制日志。(漏洞 #24786290,漏洞 #83232)

  • 复制:PASSWORD()生成密码哈希的函数在 MySQL 5.7 中已弃用,并在 MySQL 8.0 中删除 。当SET PASSWORD 使用此函数的语句从 MySQL 5.6 master 复制到 MySQL 5.7 slave,或者从 log_builtin_as_identified_by_password 系统变量设置为 ON 的 MySQL 5.7 master 复制到 MySQL 5.7 slave 时,密码哈希本身也会在存储之前进行哈希处理奴隶。这个问题现在已经解决了,复制的密码散列被存储为最初传递给从属的。(漏洞#24687073)

  • 复制: 如果一个ORDER BY子句用于从某些与复制相关的性能模式表中检索记录,则返回一个空集。该问题现已解决。(缺陷 #22958077,缺陷 #80777)

  • 复制: 当复制通道在从属服务器上用于多源复制时,START SLAVE 未指定单个通道的语句(因此没有FOR CHANNEL子句)应该为复制上的所有通道启动 I/O 线程和 SQL 线程奴隶。但是,如果RESET SLAVE在这样的从站上使用语句,则后续 START SLAVE语句不会启动非默认通道。RESET SLAVE现在,由于语句而不是由于初始化过程中的错误而的复制通道将START SLAVE适用于所有通道的语句重新启动。(漏洞 #22809607)

  • Replication:在replication slave上 发布RESET SLAVE不会改变master主机、master端口、master用户或master密码等任何复制连接参数,这些参数保留在内存中。但是,如果您发出 ,这些连接参数将被重置 RESET SLAVE ALL。以前,如果从 服务器mysqld在发出后立即重新启动RESET SLAVE(包括服务器崩溃以及故意重新启动),连接参数将被重置,就像 RESET SLAVE ALL已经使用过一样。

    现在,当 master_info_repository=TABLE在服务器上设置时(这是 MySQL 8.0 的默认设置),复制连接参数作为操作的一部分 保留在崩溃安全InnoDB表 中。它们也保留在内存中。如果在发出之后但发出之前发生服务器崩溃或故意重启,则会从表中检索复制连接参数并将其重新用于新连接。 mysql.slave_master_infoRESET SLAVERESET SLAVESTART SLAVE

    如果master_info_repository=FILE 在服务器上设置(这是 MySQL 5.7 中的默认设置),复制连接参数仅保留在内存中,因此行为与以前相同。如果slave mysqld由于服务器崩溃而重启,或者发出后立即故意重启 RESET SLAVE,连接参数丢失。在那种情况下,您必须 CHANGE MASTER TO在服务器启动后发出一条语句,以便在发出之前重新指定连接参数START SLAVE

    如果你想故意重置连接参数,你需要使用 RESET SLAVE ALL,它会清除连接参数。在那种情况下,您必须在服务器启动后发出CHANGE MASTER TO声明以指定新的连接参数。(缺陷号 20280946)

  • 复制:减少 了与未使用函数相关的编译警告 xdr_utils。感谢 Zsolt Parragi 提供的补丁。(缺陷 #91071,缺陷 #28099963)

  • 复制: 如果在 group_replication_recovery_retry_count 成员已经进行重新连接尝试时修改了变量,则连接尝试可能会进入无限循环。(缺陷 #91057,缺陷 #28092714)

  • 复制:group_replication_group_seeds 包含解析为自己的本地地址的基于 DNS 的条目时,组复制无法启动。(错误#90483、错误#27882096、错误#28074929)

  • Microsoft Windows: 在 Windows 上,通过 MySQL Installer 卸载 MySQL Server MSI 包会产生一个虚假的弹出窗口。(漏洞#27463864)

  • 在 Fedora 29 平台上,OpenSSL 1.0.x 用于构建包,因为 OpenSSL 1.1.1 支持尚未准备好。如果您从源代码构建 MySQL,建议您使用compat-openssl10-devel包构建。(漏洞#28737143)

  • 在 Fedora 29 平台上,从 MariaDB 升级到 MySQL 8.0.13 失败,原因是缺少过时版本。(漏洞#28727698)

  • audit_logAddress Sanitizer 揭示了与插件 相关的 SSL/Zlib 链接问题 ;这些已得到纠正。(漏洞 #28525431,漏洞 #92082)

  • GCC 8 的编译失败,MySQL 配置为使用某些系统库。(漏洞 #28471072,漏洞 #91914)

  • 表上的并发INSERTand SELECT语句 MERGE可能导致服务器退出。(缺陷号 28379285)

  • 对于因启用而产生错误的UPDATE和 语句, 错误消息的信息不足。该消息现在包括生成的第一个诊断信息,以提供有关失败原因的信息。例如,该消息可能表明 超出了该值或发生了类型转换,其中任何一个都可能阻止使用索引。 DELETEsql_safe_updatesrange_optimizer_max_mem_size

    此外: (1) 使用EXPLAIN for 此类语句不会产生错误,使用户能够从EXPLAIN加号 SHOW WARNINGS输出中看到为什么未使用索引。(2) 对于多表删除和更新,仅当任何目标表使用表扫描时,才会在启用安全更新的情况下产生错误。(缺陷 #28145710,缺陷 #91080)

  • perl-Data-DumperMySQL 服务器和测试 RPM 包作为依赖 项丢失 。(错误#28144933,错误#72926)

  • 对于mysql客户端,-b 短选项与两个长选项相关联, --no-beep并且 --binary-as-hex. 该 -b选项现在仅与 关联 --no-beep。(缺陷号 28093271)

  • CMake选项没有正确处理 Windows 路径名 。(缺陷 #28061409,缺陷 #90964)WITH_GMOCK

  • 如果用户没有足够的权限,LDAP 身份验证插件的组查找可能会失败。root现在,组搜索操作再次使用凭据(如果可用)进行绑定。(漏洞 #28016008)

  • 生成的具有索引和使用字符串函数的列并不总是正确填充。(漏洞#27973409)

  • mysqldump转储文件 中存储的程序定义有时包括 NO_AUTO_CREATE_USERSQL 模式。由于该模式在 MySQL 8.0 中已被删除,因此无法将此类转储文件加载到 MySQL 8.0 服务器中。mysqldumpNO_AUTO_CREATE_USER现在从转储存储程序的定义中删除。(缺陷 #27931181,缺陷 #90624)

  • 非常长的表键在复制从站上处理不正确。(缺陷号 27930505)

  • 在服务器启动/关闭期间,PID 文件可能被错误处理。(漏洞#27919254)

  • 如果由于文件权限错误导致刷新错误日志失败,则刷新操作未完成。(缺陷 #27891472,缺陷 #90505)

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

  • 对于MEMORY表,可能会发生内存溢出错误。(漏洞#27799513)

  • BLOB(or TEXT) 类型转换为较小的 BLOB(or TEXT) 类型时,不会报告任何警告或错误以通知截断或数据丢失。现在在严格 SQL 模式下会发出相应的错误,在非严格 SQL 模式下会发出警告。(缺陷 #27788685,缺陷 #90266)

  • 服务器生成的有关无法读取密钥文件的消息的严重性已从 INFORMATION 升级为 WARNING。(漏洞#27737195)

  • 在查询期间未能创建临时表 MyISAM可能会导致服务器退出。感谢 Facebook 的补丁。(缺陷 #27724519,缺陷 #90145)

  • parser_max_mem_size在解析存储的程序定义时无效。(漏洞#27714748)

  • 服务器错误消息中的一些拼写错误是固定的。感谢 Thomas Tsiakalakis 的贡献。(漏洞 #27688294,漏洞 #90048)

  • 主机名解析错误可能会导致 audit_log插件失败。(漏洞 #27567003)

  • 时,不成功的连接尝试未写入错误日志 log_error_verbosity=3。(缺陷号 27539838)

  • 较早的代码清理导致FEDERATED 存储引擎故障。(缺陷 #27493633,缺陷 #89537)

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

  • 尝试读取未提交的事务引发断言。(缺陷号 26876608)

  • ALTER TABLE ... REORGANIZE PARTITION ...VALUES LESS THAN 如果除最后一个分区之外的任何分区都缺少语法部分,则 可能会导致不正确的行为。(漏洞 #26791931)

  • audit_log插件可能会使服务器死锁。(漏洞 #24353553)

  • 现在所有平台都包含调试符号包 apt(以前,它们仅在 Debian 9 上可用)。(错误#24008883,错误#27990381)

  • 对于InnoDB表,存储引擎 API 可能会为支持的最大键部分长度返回不正确的值。(缺陷 #20629014,缺陷 #76096)

  • YEAR当表示为实常量(例如2155.0E00或 )时 ,指定列的最大可能值 失败2.15E3。(缺陷 #91226,缺陷 #28172538)

  • 子查询有可能在列上使用唯一键,允许 NULL 返回多行。(漏洞 #88670,漏洞 #27182010)