Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.4 的变化(2014-03-31,里程碑 14)

MySQL 5.7.4 的变化(2014-03-31,里程碑 14)

笔记

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

在悼念

这个版本是为了纪念 MySQL Engineering 家族的两位年轻工程师 Astha 和 Akhila,我们在他们二十出头的时候就失去了他们。这是一个小小的纪念,也是一种认可您对 5.7 版本所做贡献的方式。你会被错过的。

字符集支持

  • MySQL 现在包含一个gb18030支持中国国家标准 GB18030 字符集的字符集。有关 MySQL 字符集支持的更多信息,请参阅 字符集、排序规则、Unicode

编译笔记

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

弃用和移除说明

  • 不兼容的变化

    笔记

    在 MySQL 5.7.8 中恢复了此处描述的使 ERROR_FOR_DIVISION_BY_ZERONO_ZERO_DATENO_ZERO_IN_DATEdo nothing when explicitly named and include them in strict mode 的更改(请参阅 MySQL 5.7.8 中的更改(2015-08-03,Release Candidate))。意图仍然是它们与严格模式结合使用,因此如果在未启用严格模式的情况下启用它们,则从 5.7.8 开始会出现警告,反之亦然。

    、 和 SQL 模式现在已弃用,并且在显式命名时不执行任何操作ERROR_FOR_DIVISION_BY_ZERO。 相反,它们的效果包含在严格 SQL 模式(或 )的效果中。换句话说,严格模式现在与以前的严格模式加上 、 和 模式的 含义 相同 。此更改减少了依​​赖于严格模式的 SQL 模式的数量,并使它们成为严格模式本身的一部分。 NO_ZERO_DATENO_ZERO_IN_DATESTRICT_ALL_TABLESSTRICT_TRANS_TABLESERROR_FOR_DIVISION_BY_ZERONO_ZERO_DATENO_ZERO_IN_DATE

    为了应对此版本 MySQL 中的 SQL 模式更改,建议升级之前阅读 MySQL 5.7 中的 SQL 模式更改。该讨论提供了评估您的应用程序是否会受到这些更改影响的指南。

    ERROR_FOR_DIVISION_BY_ZERO和 SQL 模式名称仍然可以识别(因此引用它们NO_ZERO_DATENO_ZERO_IN_DATE语句不会产生错误),但它们将在未来的 MySQL 版本中删除。要为不存在这些模式名称的 MySQL 版本做提前准备,应修改应用程序以不引用它们。

  • InnoDB:UNIV_LOG_DEBUG不再具有完整功能 的(错误号 18080537)

  • InnoDB:在 MySQL 5.6.3 中弃用 的innodb_use_sys_mallocinnodb_additional_mem_pool_size 系统变量在 MySQL 5.7.4 中被删除。

  • InnoDB:InnoDB空间监视器和 InnoDB表监视器在 MySQL 5.7.4 中被删除。可以从 INFORMATION_SCHEMA表中获取表和表空间元数据。

  • stage/sql/Waiting to get readlock Performance Schema 工具不再使用并已被删除 。(错误#71298,错误#18035404)

  • 已弃用的msql2mysqlmysql_convert_table_formatmysql_find_rowsmysql_fix_extensionsmysql_setpermissionmysqlaccess实用程序已删除。(错误#27482、错误#69012、错误#69014、错误#69015、错误#69016、错误#69017、错误#11746603、错误#16699248、错误#16699279、错误#16699284、错误#16699317、错误#18179576)

  • mysqlbug是一个用于生成错误报告的过时脚本,已从源代码中删除。该脚本的标头包含有关如何配置和编译 MySQL 的信息,这对于包含在错误报告中很有用。类似的信息可以在 docs/INFO_BIN您的 MySQL 安装文件中找到。

  • 已弃用的IGNORE子句 for ALTER TABLE已被删除,其使用会产生错误。

  • 元数据锁定子系统现在使用无锁算法来获取和释放典型的 DML 语句锁。这在涉及大量小型只读事务的工作负载中为多核机器提供了更好的性能/可扩展性。

    元数据锁定子系统现在也使用无锁散列而不是受互斥锁保护的散列。此更改的含义是 metadata_locks_cache_sizemetadata_locks_hash_instances 系统变量不再有任何影响,因此它们已被弃用,并将在未来的 MySQL 版本中删除。

性能模式注释

  • 性能架构性能通过以下方式得到改进:

    • 当线程连接时,所有每线程统计信息的重置现在会延迟到实际收集到统计信息为止。这种惰性初始化有利于具有非常短暂会话的工作负载,为此禁用了检测。

    • 当一个线程断开连接时,每个线程的统计信息将聚合到父级,仅用于实际收集数据的统计信息。这种优化有利于具有非常短暂会话的工作负载,为此禁用了检测。

    • 对于语句检测,单个 EVENT_NAME统计信息的重置现在也被延迟,直到实际收集到统计信息。这有利于所有仅包含 MySQL 支持的非常大的集合语句中的几种语句(SELECTINSERTUPDATEDELETE等)的工作负载。只有实际执行的事件名称的语句才会在断开连接时聚合。

    • 通过删除一些为将来使用而实际上未使用的属性,减少了内部内存缓冲区的内存占用。特别是,互斥锁、rwlock 和条件的统计信息现在需要更少的内存。

    Performance Schema 现在检测准备好的语句(用于二进制和文本协议):

    有关详细信息,请参阅 prepared_statements_instances 表

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到 performance_schema数据库中。

    参考资料:另请参阅:错误 #18324285。

安全说明

  • 不兼容的更改: MySQL 现在允许数据库管理员建立自动密码过期策略:任何使用密码已超过其允许生命周期的帐户连接到服务器的用户都必须更改密码。该实现具有以下组件:

    • 系统 default_password_lifetime 变量定义全局密码过期策略。N大于零 的值意味着密码的有效期为N几天。值为 0 将禁用自动密码过期。默认为 360;密码必须大约每年更改一次。

    • mysql.user表有新的列,用于存储单个帐户的过期策略信息:

      • password_last_changed指示上次更改密码的时间。服务器在客户端连接时使用此列来确定密码是否已超过其生命周期并且必须根据有效的过期策略进行更改。

      • password_lifetime表示帐号密码的生命周期。N大于零 的值 表示密码的有效期为N天。0 禁用自动密码过期。NULL(默认值)表示应用全局过期策略。

    • ALTER USER声明有新的选项来设置个人帐户的密码过期策略。

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将更改合并到 mysql.user表中。对于每个帐户, mysql_upgrade使用它执行的时间来设置password_last_changed 列并设置password_lifetimeNULL。这会导致默认的全局过期策略生效(密码的有效期为 360 天)。

    有关详细信息,请参阅密码管理ALTER USER 语句

  • 不兼容的更改:使用mysql_install_db 安装的 MySQL 部署 现在默认是安全的。以下更改已作为默认部署特性实施:

    • 安装过程只创建一个 root帐户, 'root'@'localhost'自动为该帐户生成一个随机密码,并将密码标记为过期。MySQL 管理员必须 root使用随机密码连接并使用 SET PASSWORD选择新密码。(随机密码在 .mysql_secret运行脚本的有效用户的主目录中的文件中找到。)

    • 安装不会创建匿名用户帐户。

    • 安装不创建test数据库。

    这些更改是通过修改mysql_install_db的默认操作模式实现的,它在 RPM 安装操作期间自动调用。 因此,更改也会影响您手动 调用mysql_install_db的非 RPM 安装方法。

    因为mysql_install_db部署现在默认是安全的,所以该--random-passwords 选项是不必要的,已被删除。它已被--skip-random-passwords选项取代。您可以使用此选项显式生成 默认情况下不安全 的部署:

    • 不会为该 'root'@'localhost'帐户生成随机密码。

    • 创建一个test任何用户都可以访问的数据库。

    笔记

    mysql_install_db不再创建匿名用户帐户,即使使用 --skip-random-passwords.

    mysql_secure_installation程序现在有一个 选项--use-default ,它会导致程序以非交互方式执行。它可用于无人值守的安装操作。

添加或更改的功能

  • 不兼容的更改:AES_ENCRYPT()函数 AES_DECRYPT()现在允许控制块加密模式并采用可选的初始化向量参数:

    • 新的 block_encryption_mode 系统变量控制基于块的加密算法的模式。它的默认值为 aes-128-ecb,表示使用 128 位密钥长度和 ECB 模式进行加密。

    • 可选init_vector参数为需要它的加密模式提供初始化向量:

      AES_ENCRYPT(str,key_str[,init_vector])
      AES_DECRYPT(crypt_str,key_str[,init_vector])
    • 可以通过调用新 RANDOM_BYTES()函数生成用于初始化向量的随机字节串。

    有关详细信息,请参阅 加密和压缩函数

    这些更改使基于语句的复制使用 AES_ENCRYPT()AES_DECRYPT()不安全的语句无法存储在查询缓存中。使用的查询 RANDOM_BYTES()对于基于语句的复制是不安全的,并且不能存储在查询缓存中。

  • 表现; InnoDB: InnoDB现在支持多个页面清理器线程,用于从缓冲池实例中清除脏页。一个新的系统变量, innodb_page_cleaners用于指定页面清理器线程的数量。默认值1维护 MySQL 5.7.4 之前的配置,其中只有一个页面清理器线程。此增强功能建立在 MySQL 5.6.2 中完成的工作的基础上,它引入了一个单页清理线程来从InnoDB 主线程卸载缓冲池刷新工作。

  • InnoDB: InnoDB现在支持 表和单个 表分区的可传输表空间功能 此增强功能简化了分区表的备份过程,并支持在 MySQL 实例之间复制分区表和单个表分区。有关其他信息,请参阅 导入 InnoDB 表。(错误#18121824、错误#70196、错误#18304194、错误#71784)InnoDBInnoDB

  • InnoDB: 用于标识InnoDB页面的参数被两个新的类取代,并且fold 值和zip_size值的计算。这些更改通过减少传递给函数的页面标识符参数的数量来简化代码。(漏洞 #18073495)

  • InnoDB: 如果系统表空间文件(ibdata 文件)位于支持原子写入的 Fusion-io 设备上,双写缓冲将自动禁用,并且 Fusion-io 原子写入用于所有数据文件。由于双写缓冲区设置是全局的,因此对于驻留在非 Fusion-io 硬件上的数据文件,双写缓冲区也被禁用。

    此功能仅在 Fusion-io 硬件上受支持,并且仅在 Linux 上为 Fusion-io NVMFS 启用。要充分利用此功能, 建议innodb_flush_method设置 O_DIRECT为 。(漏洞 #18069105)

  • InnoDB: 优化了反向索引叶页扫描。 btr_pcur_restore_position_func()现在可以对反向游标执行乐观恢复,这减少block->mutex了根页面上的争用,特别是对于并发反向扫描。(漏洞#17666170)

  • InnoDB: 一个新的系统变量, innodb_log_write_ahead_size允许您将重做日志的预写块大小配置为与操作系统或文件系统缓存块大小匹配的值,以避免 重做日志写入的“ read-on-write . 当由于重做日志的预写块大小与操作系统或文件系统缓存块大小不匹配而导致重做日志块未完全缓存到操作系统或文件系统时,会发生写时读。避免写时读提高了重做日志写入的吞吐量稳定性。(漏洞 #17571371)

  • InnoDB: 在线 DDL支持扩展到常规表和分区 InnoDB表的以下操作:

    (漏洞 #13975225)

  • InnoDB: 新的全局配置参数, innodb_status_outputinnodb_status_output_locks,允许您动态启用和禁用标准 InnoDBMonitor 和InnoDB Lock Monitor 以进行定期输出。以前,为定期输出启用和禁用这些监视器需要创建和删除特别命名的表(innodb_monitorinnodb_lock_monitor)。有关其他信息,请参阅InnoDB 监视器

  • 复制: 二进制日志转储线程已通过删除不必要的发送缓冲区重新分配进行了优化。以前,内存是为每个发送到从属的事件分配然后释放的,即使这不是绝对必要的。在这个优化之后,MySQL 服务器可以通过让转储线程使用自适应内存分配来更好地利用硬件资源,这也可以减少 CPU 使用率。(错误#11747349、错误#31932、错误#11752288、错误#43426、错误#13727951)

  • 复制: 现在在很多情况下 CHANGE MASTER TO无需先发布STOP SLAVE. 通过对语句的行为进行以下更改来添加此功能CHANGE MASTER TO,现在仅取决于从属 SQL 线程或从属 I/O 线程是否已停止,如下所述:

    • 如果 SQL 线程停止,您可以 CHANGE MASTER TO使用 RELAY_LOG_FILERELAY_LOG_POSMASTER_DELAY选项执行,即使从属 I/O 线程正在运行。当 I/O 线程运行时,此语句不能使用其他选项。

    • 如果 I/O 线程停止,您可以 CHANGE MASTER TO使用此语句的任何选项执行,除了 RELAY_LOG_FILERELAY_LOG_POSMASTER_DELAY,即使 SQL 线程正在运行。I/O 线程运行时不能使用这三个选项。

    • SQL 线程和 I/O 线程都必须在发出之前CHANGE MASTER TO停止 MASTER_AUTO_POSITION = 1

    如果您正在使用基于语句的复制和临时表,则CHANGE MASTER TO 语句后面的STOP SLAVE语句可能会在从属服务器上留下临时表。作为这组改进的一部分,现在只要发生这种情况就会发出警告。在这种情况下,您可以通过确保 Slave_open_temp_tables在执行这些语句之前等于 0 来避免这种情况。

    有关详细信息,请参阅CHANGE MASTER TO 语句在故障转移期间切换源

  • Replication: 为发送和接收半同步复制确认信号实现了单独的线程,以便事件流和ACK流可以同时发送和接收。这应该会减少许多常见的延迟,从而在许多设置中提高半同步复制的性能。

  • Solaris: 在 Solaris 上, mysql_config --libs现在包括在内 ,以便可以在运行时找到库。(漏洞 #18235669)-R/path/to/library

  • 在 Windows 上,NOMINMAX是使用 ADD_DEFINITIONS() CMake 宏而不是 inconfig.h.cmake设置的,这样即使不包含 my_config.h. (漏洞 #18192896)

  • 改进了CMake对在 Solaris 上使用gcc编译 MySQL 的支持 Solaris 的二进制发行版现在是使用 gcc而不是 Sun Studio 构建的,以便能够编译 Sun Studio 不处理的代码。除了嵌入式库之外,客户端程序和客户端库仍然使用 Sun Studio 构建。

    此更改的结果是在 Solaris 上, mysql_config不再提供用于链接嵌入式库的参数,因为它现在是使用 gcc而不是 Sun Studio 构建的。要获取嵌入式库的链接参数,请改用替代脚本 mysql_server_config。(错误#18146422,错误#17826757)

  • CHECK_FUNCTION_REPLACEMENT() CMake宏已从中删除 ,Windows.cmake替换函数已明确设置,因为检查结果已经硬编码在WindowsCache.cmake. (漏洞 #18116661)

  • MySQL 现在使用 Clang 3.4 进行编译。(错误号 18047020)

  • 在 MySQL 5.7.1 中,MySQL 测试套件 mysql-test-run.sh程序被修改为启动服务器InnoDB而不是 MyISAM默认存储引擎。MySQL 测试套件中的所有测试都被修改为包含一个 force_default_myisam.inc文件。必须这样做,因为大多数遗留测试结果都是用 MyISAM引擎记录的,如果使用InnoDB. 一个项目正在进行中,以迁移这些测试并删除 force_default_myisam.inc不需要的测试MyISAM。在 5.7.4 中,迁移了主要套件的 rplbinlog套件和部分。(漏洞 #17902011)

  • 添加了性能模式检测以捕获事务事件的 GTID。(漏洞#17799147)

  • 性能模式的开销 pfs_lock在一般情况下减少了原子操作的实现和使用。(漏洞#17766582)

  • 如果使用早于 2010 的 Visual Studio 版本, CMake现在会中止 Windows 上的配置过程。(错误号 17730320)

  • 一个新的CMake选项, WITH_MSAN允许为支持它的编译器启用 MemorySanitizer。(漏洞 #17632319)

  • 以前,ALTER TABLE在 MySQL 5.6 中可以更改表,以便结果具有 5.5 和 5.6 格式的时间列。现在 ALTER TABLE将旧的时间列升级到 5.6 格式,用于ADD COLUMNCHANGE COLUMNMODIFY COLUMNADD INDEXFORCE操作。INPLACE由于必须重建表,因此 无法使用该算法完成此转换,因此ALGORITHM=INPLACE在这些情况下指定会导致错误。ALGORITHM=COPY必要时 指定。

    ALTER TABLE确实产生时间格式转换时,它会生成一条消息,该消息可以用SHOW WARNINGS: 显示TIME/TIMESTAMP/DATETIME columns of old format have been upgraded to the new format。(漏洞#17246318)

  • mysql_version.h文件定义了两个新的宏,LIBMYSQL_VERSIONLIBMYSQL_VERSION_ID,它们指示客户端库版本的字符串和数字形式。

    • 在 MySQL Server 发行版中包含的客户端库中,这些宏的值与 MYSQL_SERVER_VERSION和 相同MYSQL_VERSION_ID。例如,在 MySQL 5.7.4 中,MYSQL_SERVER_VERSIONand LIBMYSQL_VERSION"5.7.4-m14"MYSQL_VERSION_IDand LIBMYSQL_VERSION_ID50704

    • 在 Connector/C 发行版包含的客户端库中,具有 Connector/C 发行MYSQL_SERVER_VERSIONMYSQL_VERSION_ID所基于的 MySQL 版本的值,而LIBMYSQL_VERSIONLIBMYSQL_VERSION_ID指示 Connector/C 版本。例如,Connector/C 6.1.3 基于 MySQL 5.7.4,因此MYSQL_SERVER_VERSIONMYSQL_VERSION_ID的值为 "5.7.4-m14"50704,而LIBMYSQL_VERSIONLIBMYSQL_VERSION_ID的值为 "6.1.3"60103

    此外,客户端库中的 mysql_get_client_info()mysql_get_client_version()C API 函数现在返回反映提供客户端库的分发类型的值:

    (漏洞#17171724)

  • filesort比较操作 的开销减少了。(漏洞 #14635144)

  • 根据社区反馈, eq_range_index_dive_limit 系统变量的默认值 10 已被证明太低。默认值已提高到 200。(错误 #70586,错误 #17587952)

  • 当缺少所需的 Perl 模块时, mysql_install_db会提供更多信息诊断消息。(缺陷 #69844,缺陷 #18187451)

  • CMake现在支持 指定默认 值的选项。如果未指定,则该值默认为in 。感谢 Honza Horak 提供补丁。(漏洞 #68338,漏洞 #16316074)-DTMPDIR=dir_nametmpdirP_tmpdir<stdio.h>

  • MySQL 现在支持执行 SELECT语句的服务器端超时:

    • SELECT支持 MAX_STATEMENT_TIME为单个查询指定超时的选项。例如:

      SELECT MAX_STATEMENT_TIME = 5000 id, name FROM my_table WHERE ...

      如果执行超过超时值,服务器将终止该语句。

    • 系统变量指定在会话中执行的不包含选项的语句 的max_statement_time超时值 。如果该值为 0,则不启用超时。 SELECTMAX_STATEMENT_TIME

    • Max_statement_time_exceeded和 status 变量提供有关 受超时影响的语句的 Max_statement_time_set信息 。Max_statement_time_set_failedSELECT

    超时值以毫秒为单位。

    有关详细信息,请参阅SELECT 语句服务器系统变量

    感谢 Davi Arnaut 提供此功能所基于的补丁。(漏洞 #68252,漏洞 #16271666)

  • 减少了为 DML 语句获取元数据锁的开销。(错误#58627,错误#11765641)

  • NULL如果参数小于或等于 0.0E0,则 对数函数返回。他们现在还报告警告对数的参数无效。(错误#50507,错误#11758319)

  • 使用 Valgrind 检测的代码没有预先分配内存 alloc_root(),以帮助查找错误。如果使用 ASAN(地址清理器),现在也会启用此行为。(错误#44582,错误#11753184)

  • 服务器现在可以通知客户端客户端会话状态发生的更改。可以报​​告客户端会话状态的这些属性的变化:

    • 默认架构(数据库)。

    • 系统变量的会话特定值。

    • 用户定义的变量。

    • 临时表。

    • 准备好的陈述。

    更改通知发生在 MySQL 客户端/服务器协议中,它现在在 OK 数据包中包含跟踪器信息,以便可以检测到会话状态更改。跟踪器机制的一个用途是为 MySQL 连接器和客户端应用程序提供一种方法,以确定是否有任何会话上下文可用于允许会话从一个服务器迁移到另一个服务器。(要在负载平衡的环境中更改会话,在决定是否可以进行切换时,有必要检测是否存在要考虑的会话状态。)

    以下组件组成了用户界面,用于控制跟踪器并从中检索状态更改信息,从而在客户端实现状态更改跟踪:

    有关详细信息,请参阅 客户端会话状态的服务器跟踪

修正错误

  • 不兼容的更改:--default-authentication-plugin=sha256_password如果服务器以该 选项 启动,则旧客户端(早于 MySQL 5.5.7)无法正确解析身份验证数据

    笔记

    由于此错误修复,MySQL 5.6.16 客户端无法使用通过sha256_password插件进行身份验证的帐户连接到 5.6.17 服务器,5.6.17 客户端也无法连接到 5.6.16 服务器。同样,MySQL 5.7.3 客户端无法使用通过 sha256_password插件进行身份验证的帐户连接到 5.7.4 服务器。

    (漏洞 #17495562)

  • 重要变更;创新数据库;分区:分区表现 在 FLUSH TABLES语句的FOR EXPORT 选项 InnoDB。(漏洞 #16943907)

  • 创新数据库;复制: 尝试在 innodb_force_recovery大于0会返回一条神秘的错误消息: ERROR(1030) HY000: Got error -1 from storage engine。错误消息已更改为: ERROR HY000: Operation not allowed when innodb_force_recovery > 0。复制选项,例如 relay_log_info_repository=TABLEmaster_info_repository=TABLE 将信息存储在InnoDB. 当 innodb_force_recovery大于 0 时,无法更新复制表,这可能会导致复制管理命令失败。(错误#17287443,错误#69907)

  • 创新数据库;复制:在具有多个唯一索引的表上运行 的INSERT ...ON DUPLICATE KEY UPDATE语句有时会导致事件被错误地写入二进制日志。(缺陷 #11758237,缺陷 #50413)

  • 创新数据库;复制: 使用设置为 1 的插件(请参阅 InnoDB memcached 插件) 会导致服务器泄漏内存。(错误#70757,错误#17675622)InnoDB memcachedinnodb_api_enable_binlog

  • 创新数据库;Microsoft Windows: TRUNCATE TABLE在 Windows 上会报告多个“chsize”返回的操作系统错误 71错误。(缺陷 #18176071,缺陷 #71173)

  • 创新数据库;Microsoft Windows: 在 Windows 上,5.7.3 中引入的回归将允许在同步操作期间写入日志,由于某些 Windows 环境中的问题,这不应该被允许。(漏洞 #17824101)

  • 创新数据库;Solaris:某些 Solaris 版本中的加载程序会拒绝启动使用汇编程序指令 的 GCC 编译的二进制文件(例如mysqld 二进制文件)PAUSE(漏洞#18122171)

  • InnoDB: 在期间 !sync_check_iterate(check)发生断言。(漏洞#18253210)fts_create_doc_id()INSERT

  • InnoDB: trx_undo_truncate_start将写入临时撤消日志段的重做日志,从而导致清除线程断言。(漏洞 #18252937)

  • InnoDB: 未使用的参数和变量以及禁用的功能已从重做日志代码中删除。此补丁还包括重做日志代码改进,包括测试启用、添加 Valgrind 工具和次要代码重构。(漏洞 #18251675)

  • InnoDB:xid_t多次定义 用户定义类型(漏洞#18251254)

  • InnoDB: 双写缓冲区错误消息以不一致的方式引用页码。(漏洞#18242594)

  • InnoDB: InnoDB将为临时表空间执行不必要的重做日志写入和刷新。(漏洞#18236692)

  • InnoDB:truncate_t::drop_indexes方法 truncate_t::create_indexes将在修改系统表空间时禁用重做日志记录。(漏洞 #18236000)

  • InnoDB: 对于全文查询,检查失败 num_tokenmax_proximity_item导致断言。(漏洞 #18233051)

  • InnoDB: 无效memmove的 in fts_query_fetch_document会导致严重错误。(漏洞 #18229433)

  • InnoDB: InnoDB会为临时表空间上的某些操作写入重做日志。(漏洞#18226934)

  • InnoDB: log_mutex_exit应该在 log_buffer_extend持有日志缓冲区互斥量之前调用。(漏洞 #18202904)

  • InnoDB: GCC 4.4 编译器会发出关于 InnoDB解析函数的虚假警告,表明输出未初始化。(漏洞 #18192536)

  • InnoDB: 为了简化代码和减少内存使用, InnoDB文件级操作的重做日志扫描记录,以前存储在哈希表中,现在立即处理。(漏洞 #18180875)

  • InnoDB: innodb_ft_result_cache_limit 现在硬编码最大值为 4294967295 字节或 (2**32 -1)。最大值先前定义为 的最大值ulong。(漏洞 #18180057,漏洞 #71554)

  • InnoDBUPDATE导致 lock_rec_other_trx_holds_expl. 事务列表 (trx_sys->rw_trx_list) 在未获取事务子系统互斥量 (trx_sys->mutex) 的情况下被遍历。(漏洞 #18161853)

  • InnoDB: InnoDB无法从双写缓冲区恢复损坏的系统表空间数据文件的第一页,导致启动失败。(错误#18144349,错误#18058884)

  • InnoDB:--innodb-temp-data-file-path 由于文件大小分配逻辑错误, 临时表空间文件大小与指定的文件大小不匹配 (漏洞 #18141070)

  • InnoDB: 错误 #14329288 引入的回归会在压缩表不适合内存时导致性能下降。(错误#18124788,错误#71436)

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

  • InnoDB: 现在的最大值 innodb_thread_sleep_delay是 1000000 微秒。先前的最大值(32 位上为 4294967295 微秒,64 位上为 18446744073709551615 微秒)过大。因为 的最大值 innodb_thread_sleep_delay受为 设置的值限制 innodb_adaptive_max_sleep_delay (当设置为非零值时), innodb_thread_sleep_delay现在的最大值与 的最大值相同 innodb_adaptive_max_sleep_delay。(漏洞 #18117322)

  • InnoDB:fil_node_create函数将执行不必要的哈希表查找。(漏洞#18116588)

  • InnoDB: INFORMATION_SCHEMA.INNODB_TRX 包含与其他地方打印的交易 ID 值不匹配的虚假交易 ID。用于检索交易 ID 的方法不一致。(漏洞#18111007)

  • InnoDB: 启动服务器时,处理双写缓冲区时会打印 不必要的“检查空间日志消息。(漏洞 #18101380)

  • InnoDB:在模式下构建时返回 编译器错误(无法找到字符串文字运算符)。c++11(漏洞 #18082139)

  • InnoDB: 如果临时表上的聚集索引损坏,服务器将崩溃INSERT而不是返回错误。如果普通表上的聚集索引损坏,则不会返回错误并且 INSERT会成功。(漏洞#18064548)

  • InnoDB:InnoDB为 使用的表 指定备用目录datadir,然后将.ibd 文件移动到默认的 MySQLdata目录将导致在尝试DROP TABLE操作时出现严重错误。(漏洞 #18063570)

  • InnoDB:在memcached插件仍在初始化 尝试卸载InnoDB memcached插件 会杀死memcached守护进程线程。卸载应该等到初始化完成。(漏洞 #18038948)InnoDB InnoDB

  • InnoDB: 全文分词器线程会以不正确的错误消息终止。(漏洞 #18021306)

  • InnoDB: 在调试版本中,在二进制列上创建唯一索引,输入数据包含重复键,将导致断言。(漏洞 #18010711)

  • InnoDB: 由于 和清除协调器线程之间的竞争条件,函数srv_monitor_thread会崩溃 (缺陷 #17980590,缺陷 #70430)lock_print_info_summary()srv_monitor_thread

  • InnoDB: 布尔模式的全文搜索查询会在解析期间导致内存访问冲突。(漏洞 #17978763)

  • InnoDB: 日志功能的使用不一致。错误修复将出现的and 替换。此外,由于每条消息都会发出一个时间戳,因此该错误修复消除了不必要的. (错误#17935793,错误#17534737)fprintf(stderr, message)fputs()ib_logf()ib_logf()ut_print_timestamp()

  • InnoDB: 由于解析器错误,包含子表达式的全文搜索查询可能会返回错误的结果。(错误号 17840768)

  • InnoDB: innochecksum工具没有使用特定于 Windows 的 API 来检索文件大小信息,这导致在超过 MySQL 5.6 innochecksum 2GB 文件大小限制时出现不正确的错误消息(错误找不到ibdata1) 。innochecksum现在支持 MySQL 5.6 和 MySQL 5.7 中大于 2GB 的文件。(漏洞 #17810862,漏洞 #70936)

  • InnoDB: 由于 Bug#17371537 的修复引入了回归,当使用默认的 memcached 引擎作为数据的后备存储而不是InnoDB. (漏洞 #17800829)

  • InnoDB: 撤消日志的页面分配因表已满错误消息而不是撤消日志已满错误消息而失败。(漏洞 #17779822)

  • InnoDB: 如果在临时表处于活动状态时发生崩溃, 内部数据字典InnoDB中不存在临时表InnoDB(漏洞 #17779729)

  • InnoDB: ut_free可以连续调用多次。(漏洞#17763472)

  • InnoDB: 索引树修改可能导致死锁。(漏洞#17754767)

  • InnoDB: 中的竞争条件DebugPolicy::enter() 会导致 sync_array_cell_print. (漏洞#17713784)

  • InnoDB: 在使用丢弃表空间后操作表 ALTER TABLE ... DISCARD TABLESPACE可能会导致严重错误。(漏洞 #17700280)

  • InnoDB: 持久优化器统计信息会由于闩锁争用而导致停顿。(缺陷 #17699331,缺陷 #70768)

  • InnoDB: 在禁用外键检查时尝试添加无效外键 (foreign_key_checks=0) 会导致严重错误。(漏洞#17666774)

  • InnoDB: 对于调试版本,在线的表重建变体 ALTER TABLE在具有 BLOB 列的表上运行时,会导致 row_log_table_apply_update函数中的断言。对于正常构建,DB_PRODUCTION将返回错误。(漏洞 #17661919)

  • InnoDB:由于“未结束令牌 发生InnoDB全文搜索失败应传递字符串和字符串长度以进行字符串比较。(漏洞 #17659310)

  • InnoDB: 在具有全文搜索索引的表上MATCH() AGAINST(),使用长字符串作为参数的查询 AGAINST()可能会导致错误InnoDB(漏洞 #17640261)

  • InnoDB: 以数字或特殊字符开头的数据库名称会导致全文搜索 (FTS) 解析器错误。(漏洞 #17607687)

    参考资料:另请参阅:错误 #17607956。

  • InnoDB: 在某些情况下,错误 #11758237 的修复引入的回归会在 INSERT ... ON DUPLICATE KEY UPDATEREPLACE语句遇到 DB_DUPLICATE_KEY错误。(漏洞 #17604730)

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

  • InnoDB: 在调试版本中,页面读取期间的合并插入缓冲区会导致内存访问冲突。(漏洞#17561188)

  • InnoDB: Bug #16852278 的补丁简化和优化了 中的比较函数InnoDB,导致查询性能下降。(漏洞 #17543588)

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

  • InnoDB:sync0rw.ic, rw_lock_x_lock_func_nowait会不必要地调用os_thread_get_curr_id. (缺陷 #17509710,缺陷 #70417)

  • InnoDB:在memcached执行 DML 操作时 截断memcached InnoDB表 会导致严重错误。(漏洞 #17468031)

  • InnoDB:RENAME TABLE如果在 ALTER TABLE, RENAME TABLE序列 之后立即发生崩溃,服务器可能无法重新启动(漏洞 #17463290)

  • InnoDB: 如果在文件中更新表空间数据文件路径 .isl,然后执行崩溃恢复,则从.isl文件中读取更新的表空间数据文件路径,但 SYS_DATAFILES表不会不更新。崩溃恢复后,该SYS_DATAFILES表现在已更新为新的数据文件路径。(漏洞 #17448389)

  • InnoDB: 尝试将表重命名为丢失的数据库会导致严重错误。(漏洞 #17447500)

  • InnoDB: 如果 file-per-table 表空间数据文件的第一页(第 0 页)已损坏,即使双写缓冲区包含该页的干净副本,恢复也会停止。(错误#17335427、错误#70087、错误#17341780)

  • InnoDB: memcachedInnoDB 自述 文件 (README-innodb_memcached) 错误地指出 libevent 1.6.0 静态链接到守护进程memcached。libevent 的捆绑版本是 1.4.12,而不是 1.6.0。(错误#17324419,错误#70034)

  • InnoDB: 创建表时,表上至少有三个单独的插入mysql.innodb_index_stats 。为了提高CREATE TABLE 性能,现在 COMMIT每个插入只有一个操作,而不是一个操作。(错误#17323202,错误#70063)

  • InnoDB:由于 与 lock_rec_has_to_wait_in_queue(lock)锁定相关的问题和事务被过早地从trx_sys->rw_trx_set. (漏洞 #17320977)

  • InnoDB: 算法未能减少自动增量值。(错误#17250787,错误#69882)ALTER TABLE INPLACE

  • InnoDB: 评论中btr0cur.cc错误地指出btr_cur_pessimistic_update()并且 btr_cur_optimistic_update()会接受 NULL 值。(错误#17231743,错误#69847)

  • InnoDB: dict_table_schema_checkdtype_sql_name不必要地调用。(漏洞 #17193801,漏洞 #69802)

  • InnoDB: fil_check_first_page()未能检查是否 fsp_flags_get_zip_size()返回有效值,这导致启动 mysqld时出现分段错误。(漏洞 #17033182)

  • InnoDB: 该函数os_file_get_status不适用于原始设备。(错误#17023438,错误#69424)

  • InnoDB: 中的lock_rec_other_has_expl_req函数 lock0lock.cc会执行不必​​要的工作。(漏洞 #17016214,漏洞 #69576)

  • InnoDB: Valgrind 在运行回滚调试测试时会报告未初始化的值。Valgrind 警告应该只出现在 Valgrind 检测构建中。(漏洞#16969876)

  • InnoDB: 在崩溃恢复期间,不正确的事务活动时间将导致回滚未提交的事务。(错误#16936961,错误#69438)

  • InnoDB:用于记录诊断的 堆块调试信息 (file_name, lineno此信息应仅出现在调试版本中。(漏洞 #16924719,漏洞 #69422)

  • InnoDB: 在线ALTER TABLE操作会消耗比预期更多的内存。在联机 ALTER TABLE操作期间,为创建或重建的每个索引创建一个包含头缓冲区和尾缓冲区的联机日志缓冲区。ALTER TABLE尾缓冲区是写入器上下文,仅当操作正在进行时才需要对索引进行并发写入操作头缓冲区是读取器上下文,仅在日志应用阶段需要。为了减少内存消耗,现在在索引上运行第一个 DML 语句时分配尾缓冲区,而头缓冲区仅在日志应用阶段分配并在之后释放。(错误#16868967、错误#69325、错误#17911720)

  • InnoDB: 在同一操作中重命名列同时添加或删除列ALTER TABLE会导致错误。(漏洞 #16864981)

  • InnoDB: 类型名称 (srv_shutdown_state) 与变量名称相同。类型名称已srv_shutdown_state 更改为srv_shutdown_t. (漏洞 #16735398)

  • InnoDB:buf_buddy_relocate函数将执行不必要的散列查找。(漏洞 #16596057)

  • InnoDB: 在 Windows 上,全文搜索 (FTS) 对象 ID 不是预期的十六进制格式。(漏洞 #16559254)

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

  • InnoDB: 服务器关闭将导致挂起,并将以下消息写入错误日志:[NOTE] InnoDB: Waiting for purge thread to be suspended (漏洞 #16495065)

  • InnoDB: 当通过附加 到大小值InnoDB无法启动 (漏洞 #16287752)innodb_data_file_pathK

  • InnoDB: 从缓冲池中获取和释放页面以及跟踪页面状态是昂贵且复杂的操作。在错误修复之前,这些操作是使用页面互斥执行的。使用页互斥锁来跟踪几件事情是昂贵的并且不能很好地扩展。错误修复将页面的获取和释放跟踪(使用中状态)与页面 I/O 状态跟踪分开。现在在可用的情况下使用原子来跟踪获取和发布。

    为了可移植性,一个新的CMake构建选项 INNODB_PAGE_ATOMIC_REF_COUNT (默认ON)可用于在原子支持不可用的平台上禁用原子页面引用计数。当启用原子页面引用计数时(默认),[Note] InnoDB: Using atomics to ref count buffer pool pages会在服务器启动时打印到错误日志中。如果禁用原子页面引用计数,则打印[Note] InnoDB: Using mutexes to ref count buffer pool pages” 。(缺陷 #16249481,缺陷 #68079)

  • InnoDB: 由于对外部存储的 BLOB 的所有权信息处理不当,插入缓冲区合并会导致断言错误。

    InnoDB: Assertion failure in thread thread_num in file ibuf0ibuf.cc line 4080
    InnoDB: Failing assertion: rec_get_deleted_flag(rec, page_is_comp(page))

    (漏洞 #14668683)

  • InnoDB: 减小该 auto_increment_increment值不会影响下一个自增值。(缺陷 #14049391,缺陷 #65225)

  • InnoDB: 表重命名错误将出现在输出LATEST FOREIGN KEY ERROR部分SHOW ENGINE INNODB STATUS(缺陷 #12762390,缺陷 #61746)

  • InnoDB: B 树的页面锁定算法会锁定兄弟叶页面,从而延长字典锁。错误修复实现了兄弟叶页的预取,以减少索引锁持有时间。(缺陷 #12734249,缺陷 #61736)

  • InnoDB: BUF_READ_AHEAD_AREA会频繁调用 ut_2_power_up具有高 I/O 率的工作负载。计算现在执行一次,结果存储在buf_pool_t结构中。(错误#11762242,错误#54814)

  • InnoDB: UNIV_SYNC_DEBUG在 Bug#16720368 的修复中被禁用 univ.i,现在已启用。(缺陷 #69617,缺陷 #17033591)

  • 分区: 使用index_merge 优化的查询(请参阅索引合并优化)在针对按 分区的表运行时可能返回无效结果HASH。(错误#17588348,错误#70588)

    参考资料:另请参阅:Bug #16862316、Bug #17648468、Bug #18167648。

  • 分区:当自上次HA_ERR_KEY_NOT_FOUND错误 以来没有分区返回行时 ,在用于按排序顺序返回行的优先级队列中使用未初始化的内存可能会导致服务器崩溃。(漏洞 #17401628)

  • 复制: 当使用 运行服务器时 --gtid-mode=ONSTOP SLAVE随后 START SLAVE导致由 提供的信息 INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFOSlave_open_temp_tables 状态变量不匹配:该INNODB_TEMP_TABLE_INFO 表显示不存在临时表,但 Slave_open_temp_tables具有非零值。(漏洞#18236612)

  • 复制: 尝试同时使用半同步复制和 SSH 连接导致服务器失败。(漏洞 #18219471)

  • 复制:MASTER_HEARTBEAT_PERIOD不包含在 中CHANGE MASTER TO时,语句重置 Slave_heartbeat_period为默认值和 Slave_received_heartbeats0。现在心跳周期不会更改,CHANGE MASTER TO除非使用 明确设置 MASTER_HEARTBEAT_PERIOD。此外,该语句不再重置 Slave_received_heartbeats。(漏洞 #18185490)

  • Replication:MASTER_SSL_CRLPATH使用 CHANGE MASTER TO语句 设置后 Performance Schema表SSL_CRL_PATH列中 replication_connection_configuration(漏洞 #18174719)

  • Replication:MASTER_SSL_CRL选项 MASTER_SSL_CRLPATH在使用yaSSL时不可用;MySQL 复制现在将这些设置为 NULL在启用 yaSSL 时自动设置。(漏洞 #18165937)

  • 复制: mysqlbinlog--rewrite-db在使用该选项时没有释放其事件缓冲区使用的内存 (漏洞#18164998)

  • 复制: 设置slave_parallel_workers 为 1 或更大并启动从属导致从 SQL 线程使用但不释放内存,直到从STOP SLAVESTART SLAVE。(错误#18001777,错误#71197)

  • 复制: 当从服务器配置了复制过滤器和 --log-warnings=2时,每个被过滤的语句都会导致在错误日志中写入一个条目。对于生成许多要过滤的语句的繁忙服务器,结果是错误日志的大小可能会迅速增长到数 GB。现在对此类错误使用节流阀,以便在给定的时间间隔内仅打印一次错误消息,说明此特定错误在该时间间隔内发生了特定次数。(漏洞 #17986385)

  • 复制: 当二进制日志 I/O 缓存恰好增长到 32768 字节并且当前事务之前有一个大小大于 32768 字节的事务时,事件在写入二进制日志时可能会损坏。(漏洞#17842137)

  • Replication: 当master和slave初始都 gtid_mode=ON设置好了,slave的SQL线程停止了,而relay log中还有GTID事务,如果slave随后重启gtid_mode=OFF,那么slave的SQL线程执行它遇到的任何匿名事务,而没有将其 GTID 写入二进制日志,结果 GTID 丢失。这可能会在 slave 之后被提升为 master 时引起问题,因为事务将再次在提升后的 master 的 slave 上进行,从而迅速导致这些 slave 上的不一致。(漏洞#17827018)

    参考资料:另请参阅:错误 #17813449。

  • Replication: 当master和slave初始都 gtid_mode=OFF设置好了,slave的SQL线程停止了,而relay log中还残留着匿名事务,如果slave重新启动gtid_mode=ON,那么slave会为这样的事务分配GTID。这可能会在 slave 之后被提升为 master 时引起问题,因为事务将再次在提升后的 master 的 slave 上进行,从而迅速导致这些 slave 上的不一致。(漏洞 #17813449)

    参考资料:另请参阅:错误 #17827018。

  • 复制: 创建和删除大量临时表可能会导致内存消耗增加。(漏洞 #17806014)

  • 复制: SHOW SLAVE STATUS报告MASTER_SSL_CRLMASTER_SSL_CRLPATH。(错误#17772911,错误#70866)

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

  • Replication:log_warnings大于1时,master打印二进制日志转储线程信息——包含slave服务器ID、二进制日志文件名和二进制日志位置——在 mysqld.1.err. 在这种情况下,大于 20 亿的从服务器 ID 打印为负值。(错误#17641586,错误#70685)

  • 复制: mysqlbinlog --verbose在遇到二进制日志中的损坏行事件时失败。这样的行事件也可能导致从站失败。(漏洞#17632978)

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

  • 复制: 二进制日志事件可以在它们被刷新到主服务器上的磁盘之前发送到从服务器,即使 sync_binlog设置为 1。这可能导致在操作崩溃后重新启动主服务器时出现以下两个问题之一系统:

    • 复制无法继续,因为一个或多个从服务器正在请求主服务器上不存在的复制事件。

    • 数据存在于一个或多个从站上,但不在主站上。

    此类问题在较不持久的设置(sync_binlog不等于 1)上是预期的,但在为 1 时不应发生sync_binlog。为解决此问题,LOCK_log现在在同步期间持有锁 ( ),并且仅在实际写入二进制事件后释放到磁盘。(错误#17632285,错误#70669)

  • 复制:slave_parallel_workers以 1 或更大值运行从站时,设置 --slave-skip-errors=all会导致错误日志中充满警告 从站 SQL 的实例:无法执行查询事件。详细错误:;,Error_code:0。(错误#17581990,错误#68429)

    参考资料:另请参阅:错误 #17986385。

  • Replication: 在没有slave的独立服务器上配置半同步复制并 rpl_semi_sync_master_wait_no_slave 设置为OFF时,master仍然等待ACK来自slave的一个。当 rpl_semi_sync_master_wait_no_slave设置为 OFF时,当从站数量在指定的超时时间内达到零时,主站应恢复正常复制。现在在这种情况下,服务器检查半同步复制是否打开,如果打开,则继续检查是否有任何从属连接。如果没有连接,则禁用半同步复制,直到用户将 的值设置 rpl_semi_sync_master_wait_no_slaveON。(错误#17510411,错误#70360)

  • 复制: 用作 PROCESSLIST_STATEthreads比列的宽度(64 个字符)长。

    长状态消息现在已被重写,并相应地缩短了。此修复适用于 MySQL 5.7 及更高版本。(漏洞 #17319380)

  • 复制: 在某些情况下,当它的值本应大于零时,它Seconds_Behind_Master的输出 SHOW SLAVE STATUS(漏洞#17233214)

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

  • 复制: 在使用基于行的复制时,服务器没有正确处理大于 4 GB 的行的插入。(漏洞 #17081415)

  • 复制: 使用基于行的复制时,从属版本表上的附加自动增量列未正确更新;而是插入了一个零。(漏洞 #17066269,漏洞 #69680)

  • 复制: 涉及性能模式表的语句不应写入二进制日志,因为这些表的内容仅适用于给定的 MySQL 服务器实例,并且在复制拓扑中的不同服务器之间可能会有很大差异。数据库管理员应该能够配置 (INSERT, UPDATE, 或 DELETE) 或刷新 (TRUNCATE TABLE) 单个服务器上的性能模式表而不影响其他服务器。但是,当从 MySQL 5.5 master 复制到 MySQL 5.5 或更高版本的 slave 时,有关更新 Performance Schema 表的不安全语句的警告被提升为错误。对于 MySQL 5.6 及更高版本的从站,这阻止了同时使用 performance_schema和 GTID(请参阅 使用全局事务标识符进行复制)。

    此修复会导致数据库中表的所有更新在 performance_schema主服务器上被过滤而不是被复制,而不管有效的日志记录类型如何。在此修复之前,使用的语句被标记为复制不安全,这会在执行期间引起警告;不管日志记录格式如何,这些语句仍然被写入二进制日志。

    INFORMATION_SCHEMA此修复不会更改数据库 中表的现有复制行为 。

    有关详细信息,请参阅MySQL 性能架构。(漏洞 #16814264)

    参考资料:另请参阅:Bug #14741537、Bug #18259193。

  • 复制: 二进制日志中的无效事件偏移量并不总是得到正确处理,这可能导致复制失败。(漏洞 #16736412,漏洞 #69087)

  • 复制: 半同步复制插件被 DDL 语句调用两次, Rpl_semi_sync_master_yes_tx每次执行此类语句时递增 2 而不是 1。(错误#70410,错误#17509011)

  • 复制: 如果有许多转储线程(例如来自mysqlbinlog或从属 I/O 连接)同时工作,半同步复制会变得非常慢。还发现,即使转储连接不支持半同步复制,也会调用半同步主插件函数,这会导致锁定插件锁并在必要的代码上浪费时间。

    在此修复之后,非半同步转储线程不再调用半同步主函数来观察二进制事件。(错误#70218,错误#17434690)

  • Microsoft Windows:my_atomic_*在 Microsoft Windows 上,始终使用函数 的 rw-lock 备份实现 现在,在可用的情况下使用本机 Microsoft Windows 实现。(漏洞 #18054042)

  • Microsoft Windows: 在 Windows 上,--local-service 服务器选项不起作用,并且未显示在 --help消息中。(缺陷 #69637,缺陷 #17049656)

  • Solaris:Solaris 的 MySQL 发行版现在 在目录下包含gccshare的源代码压缩包 ,以符合因包含 C++ 运行时库而产生的 GPL 条件。(漏洞#18306484)

  • sql_yacc.h在编译期间,可以同时从多个目录 尝试创建 。(漏洞 #18319335)

  • mysql_secure_installation尝试错误地释放内存并在尝试读取选项文件失败后异常退出。(漏洞 #18255657)

  • 在打印服务器版本时,mysql 客户端没有检查字符串变量中的缓冲区溢出。(漏洞 #18186103)

  • 如果mysql_install_db已使用该 --skip-random-passwords选项运行,则mysql_secure_installation退出 (漏洞 #18181665)

  • 如果 MySQL 配置 CFLAGS为包含 -Werror带有参数的选项,则编译失败。(漏洞 #18173037)

  • 当优化器尝试使用 MRR 或 DS-MRR 读取内部创建的临时表时,服务器可能会退出或引发断言。(漏洞 #18172819)

  • 默认的编译器标志是从 cmake/build_configurations/compiler_options.cmake. 这可以通过CMake -DWITH_DEFAULT_COMPILER_OPTIONS=0 选项关闭。CFLAGS但是,如果设置了或 CXXFLAGS环境变量 ,也可以为 C 或 C++ 编译器关闭它。

    那些环境变量现在没有这样的效果。要指定编译器标志,请使用 -DWITH_DEFAULT_COMPILER_OPTIONS=0 选项,或者 可以使用 和 选项。(漏洞 #18158812)-DCMAKE_C_FLAGS=flags-DCMAKE_C_FLAGS=flags

  • 处理索引合并的范围优化器代码中的错误可能会导致服务器退出或结果集中丢失行。(漏洞#18136628)

  • 共享的libmysqld嵌入式服务器库不是在 Linux 上构建的。一个新的 CMake选项现在使这成为可能。(错误#18123048、错误#16430656、错误#68559)WITH_EMBEDDED_SHARED_LIBRARY

  • LIKE模式匹配操作 期间的类型转换可能会导致服务器退出。(漏洞#18114294)

  • 如果使用该选项--libmysqld-libs配置 MySQL,则在使用(或同义词) 调用时, mysql_config会不正确地生成非空输出 WITHOUT_SERVER(漏洞 #18102839)

  • 在同一个源代码树中重复重建导致 libmysqld.a每次都增加大小。(漏洞#18082702)

  • SHOW GRANTS可用于查看代理用户的密码哈希。密码哈希显示现在需要SUPER特权。(漏洞#18057514)

  • 由于 Bug#16249481 补丁引入的回归, 使用 Visual Studio 2008 在 Windows 上从源构建 MySQL 失败并出现标识符未找到错误。(漏洞#18057449)

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

  • OWNER_THREAD_ID当表从表缓存中重新打开并且当前线程未针对性能模式进行检测时, 服务器退出尝试填充 table_handles表。(漏洞 #18047865)

  • 修复了 Solaris SPARC 和 Linux 64 位平台上的链接故障。(漏洞 #18004599)

  • 服务器启动期间性能模式中发生内存泄漏。(漏洞 #18003651)

  • 构建libevent错误地依赖于使用该 -DWITH_INNODB_MEMCACHED=1选项配置的 MySQL。(漏洞#17964544)

  • 在关闭期间,可能会删除仍然锁定的互斥锁,从而导致服务器退出。(漏洞#17959898)

  • 编译为 Clang 和 GCC 使用不同的警告标志,根据您使用的编译器产生不同的警告输出。两个编译器的警告输出现在是一致的。(漏洞#17959689)

  • 在 Solaris 上,如果找不到, STL_LIBRARY_NAME则配置失败。(漏洞#17954277)

  • storage/ndb/CMakeLists.txt为一些应该保存结果的编译器标志重置 CMake缓存。(漏洞#17949504)

  • Performance Schema 表中 的SUM_SORT_MERGE_PASSES列值 计算不正确。events_statements_summary_by_digest(漏洞 #17938255)

  • 如果在 events_statements_summary_by_digest 找到具有新摘要的语句时性能模式表已满,则 Performance_schema_digest_lost 状态变量不会增加。(漏洞#17935314)

  • 当多个连接发生许多操作时,审计日志插件可能会在日志文件轮换操作期间导致服务器退出。(错误号 17930339)

  • DECIMAL NOT NULL项目可以 NULL在子查询中返回。(漏洞 #17921777)

  • FORCE INDEX [FOR ORDER BY] (index_name)不适用于连接。

    此错误的修复还更改了为创建的警告 EXPLAIN。如果在查询中指定了{IGNORE|USE|FORCE} INDEX它,它现在也会打印 ,而不是只 打印。FOR {GROUP BY|ORDER BY|JOIN}(漏洞 #17889511)

  • 如果mysql_secure_installation使用 SSL 连接并且用户密码已过期,则退出。(漏洞 #17880395)

  • 在服务器关闭期间,打开的连接线程的关闭可能无法干净地发生。(漏洞#17863690)

  • 对于调试版本,插入多表视图可能会引发断言。(漏洞#17834434)

  • 当索引不具有条件中存在的关键部分时,优化器可以下推条件。(漏洞#17814492)

  • 启用压缩客户端/服务器协议后,Performance Schema 语句检测可以引发断言。(漏洞#17794846)

  • 如果服务器关闭或用户密码已过期,则mysqlresetconnection命令 不会报告正确的错误。(漏洞 #17772561)

  • 排序规则中的收缩信息可能处理不当,导致关于字符是否是收缩的一部分的错误决定,以及收缩权重的错误计算。(漏洞 #17760379)

  • filesort 如果在记录属性更改时未能调整其主缓冲区的大小, 则可能会引发断言。(漏洞#17757914)

  • 行比较器设置期间产生了 Valgrind 错误。(漏洞 #17755540)

  • Bug #16041903 的补丁引入了一个错误 DBUG_ASSERT,在调试版本中引发了一个虚假的断言。(漏洞#17746721)

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

  • 修复了在 SPARC 上以 32 位模式使用gcc 4.8.1 构建的构建和执行问题 。(漏洞 #17740390)

  • 如果使用 .config 配置 MySQL,则编译失败 -DWITH_LIBWRAP=1。(漏洞 #17738805)

  • 对于调试版本,该filesort算法可能会引发虚假断言。(漏洞#17734642)

  • 符号从mysql_get_option中丢失 libmysql.dll。(漏洞 #17733103)

  • 在某些情况下,UNIX_TIMESTAMP() 可以NULL在应该返回 0 时返回。(缺陷 #17728371)

  • 在执行INSERT ... SELECTwith UNIONROLLUPON DUPLICATE KEY UPDATEwith 子查询时,服务器可能会退出。(漏洞#17727506)

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

  • 只有在成功检索所有行后,才会释放用于索引合并访问方法的缓存。操作中断或失败导致文件描述符泄漏。(漏洞 #17708621)

  • 优化器错误地计算了连接缓冲区扫描的成本,评估了由附加条件过滤掉的行,而不是一次,而是每个连接缓冲区一次。(漏洞#17694707)

  • 使用没有值的mysqldump --set-gtid-purged选项会导致mysqldump崩溃。(漏洞 #17650245)

  • 如果SAFE_MUTEX已启用(仅适用于调试版本),THR_LOCK_mutex则在初始化之前使用。(缺陷 #17641055,缺陷 #70639)

  • Performance Schema 语句事件线程之间的竞争条件导致服务器退出。(漏洞 #17637970)

  • 范围优化器模块中不正确的引用计数导致查询结果集中可能丢失或重复行。(漏洞 #17619119)

  • 对于调试版本,子查询连接条件中的聚合函数可以引发断言。(漏洞 #17602807)

  • 修复 Bug #16409270 后,无法 #include <mysql.h>关注 #include <windows.h>. (漏洞#17514554)

    参考资料:另请参阅:错误 #16409270。

  • 访问连接缓冲区时的寻址错误可能会产生无效结果或服务器退出。(漏洞 #17513341)

  • 解析器允许一些带有多个ORDER BY子句的查询,然后在执行过程中失败并导致服务器退出。(漏洞 #17473479)

  • 对于调试版本,服务器可以退出插入到BLOB声明为 NOT NULL使用从BLOB列检索并包含的子查询的列中的语句GROUP BY NULL。(漏洞 #17458917)

  • CASE表达式中,使用引用该VALUES() 函数的子查询可能会导致服务器退出。(漏洞#17458914)

    参考资料:这个问题是 Bug #14789787 的回归。

  • SET PASSWORD结合子查询结果中的变量赋值可以引发断言。(漏洞 #17458750)

  • 删除结构后清理不充分 SELECT_LEX导致取消引用 NULL 指针和服务器退出。(漏洞 #17458169)

  • 解析器默默地接受重复的ORDER BY子句和/或子查询中LIMIT子句之前ORDER BY的子句。这些在查询执行期间导致失败。修复此问题会导致解析器行为发生一些变化。解析器不再接受:

    • LIMIT从句前 的ORDER BY从句

    • 关键字 前无 LIMIT括号语句中的 子句SELECTUNION

    • 一个INTO条款接一个PROCEDURE ANALYSE()条款

    (错误#17426017、错误#17703542、错误#17727401)

  • 在 Windows 上,如果密码过期, mysql_secure_installation将退出。root(漏洞 #17415203)

  • mysql_config错误地包含了一些生成编译器警告输出的标志。(漏洞 #17400967)

  • 启用半连接优化后,由于对中间查询块中列的引用解析不正确,带有嵌套子查询的查询可能会导致服务器退出。(漏洞#17398972)

  • 如果由于内存不足错误而导致接受连接尝试失败,则服务器可能会访问先前断开连接的陈旧线程结构,从而导致 Valgrind 错误。(漏洞#17398792)

  • SHA256 密码验证算法分配的缓冲区太短了一个字节。(漏洞 #17397073)

  • 对于CASE涉及浮点数的表达式,可能会错误地计算max_lengthdecimal值。for 的逻辑CASE已更正为与 for 相同COALESCE(),后者执行类似的操作。(漏洞 #17388045)

  • 如果 mysql_set_server_option()之前调用了 或其他几个 C API 函数, 则会发生客户端崩溃mysql_real_connect()。(漏洞 #17338958)

  • 在某些情况下,优化器将固定长度的临时 MyISAM表而不是可变长度的临时表写入磁盘。(漏洞 #17231940)

  • 启用该validate_password插件可能会导致 mysql.user表中存储不正确的密码哈希值。(漏洞 #17065383)

  • 对于调试版本,第二次执行使用半连接处理的准备好的语句可能会导致服务器退出。(漏洞 #16988465)

  • 对于使用要求按顺序返回行的半连接 LooseScan 优化处理的查询,提出了虚假断言。(漏洞 #16977389)

  • 解决了涉及的循环依赖问题 sql/sql_builtin.cc。(漏洞 #16877045)

  • 对于使用插件验证的帐户 sha256_password,在密码过期后设置密码不会清除密码过期标志。(漏洞 #16872181)

  • 在服务器关闭期间,文件信息在调用之前被释放query_logger.cleanup(),导致内存泄漏。(漏洞 #16859266)

  • 对于准备好的INSERT INTO ... SELECT 语句,在语句准备期间不会报告不存在的列名,但只会在稍后的语句执行时报告。(漏洞 #16820562)

  • 多表更新在某些情况下更新失败。(漏洞 #16767011)

  • 临时表的崩溃恢复使用了未初始化的内存。(漏洞 #16754540)

  • 在 OS X 10.7 上,涉及的竞争条件 vio_shutdown()和基于选择的实现vio_io_wait()可能会导致服务器退出。(错误#16354789,错误#17733393)

  • 源代码中使用的示例 URL 中的主机名已替换为 example.com 域中的名称,该域是 IANA 用于此目的的。(漏洞 #15890092)

  • 对于utf8utf8mb4 字符串,处理函数不必要地调用了 Unicode 转换函数。(漏洞 #14057034)

  • 在 OS X 上,预加载使用 LIBMYSQL_PLUGINS环境变量指定的客户端插件可能会失败,除非插件位于硬连接的默认插件目录中。C API 现在在插件预加载期间检查LIBMYSQL_PLUGIN_DIR环境变量,该环境变量可以设置为在其中查找客户端插件的目录的路径名。(错误#13994567,错误#18110355)

  • 某些(... NULL ...) IN (...)表达式NULL在它们应该返回 0 时返回,例如SELECT (NULL, 1) IN ((0, 0), (0, 0)). (漏洞 #13944462)

  • 如果MySQL-W配置为 -DWITH_INNODB_MEMCACHED=1. (漏洞 #13898319)

  • 在某些无法使用范围访问的情况下,优化器会设置动态范围访问,从而导致回退到表扫描。(漏洞 #13814468)

  • 对启用了线程池插件并为大量并发连接提供服务的服务器 执行mysqladmin shutdown导致服务器异常退出。(漏洞 #13788920)

  • 在某些情况下,使用无效的 XPath 表达式调用ExtractValue() 函数可能会导致服务器出现故障。(漏洞 #12428404,漏洞 #61065)

  • 使用非多字节算法跳过多字节字符串中的前导空格可能会导致服务器退出。(错误#12368495,错误#18315770)

  • ONLY_FULL_GROUP_BY启用 SQL 模式后,如果查询在视图中,则在子句中使用 从子GROUP BY查询派生的列的查询会FROM失败并出现错误。column isn't in GROUP BY(漏洞 #11923239)

  • mysqlbinlog--rewrite-db处理相关的泄漏内存。(错误#71283,错误#18027692)

  • 以前,对于EXPLAIN输出,Performance Schema 表的行检查估计值始终显示为 1000。现在,根据为每个表分配内存时使用的大小调整参数显示更准确的估计值。这不会导致行为发生变化,因为 Performance Schema 表没有索引。(错误#71278,错误#18024455)

  • 范围优化器的优化器跟踪输出可能包括原始二进制数据并生成不可打印的字符。现在二进制数据以十六进制格式打印。(错误#71273,错误#18023222)

  • 在配置期间,CMake不正确地检查了 C++ 头文件cxxabi.h。(错误#71268,错误#18147458)

  • 在子句中聚合子查询的结果 FROM可能会产生不正确的结果。(错误#71244,错误#18014565)

  • 以前,在语句中执行的第一个阶段是 stage/sql/init. 这与名为的不同阶段发生冲突,并且与 的阶段 init不兼容。语句中执行的第一个阶段现在命名为。相应地,在输出中,一些以前显示 值的行现在显示。(错误#71201,错误#17993294)startingSHOW PROFILEstage/sql/startingSHOW PROCESSLISTStateinitstarting

  • ssl.cmake由于语法格式错误, CMake产生了警告 (错误#71094,错误#17905144)

  • CMake产生了关于 INTERFACE_LINK_LIBRARIES策略的无用警告。(错误#71089、错误#17905155、错误#17894997)

  • mysqldump --single-transaction为每个转储表获取元数据锁,但直到转储操作完成才释放它们。因此,即使在转储表本身之后,转储表上的其他 DDL 操作也会被阻塞。mysqldump现在尝试更早地释放元数据锁。(错误#71017,错误#17862905)

  • sql_resolver.cc指的是本应受保护的分区代码 #ifdef,即使 MySQL 配置为 -DWITH_PARTITION_STORAGE_ENGINE=OFF. (错误#71010,错误#17876794)

  • wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_sync 互斥量未针对性能模式进行正确检测 。 (错误#70939,错误#17813333)

  • CMake选项被忽略但不应该被忽略 。 如果给出,存储引擎被构建为一个插件。(错误#70859,错误#17772560,错误#30133062)-DWITH_EXAMPLE_STORAGE_ENGINE=1 -DWITH_EXAMPLE_STORAGE_ENGINE=0EXAMPLE

    参考资料:另请参阅:错误 #18324650。

  • FLUSH STATUS清除了一个变量,该变量可能导致 XA 事务的后续隐式提交,从而导致服务器退出。(错误#70854,错误#17911445)

  • my_fopen()在和 my_register_filename() mysys函数 的关键部分减少了开销 。感谢 Po-Chun Chang 提供补丁。(缺陷号 70848)

  • Coverity 静态分析工具发现的几个问题已得到修复。感谢 Honza Horak 提供补丁。(错误#70830,错误#17760511)

  • 创建临时表以查找不同值并在投影列表中具有常量值的查询可能会产生不正确的结果。(错误#70657,错误#17634335)

  • 配置 with 与-DWITH_DEBUG=1 配置 with 的效果不同 -DCMAKE_BUILD_TYPE=Debug。(错误#70647,错误#17632854)

  • Performance Schema 检测 API mysql_cond_timedwait()调用的原型被修复为与 pthread_cond_timedwait(). 此修复仅影响第三方插件的实施者。(错误#70628,错误#17702677)

  • 一些BETWEEN关于无符号值的表达式是使用有符号算术求值的。感谢 Xiaobin Lin 的补丁。(错误#70622,错误#17606942)

  • IF()如果子句中的谓词 与转换为半连接的子查询WHERE相结合, 查询可能会返回不正确的结果 。OUTER JOIN(解决方法是使用禁用半连接SET optimizer_switch='semijoin=off';)(错误 #70608,错误 #17600176)

  • 服务器向错误日志 写入了过多的Sort aborted ”消息。(错误#70173,错误#17372396)

  • 当由 运行时rootmysqld --help --verbose在显示帮助消息后以非零错误代码退出。(错误#70058,错误#17324415)

  • 涉及连接或子查询的 Performance Schema 表的复杂更新无法更新每一行。(错误#70025,错误#17309657)

  • 对于调试版本,涉及半连接具体化的查询的 JSON 格式EXPLAIN 语句可能会导致服务器退出。(错误#70014,错误#17305943)

  • 子查询执行期间发生的死锁错误可能导致引发断言。(缺陷 #69969,缺陷 #17307201)

  • 对于现有用户,GRANT使用空密码 ( IDENTIFIED BY [PASSWORD] '') 没有更改密码。(缺陷 #69899,缺陷 #17256161)

  • 配置期间下载 Google Mock 库可能会失败。这是通过要求 CMake 2.8.2 或更高版本来解决的。(缺陷 #69854,缺陷 #17231722)

  • Performance Schema 表中的某些文件file_instances 未被删除,因为未检测文件删除操作。(缺陷 #69782,缺陷 #17209750)

  • 对于用 --basedir选项指定的路径, mysql_plugin试图取消链接路径而不是释放存储路径的内存。(缺陷 #69752,缺陷 #17168602)

  • 没有定界符且超过 14 位的时间文字字符串被验证为具有TIMESTAMP/DATETIME 两位数精度小数秒部分的值。但是小数秒应该始终用小数点与时间的其他部分分开。(缺陷 #69714,缺陷 #17080703)

  • 对于采用字符串值的系统变量, SET语句允许使用不带引号的值,但包含点的值会被错误地解析,并且只分配了部分值。例如,SET GLOBAL slow_query_log_file = my_slow.log赋值 my_slow。现在必须引用这些值,否则会发生错误。(缺陷 #69703,缺陷 #17075846)

  • 无法使用在视图定义的ORDER BY子句中引用别名的 SELECT子句查询视图,除非视图中的所有列都在选择列表中命名。

    为了处理这个问题,服务器现在以不同的方式将视图写入.frm存储视图定义的文件中。如果您遇到刚刚描述的视图评估错误,请删除并重新创建视图,以便 .frm文件包含更新的视图表示。(缺陷 #69678,缺陷 #17077305)

  • mysqladminmysqlbinlogmysqlcheckmysqldumpmysqlimportmysqlslapmysqlshow程序 现在支持--secure-auth防止以旧(4.1 之前)格式向服务器发送密码的选项。默认情况下启用此选项;用于 --skip-secure-auth禁用它。(缺陷 #69051,缺陷 #16723046)

  • 对于utf8_bin排序规则,可能会产生不正确的排序。(缺陷 #69005,缺陷 #16691598)ORDER BY LOWER(col_name)

  • 来自社区版分发版的 MySQL 客户端程序无法使用 SSL 从企业版连接到 MySQL 服务器。这是由于 yaSSL 和 OpenSSL(分别用于社区和企业)在处理证书方面存在差异。--ssl-caOpenSSL 希望在未指定所有、 --ssl-cert和选项时发送空白证书--ssl-key ,而 yaSSL 没有这样做。为解决此问题,yaSSL 已修改为在缺少选项时发送空白证书。(缺陷 #68788,缺陷 #16715064)

  • 全文搜索与派生表(FROM子句中的子查询)相结合导致服务器退出。

    现在,如果全文操作依赖于派生表,服务器会产生一个错误,指示无法对物化表进行全文搜索。(缺陷 #68751,缺陷 #16539903)

  • NULL当最后读取的行包含一个值 时,COUNT(DISTINCT) 有时会产生不正确的结果。(错误#68749、错误#16539979、错误#71028、错误#17867117)

  • 一些脚本显示有关报告错误的位置的过时信息。(漏洞 #68742,漏洞 #16530527)

  • 当本地表包含单个行并且该行可以连接到表中的行时, 更新FEDERATED表 导致服务器退出。(缺陷 #68354,缺陷 #16324629)UPDATE... JOINFEDERATED

  • 服务器针对 LDML 归类定义问题写入错误日志的消息缺少归类名称。(漏洞 #68144,漏洞 #16204175)

  • mysqlcheck没有正确处理包含点的表名。(缺陷 #68015,缺陷 #16064833)

  • 修复了在 C++11 模式下编译时Clanggcc 报告的错误的编译问题 。(漏洞 #66803,漏洞 #14631159)

  • cmake/configure.pl列出了实例 WITH_COMMENT而不是正确的选项 COMPILATION_COMMENT。(缺陷 #65834,缺陷 #14298560)

  • 由于不正确的约束,使用gcc但没有 gccmake_atomic_cas_body64内置函数的 IA32 实现可能会被错误编译。该补丁还导致 MySQL 在使用Clang编译时使用内置原子。(缺陷 #63451,缺陷 #17242996)

  • 在 OS X 上,libmysqlclientdylib 文件链接到自身。(错误#61699、错误#13890998、错误#61243、错误#12590037)

  • 当在唯一索引的成本之前评估非唯一访问的成本时, 优化器可以选择 ref访问而不是 访问。eq_ref(错误#54808,错误#11762236)

  • 在 Windows 上,mysql_install_db.pl只能从bin安装目录下的目录中运行。(错误#42421,错误#11751526)

  • gcov打印没有文件名的警告。(缺陷 #33269,缺陷 #11747622)

  • mysql_install_db参考过时的 mysqlbug脚本来报告问题。它现在指的是http://bugs.mysql.com/。(缺陷 #29716,缺陷 #11746921)