Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.10 的变化(2015-12-07,全面上市)

MySQL 5.7.10 的变化(2015-12-07,全面上市)

弃用和移除说明

  • InnoDB:innodb_support_xa不推荐使用支持 XA 事务中的两阶段提交 的InnoDB从 MySQL 5.7.10 开始,始终启用 XA 事务中对两阶段提交的支持。innodb_support_xa不再允许 禁用

安全说明

  • 以前,MySQL 仅支持用于加密连接的 TLSv1 协议。现在扩展了 TLS 支持以启用更高级别的连接加密:

    • 当使用 OpenSSL 1.0.1 或更高版本编译时,MySQL 支持 TLSv1、TLSv1.1 和 TLSv1.2 协议。

    • 当使用 yaSSL 的捆绑版本编译时,MySQL 支持 TLSv1 和 TLSv1.1 协议。

    因为 TLSv1.2 需要 OpenSSL,所以此协议的支持仅在 MySQL Commercial Server 的二进制分发版中可用,而不适用于 MySQL Community Server(使用 yaSSL 编译)。如果您从源代码构建,要启用 TLSv1.2 支持,您必须设置CMake选项以使用 OpenSSL。 WITH_SSL

    系统tls_version变量在启动时指定服务器允许哪些 TLS 协议用于传入的客户端和复制从属连接。

    对于客户端程序,该 --tls-version选项指定客户端允许哪些 TLS 协议连接到服务器。

    对于复制连接, MASTER_TLS_VERSION该语句的选项 CHANGE MASTER TO指定从站允许哪些 TLS 协议连接到主站。

    mysql_options()C API 函数有一个新选项 ,MYSQL_OPT_TLS_VERSION 可以从客户端库中指定客户端程序允许哪些 TLS 协议。

    默认情况下,MySQL 会尝试使用可用的最高 TLS 协议版本,具体取决于用于编译服务器和客户端的 SSL 库、使用的密钥大小以及服务器或客户端是否限制使用某些协议(例如,通过tls_version/的意思 --tls-version)。

    有关详细信息,请参阅 加密连接 TLS 协议和密码。(漏洞#19921150)

添加或更改的功能

修正错误

  • 创新数据库;Microsoft Windows: 在Windows崩溃后,将数据目录复制到非Windows平台执行恢复导致启动崩溃恢复失败。代码没有将重做日志中的文件路径分隔符从\转换为/。(缺陷 #21825127,缺陷 #78410)

  • InnoDB: 当尝试在虚拟索引中使用的主键列上创建级联外键约束时,返回的错误消息不包括来自的信息 dict_foreign_has_col_in_v_index()。(缺陷号 22050059)

  • InnoDB: 重建具有多个索引虚拟列的表的就地操作引发了断言。(漏洞 #22018532)

  • InnoDB:SELECT ... FOR UPDATE对仅包含虚拟列和虚拟列索引的表 的(错误#21981164,错误#21880930)

  • InnoDB:TRUNCATE TABLE在对具有全文索引的表进行操作 期间服务器退出(缺陷号 21959479)

  • InnoDB: 一个ALTER TABLE ... DISCARD TABLESPACE操作引发了一个无效的断言。(缺陷 #21957001,缺陷 #78728)

  • InnoDB: 与以前的版本相比,BLOB由于 MySQL 5.7.5 中引入的回归,包含具有值的表的小表空间具有更大的数据文件。(缺陷 #21950389,缺陷 #78623)

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

  • InnoDB:ord_part在虚拟列上创建索引的操作失败后, 该InnoDB断言后续插入操作。(错误#21941320,错误#21979969)

  • InnoDB: 为具有虚拟列的表创建了无效的搜索元组。(漏洞 #21922176)

  • InnoDB: InnoDB试图清除未标记为删除的虚拟列索引记录。(漏洞 #21901389)

  • InnoDB: 对具有虚拟列的表的连续打开表操作导致内存访问冲突。(缺陷号 21894654)

  • InnoDB: 全文搜索的更新向量生成 DOC_ID没有初始化新的 ufield,导致断言。(漏洞 #21891185)

  • InnoDB: InnoDB未能防止外键 SET NULLCASCADE 虚拟列基列和虚拟索引列的约束。(缺陷号 21890816)

  • InnoDB: 无效比较对具有 64KBinnodb_page_size设置的实例提出了断言。(错误#21882024,错误#78516)

  • InnoDB: 在估计 b-tree 索引页的最大记录大小时, InnoDB错误地将长固定字段(大于 767 字节)视为固定大小字段而不是可变长度字段。(缺陷号 21880445)

  • InnoDB: 在调试版本中,dtuple_get_n_fields 尝试读取先前分配给虚拟列元组的释放内存,导致服务器退出。(缺陷号 21875974)

  • InnoDB:INNODB_CMPMEM选项中选择big_tables=1引发了缓冲池互斥锁断言。(缺陷 #21871451,缺陷 #78494)

  • InnoDB: InnoDB在操作期间返回无效的与损坏相关的错误消息 IMPORT TABLESPACE。(缺陷 #21838158,缺陷 #77321)

  • InnoDB:FLUSH TABLES ... FOR EXPORT在分区表上运行时断言 的 row_quiesce_table_start(),分区表位于系统或通用表空间中。(缺陷号 21796845)

  • InnoDB: 操作DROP TABLE导致服务器退出。未检查函数调用的返回值,这会导致取消引用空指针。此错误的补丁还解决了潜在的竞争条件。(缺陷 #21794102,缺陷 #78336)

  • InnoDB: 在调试版本中,跨多个分区的有序扫描没有使用优先级队列,导致断言。(漏洞 #21753477)

  • InnoDB: 重启服务器后,表的COMPRESSIONINNODB_SYS_TABLESPACES显示错误的数据。该COMPRESSION 列已从 中删除 INNODB_SYS_TABLESPACES。要查看页面压缩的当前设置,请使用 SHOW CREATE TABLE。(缺陷 #21687636,缺陷 #78197)

  • InnoDB: 无效的表标志值引发了断言。SYS_TABLES.MIX_LEN(flags2)未读取使用 的表的 ROW_FORMAT=REDUNDANT。(漏洞 #21644827)

  • InnoDB:当重做日志记录 的崩溃恢复处理 MLOG_TRUNCATE将共享表空间视为每个表的文件表空间时,会引发断言。已为共享表空间跳过重做。(缺陷号 21606676)

  • InnoDB: 由于断言无效,恢复失败后事务回滚。(漏洞 #21575121)

  • InnoDB: 撤消日志中关于空间列的信息不足引发断言,可能导致升级失败。因此,在执行从 MySQL 5.7.8 或 5.7.9 到 5.7.10 或更高版本的就地升级之前,需要缓慢关闭。有关详细信息,请参阅 MySQL 5.7 中的更改。(漏洞 #21508582)

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

  • InnoDB:ON DELETE CASCADE基于使用、ON DELETE SET NULLON UPDATE CASCADE或 的外键引用列的虚拟列不允许使用二级索引ON UPDATE SET NULL。该限制并未强制执行。(缺陷 #21508402,缺陷 #77843)

  • InnoDB: 在线 DDL 操作期间发生的重复键错误报告了不正确的键名。(错误#21364096,错误#77572)

  • InnoDB: 操作ALTER TABLE导致服务器在磁盘已满时退出。(错误#21326304,错误#77497)

  • InnoDB: 系统表空间数据文件在达到文件大小限制时没有自动扩展,导致启动失败并出现大小不匹配错误,并阻止添加另一个系统表空间数据文件。(缺陷 #21287796,缺陷 #77128)

  • InnoDB: 更改列的字母大小写在.frm文件和数据字典之间引入了不一致,导致CREATE INDEX对更改列的操作失败。(缺陷号 20755615)

  • InnoDB:ALTER TABLE表转换为InnoDBfile-per-table 表空间的操作不会检查与目标.idb文件同名的未知文件,从而允许覆盖同名的未知文件。(错误#19218794,错误#73225)

  • InnoDB: row_merge_read_clustered_index()没有正确处理批量加载错误。(漏洞 #19163625)

  • 分区: 分区扫描未正确评估虚拟生成的列。BLOB 这可能会导致在虚拟列上具有索引的分区表出现问题(错误#21864838,错误#21881155)

  • 分区: 在执行CHECK TABLE时,当检查行是否在正确的分区中时,分区引擎错过了虚拟生成列的更新。(缺陷号 21779554)

  • 分区:在具有一个或多个使用单独表空间ALTER TABLE的分区的分区表上 执行就地InnoDB(漏洞 #21755994)

  • 分区: 当所有分区都被修剪后,它们在索引初始化时没有被初始化扫描。这涉及两个相关问题,一个是当索引关闭时,活动索引没有设置回最大键值。此外,当这作为多范围读取的一部分发生时,会尝试访问未设置的变量。(错误#78260、错误#21754608、错误#21620577)

  • 复制: 在一个多线程从站上配置了 master_info_repository=TABLE 并且 relay_log_info_repository=TABLE 之前已经运行过 autocommit=1,如果从站停止并autocommit更改为 0,START SLAVE 则执行会导致会话看起来挂起。锁定等待超时后,START SLAVE 继续进行时服务器会意外停止。该修复程序可确保在 master_info_repository=TABLErelay_log_info_repository=TABLEautocommit=0为启动和提交生成新事务以避免死锁。(漏洞 #21440793)

  • 复制: 忽略刷新或同步二进制日志期间遇到的致命错误。现在根据 的设置捕获并处理此类错误 binlog_error_action。(错误#76795、错误#68953、错误#20938915、错误#16666407)

  • Microsoft Windows: 在 Windows 上查询视图可能会导致内存泄漏。(缺陷号 21908206)

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

  • Microsoft Windows: 在 Windows 上,当使用共享内存连接尝试为 OLTP 测试创建多个表时,sysbench 基准测试工具的“运行”命令会挂起。(错误#21319192,错误#77481)

  • JSON: 尝试 使用默认值(错误 1101,BLOBTEXTJSON或 引用和 列。当试图在列定义中使用选项时,同样的错误适用于这四种类型中的任何一种;相应的错误消息现在也通过引用和 列清楚地说明了这一点。(错误#78527,错误#21887035)GEOMETRYER_BLOB_CANT_HAVE_DEFAULTBLOBTEXTDEFAULTJSONGEOMETRY

  • JSON:JSON_EXTRACT() 在将虚拟索引添加到表后, 使用的查询(错误#78464,错误#21854241)

  • 如果服务器是用 启动的 --performance_schema_accounts_size=0,查询 Performance Schema 状态变量表会导致服务器退出。(漏洞 #22131713)

  • 对于调试版本,使用ALTER TABLE将生成的列添加到表中可能会导致死锁。(缺陷号 22083048)

  • systemd 单元文件没有 为mysqld--pid-file指定任何选项 ,导致服务器启动失败。单元文件现在在值中包含一个默认 选项 。通过更改和 指定 PID 文件路径名,可以在文件中覆盖此默认值。(缺陷号 22066787)--pid-fileExecStartoverride.confPIDFileExecStart

  • 在某些情况下,在派生表的选择列表中包含嵌套派生表和标量子查询的查询可能会导致服务器退出。(漏洞 #22062023)

  • mysqld运行时 --initialize,它用于 chown()设置数据目录所有者,即使所有权已经正确。这导致 AppArmor 和 SELinux 出现问题。服务器现在检查数据目录所有者是否正确, chown()如果正确则跳过调用。(缺陷号 22041387)

  • CREATE TABLE为或 生成的列表达式求值失败 ALTER TABLE可能会导致服务器退出。现在,如果表达式求值导致截断或向函数提供不正确的输入,语句将以错误终止,并且 DDL 操作将被拒绝。(漏洞 #22018999)

  • 在虚拟列上创建唯一索引POINT 可能会导致以后的表访问出现错误或断言。(缺陷号 22017616)

  • 向新启动的服务器发送负载峰值可能会导致性能模式分配大量内存,从而可能导致内存不足故障。(缺陷号 22006088)

  • 缺少错误检查可能会导致服务器退出 DELETE引用用户定义变量的语句。(漏洞 #21982313)

  • 由于不正确使用 strcpy()and可能导致的缓冲区溢出sprintf()已得到纠正。(缺陷号 21973610)

  • RHEL5 的 MySQL RPM 包无法创建 mysql系统用户。(漏洞 #21950975)

  • MySQL 不支持列ROW类型,但服务器没有阻止创建使用ROW表达式的生成列。现在这些都被禁止了。(缺陷号 21940542)

  • version_tokens插件使用仅一秒的超时值调用锁定服务。超时现在取自 lock_wait_timeout系统变量的默认值(即一年)。(缺陷号 21928198)

  • 如果给定包含孔的多边形或多面参数,使得孔顶点在位于外环段内部的点处接触外环,则空间函数可能返回无效结果。这可能表现为:ST_UNION()产生无效的多边形; ST_SymDifference()产生无效的多边形; ST_Intersection()产生无效的自相交多边形; ST_Difference()产生无效的几何图形。(错误#21927733、错误#21927639、错误#21927558、错误#21977775)

  • STRICT_TRANS_TABLES 启用 SQL 模式后,无法将数据插入到使用属性定义的 生成列VIRTUAL中 。NOT NULL(缺陷号 21927469)

  • 更正了导致 Valgrind 警告生成 OpenSSL 随机数的问题。(缺陷号 21927436)

  • 使用属性指定的生成的列定义 NULL导致语法错误。(漏洞 #21900170)

  • 使用的存储过程 ST_Area()可能会为第一次和第二次执行返回不同数量的行。(缺陷号 21889842)

  • 对于具有接触外环的内环的多边形值,ST_Buffer()可能会返回无效的多边形值。(漏洞 #21871856)

  • threadsPerformance Schema 表 中的两行可能具有相同的THREAD_OS_ID 值。(缺陷号 21865330)

  • 对于调试版本,使用ALTER TABLE更改生成列的表达式可能会导致服务器退出。(漏洞 #21854004)

  • ALTER USER如果服务器以 . 启动则失败 --skip-grant-tables。(缺陷号 21847825)

  • 性能模式在会话运行时读取会话的THD 结构可能会产生竞争条件并导致服务器退出。(漏洞 #21841412)

  • 计算 ST_IsSimple()or ST_Buffer_Strategy()外连接中可空列的准备好的语句可能会为第一次和第二次语句执行返回不同数量的行。(漏洞 #21841051)

  • variables_by_thread 在检查新连接的系统变量时 ,对 Performance Schema 表的查询可能会导致服务器退出。(缺陷号 21840950)

  • 空间函数可以读取已经释放的内存。(漏洞 #21823135)

  • 对于 Debian 包控制文件,libnuma-dev 已添加到Build-Depends以启用 NUMA 支持。(漏洞 #21822631)

  • 将值选择DECIMAL到用户定义的变量中可能会导致服务器退出。(错误号 21819304)

  • 重新评估生成的列表达式可能会导致访问以前释放的内存和服务器退出。(缺陷号 21810529)

  • ST_SymDifference()可以对具有自交点的多边形提出断言。(错误#21767301、错误#79031、错误#22124757)

  • USER审计日志插件的字段输出格式错误。(缺陷号 21766380)

  • 对于以下查询,可能会发生服务器退出:a) GROUP BY包含主键和辅助键列;b) 该WHERE子句在第一个主键列上包含一个相等谓词,其中该列是常量。(缺陷号 21761044)

  • 使用并行编译构建 MySQL 有时会失败,因为在创建sql_yacc.yy之前 尝试编译。lex_token.h(错误#21680733、错误#27470071、错误#89482)

  • 启用二进制日志记录后,DROP TEMPORARY TABLE在 XA_IDLE 状态下发出会导致引发断言。现在ER_XAER_RMFAIL 返回一个错误。

    由于此问题的修复,以前在 XA_IDLE 状态下成功的语句现在失败并出现 ER_XAER_RMFAIL错误。使用 运行时--gtid-mode=ON,显式DROP继续失败 ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION。(缺陷号 21638823)

  • IN在已转换为半连接的子 查询的左侧部分带有 子查询的查询可能会导致服务器退出。(缺陷号 21606400)

  • 并发FLUSH PRIVILEGESREVOKEGRANT语句可能会产生一个小的时间窗口,在此期间可能会发生对代理用户信息的无效内存访问,从而导致服务器退出。(漏洞 #21602056)

  • 在子查询中使用WITH ROLLUP可能会导致服务器退出。(漏洞 #21575790)

  • 对于调试版本, MAKE_SET()可能会在锁定表之前评估以子查询作为参数的调用,从而引发断言。(缺陷号 21547779)

  • query_alloc_block_size在没有足够内存的机器上将系统变量设置为某些负值来 启动服务器 可能会导致内存不足错误。(漏洞 #21503595)

  • 使用UNINSTALL PLUGIN卸载daemon_example插件可能会导致服务器退出。(缺陷号 21467458)

  • 配置-DBUILD_SHARED_LIBS=1导致构建错误。感谢 SuSE 的更正贡献。(缺陷 #21387880,缺陷 #77647)

  • FLUSH DES_KEY_FILE无法重新加载 DES 密钥文件。(缺陷号 21370329)

  • 如果在用于计算IN 谓词的子查询具体化的设置阶段发生错误,则不会清除临时表,从而导致 Valgrind 错误。(缺陷号 21346081)

  • 被 MySQL Enterprise Firewall 拒绝的查询在写入错误日志时被截断为 512 个字符。(缺陷号 20948270)

  • 对于ORDER BY子句引用列位置的准备好的语句的第二次执行,可能会发生服务器退出。(缺陷号 20755389)

  • 如果更改了默认数据库,则重复执行准备好的语句可能会导致服务器退出。(缺陷号 20447262)

  • mysql_plugin可能由于不正确地检查字符串操作数而退出。(缺陷号 20376670)

  • 在连接处理和释放表描述符期间创建临时表失败后,尝试访问现在无效的描述符可能会导致服务器退出。(漏洞#19918299)

  • 值的类型转换失败 DECIMAL可能导致服务器退出。(错误#19912326,错误#20013538)

  • INSERT DELAYED对于以字符列作为键分区且表达式需要字符集转换的表,可能会导致服务器退出。(漏洞#19894161)

  • ALL在从主表的索引列中选择的子查询上使用比较运算符 更新视图时,可能会发生服务器退出 。(漏洞#19434916)

  • 启用 AddressSanitizer (ASAN) 后,包含空字符或无效字符的触发器可能会导致 ASAN 服务器退出。(漏洞 #18831513)

  • 函数错误检查不正确 NAME_CONST()可能导致服务器退出。(漏洞 #17733850)

  • 在 SELinux 上,使用 系统变量的mysqld --initializeinit_file可能无法初始化数据目录。尽管已在 5.7.11 中修复,但 Fedora 23 和 EL6 5.7.10 RPM 也更新了此修复程序;作为 *-5.7.10- 2-*.rpm 发布到 Yum 存储库。(错误#79442、错误#22314098、错误#22286481)

  • INSERT ... ON DUPLICATE KEY UPDATE当作为准备好的语句执行时,可能会导致内存泄漏。(缺陷 #79122,缺陷 #22151233)

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

  • 需要将结果存储 ST_AsWKB() 在临时表中的查询可能会失败并显示一条错误消息。(错误#79060,错误#22131961)

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

  • 如果mysqld以该 --help选项启动,它会创建一个二进制日志索引文件。如果该文件位于数据目录中,并且该命令先于数据目录初始化,则初始化会因数据目录非空而失败。(错误#78986,错误#22107047)

  • 目录中空间函数的一些源文件 sql占用了过多的编译时间,并且需要过多的编译器内存分配。(错误#78900,错误#22078874)

  • resolve_stack_dump中的 内部缓冲区大小 已增加,以适应 C++ 代码的更大符号空间要求。(错误#78885,错误#22071592)

  • 导致 Valgrind 警告的问题 libmysqld已得到纠正。(错误#78819,错误#22007587)

  • 如果安装了 MySQL Connector/C 开发 RPM 包,则 MySQL 开发 RPM 包可能无法安装。(错误#78815,错误#22005375)

  • mysqladmin --help显示 old-password命令,即使命令本身在 MySQL 5.7.5 中被删除。(错误#78774,错误#21972941)

  • filename字符集供内部使用,但在 SQL 语句中引用它不会产生错误。现在他们做到了。(错误#78732,错误#21958734)

  • 如果生成的列使用受 SQL 模式影响的表达式,则该表达式可能会针对相同的输入值生成不同的结果,具体取决于当前的 SQL 模式。(例如, ||运算符的解释取决于PIPES_AS_CONCATSQL 模式。)现在表达式评估使用在定义列时有效的 SQL 模式。(错误#78665,错误#21929967)

  • 转换大的十六进制值可能会产生不正确的结果并且不会出现截断警告。(错误#78641,错误#21922414)

  • mysqlpumpALTER TABLE为添加外键生成了不正确 (错误#78593,错误#21907297)

  • 执行HELP语句或涉及该 CONVERT_TZ()函数的语句可能导致内存泄漏和MyISAM 服务器关闭时的引用计数错误。(错误#78443,错误#21840241)

  • MySQL 无法识别从生成列表达式中的基列到生成列的函数依赖性。(错误#78377,错误#21807579)

  • 可以将非 ASCII 数据存储在旨在存储字符集数据的列中ascii。(错误#78276,错误#21774967)

  • 向表中添加SPATIAL索引 MyISAM可能会导致其他索引的基数变得不正确。(错误#78213,错误#21789000)

  • 当/usr/gnu/bin/as用作链接器 时,MySQL 可能无法在 Solaris 11.3 上编译 。(错误#77797,错误#21484716)

  • 字符集中的某些标点字符armscii8 由两种编码表示,结果使用另一种编码搜索时将找不到使用一种编码存储的字符。对于这样的字符,MySQL 现在选择具有最低值的编码以将实例一致地映射到相同的编码。(错误#77713,错误#21441405)

  • Item_copy_decimal::copy()没有考虑 div_precision_increment系统变量值,导致 DECIMAL某些查询返回的值精度不正确。(错误#77634,错误#21462523)

  • 一个聚合函数,应该返回NULL 返回的非NULL查询:隐式分组;以字符串列作为其第一部分的索引;和一个 WHERE带有相等比较的子句,将列与除列值外的尾随字符进行比较,(错误#77480,错误#21318711)

  • LOAD_FILE()如果字符集是 . ,可能会导致某些路径名的服务器退出 cp932。(缺陷 #76555,缺陷 #20819220)

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

  • 对于诸如 之类的构造,表达式的字符集被视为 ,如果之后指定的排序规则与 不兼容,则会导致错误。现在,当存在 的情况下将数值表达式隐式转换为字符表达式时,使用的字符集是与命名排序规则关联的字符集。(缺陷 #73858,缺陷 #20425399)ORDER BY numeric_expr COLLATE collation_namelatin1COLLATElatin1COLLATE