Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.29 的变化(2016-02-05,全面上市)

MySQL 5.6.29 的变化(2016-02-05,全面上市)

包装说明

  • 为 Ubuntu 15.10 添加了打包支持。(错误#79104,错误#22147191)

安全说明

  • yaSSL 已升级到版本 2.3.9。此升级解决了一个问题,即 yaSSL 仅处理密钥协议的零个或一个前导零的情况,而不是潜在的任何数字,这在极少数情况下可能导致使用 DHE 密码套件时连接失败。(缺陷号 22361038)

  • MySQL Commercial Server 的链接 OpenSSL 库已从版本 1.0.1p 更新到版本 1.0.1q。有关此版本中修复的问题的说明,请参阅 http://www.openssl.org/news/vulnerabilities.html

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(漏洞#22348181)

添加或更改的功能

  • InnoDB: 一个新的InnoDB配置选项, 重建表的innodb_tmpdir在线操作期间创建的临时文件配置一个单独的目录引入此选项是为了帮助避免由于在线操作 ALTER TABLE期间创建的大型临时文件而可能发生的 MySQL 临时目录溢出 可以使用 语句动态配置。 ALTER TABLEinnodb_tmpdirSET

    重建表的联机ALTER TABLE操作还会 在与原始表相同的目录中创建一个中间表文件。innodb_tmpdir选项不适用于中间表文件。(漏洞 #19183565)

  • Valgrind 函数签名 mysql-test/valgrind.supp已针对 Valgrind 3.11 进行了升级。(缺陷号 22214867)

修正错误

  • InnoDB:InnoDB具有较大 的较小innodb_stats_persistent_sample_pages 导致难以在缓冲池警告中找到空闲块。(缺陷号 22385442)

  • InnoDB:以配置文件中 的空 innodb_data_home_dir条目启动服务器导致InnoDB在根目录中查找缓冲池文件,从而导致启动错误。(缺陷 #22016556,缺陷 #78831)

  • InnoDB: 在高并发下运行的全文查询由于无效的内存访问导致服务器退出。(漏洞 #21922532)

  • InnoDB:设置 较大 innodb_sort_buffer_size 时,在空表上添加索引的速度比预期慢。(缺陷 #21762319,缺陷 #78262)

  • 复制: 当 DML 调用插入AUTO_INCREMENT列的触发器或存储函数时,该 DML 必须标记为不安全语句。如果表在 DML 语句之前的事务中被锁定(例如通过使用 LOCK TABLES),则 DML 语句未被标记为不安全语句。此修复可确保将此类 DML 语句正确标记为不安全。(漏洞 #17047208)

  • 复制: 作为 Bug #16290902 修复的一部分,将 DROP TEMPORARY TABLE IF EXISTS查询写入二进制日志时,查询前面不再有USE `db`语句。相反,查询使用完全限定的表名,例如 DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;。这改变了 replicate-rewrite-db过滤规则的应用,因为它们仅适用于 USE语句中指定的默认数据库。这会导致从站在CREATE TEMPORARY TABLE应用结果时失败。该修复确保在将DROP TEMPORARY TABLE IF EXISTS查询写入二进制日志时,对默认数据库进行检查。如果存在,则查询写为USE default_db在二进制日志中。如果不存在默认数据库,则使用限定的表名记录查询。(错误#77417,错误#21317739)

  • 复制: 如果为事务生成 GTID 失败,事务不会写入二进制日志,但仍会提交。虽然 GTID 耗尽的情况很少见,但如果确实发生,则会将错误作为同步阶段错误写入二进制日志。使用 binlog_error_action=ABORT_SERVER,服务器会在出现此类错误时中止,从而避免数据不一致。当 时 binlog_error_action=IGNORE_ERROR,服务器在发生此类错误后继续进行二进制日志记录,可能会导致主从之间的数据不一致。该修复将错误更改为正确记录为刷新阶段错误。(错误#77393,错误#21276561)

  • 复制: 当使用--gtid-mode=ON, --enforce-gtid-consistency, 和--binlog-format=row时,如果在主服务器上执行具有多个 DROP TEMPORARY TABLE语句的用户定义函数,生成的二进制日志会导致从服务器出错。该修复程序确保存储的函数和触发器也被视为多语句事务,并且在 --enforce-gtid-consistency启用时,带有 CREATE TEMPORARY TABLEDROP TEMPORARY TABLE语句的函数会产生 ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION 错误。(错误#77354,错误#21253415)

  • 复制:语句 中使用的存储过程局部变量 ALTER EVENT未正确复制。CALL这与语句未写入二进制日志这一事实有关 相反,在存储过程中执行的每个语句都是单独的二进制日志,除了修改语句字符串以便将存储过程局部变量的使用替换为 NAME_CONST('spvar_name', 'spvar-value')电话。DDL 语句(无论当前的二进制日志格式如何,始终以语句二进制日志模式进行二进制记录)也可以使用存储过程局部变量,并且冲突可能导致它们无法正确复制。该修复程序确保语句中使用的任何存储过程局部变量都替换 NAME_CONST(...)为 ,但当它是 DML 语句且二进制日志格式为 ROW. (错误#77288,错误#21229951)

  • 复制: DROP TABLE语句在写入二进制日志之前由服务器重新生成。如果表或数据库名称包含非常规字符,例如非拉丁字符,则重新生成的语句使用了错误的名称,从而破坏了复制。该修复确保在这种情况下重新生成的名称被正确地转换回原始字符集。同样在处理此错误期间,我们发现在极少数情况下,表或数据库名称包含 64 个字符时,服务器会抛出assert(M_TBLLEN < 128)断言。断言已更正为小于或等于 128。(错误 #77249,错误 #21205695)

    参考资料:另请参阅:Bug #78036、Bug #22261585、Bug #21619371。

  • 复制: 无论当前 格式binlog_format写入二进制日志STATEMENT此类 DDL 可能来自基于事件的 SQL 语句,例如 CREATE EVENTor DROP EVENT,或具有不安全函数的事务,例如 sysdate(). 当 binlog_format=MIXED并试图复制这样的 DDL 时,它没有被正确识别,因此没有被正确复制。(错误#71859,错误#19286708)

  • Microsoft Windows: 添加了 Microsoft Visual Studio 2015 支持。更改包括使用本机(在 VS 2015 中添加)timespec 库(如果存在),重命名 lfind/lsearch 和 timezone/tzname 以避免重新定义问题,默认情况下将 TMPDIR 设置为“”,因为 P_tmpdir 不再存在,弃用 std::hash_map std::unordered_map,并添加了 Wix 工具集 3.10 支持。(缺陷号 21770366)

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

  • 将 84 个 4 字节字符的标记插入全文索引会引发断言。最大令牌长度为 84 个字符,最多 252 个字节,这不包括 4 个字节的字符。最大字节长度现在是 336 字节。(缺陷 #22291765,缺陷 #79475)

  • 如果客户端尝试使用不受支持的客户端字符集 ( ucs2, utf16, utf32),则报告给客户端的错误消息对于 SSL 和非 SSL 连接是不同的。(漏洞 #22216715)

  • 如果存储过程具有声明为 TEXTor 的变量,并且使用or 列BLOB中的 SELECT ... INTO 语法将数据复制到该变量, 则可能会发生数据损坏或服务器退出。(错误#22203532、错误#22232332、错误#21941152)TEXTBLOB

  • CREATE TEMPORARY TABLE .. SELECTBIT涉及导致列类型重新定义的列的语句可能会导致服务器退出或创建不正确的表。(漏洞 #21902059)

  • 对于 character_set_server=utf16le,某些值 ft_boolean_syntax可能会导致服务器退出以进行全文搜索。(漏洞 #21631855)

  • LOCK TABLES生效时,尝试打开MERGE由其表列表中的视图组成的临时表(不是列表中的最后一个表)导致服务器退出。(缺陷号 20691429)

  • 对于某些准备好的语句,优化器可以转换连接条件,以便它使用指向临时表字段的指针,该字段在初始执行后不再可用。随后的执行导致服务器退出。(漏洞#19941403)

  • 重复执行ALTER TABLE v1 CHECK PARTITION准备好的语句,其中 v1是一个视图,导致服务器退出。

    此外,一些管理操作的输出,当它们在视图上尝试时,从 损坏变为操作失败。其中包括执行ANALYZE TABLE、 、和 操作的、OPTIMIZE TABLE、 和 REPAIR TABLE和 语句。(漏洞 #19817021)ALTER TABLEANALYZE PARTITIONCHECK PARTITIONOPTIMIZE PARTITIONREPAIR PARTITION

  • Valgrind 在用于非对称加密的代码中检测到一些可能不安全的字符串函数使用。(漏洞 #19688135)

  • MYSQL_OPT_READ_TIMEOUTSSL 连接忽略通过将选项传递给 mysql_options()C API 函数 所做的任何更改 。(漏洞 #17618162)

  • Solaris 软件包未能注意到 MySQL 客户端库对该libstlport库的依赖性。(错误#79778,错误#22504264)

  • 如果配置文件包含多行,则 使用 systemd 启动mysqld会失败 。datadir现在使用最后 datadir一行。(错误#79613,错误#22361702)

  • 如果服务器以 启动 --thread-handling=no-threads,则不会为客户端连接创建前台线程。Performance Schema 没有考虑到没有前台线程查询 session_connect_attrs表的可能性,导致引发断言。(错误#78292,错误#21765843)

  • ALTER TABLE ... CONVERT TO CHARACTER SET如果表仅包含数字数据类型,则使用该 INPLACE算法的操作将无效。此外,此类操作无法清理其临时.frm 文件。(错误#77554,错误#21345391)

  • 繁重SHOW PROCESSLISTSELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST活动可能导致服务器接受多个 max_connections连接。(错误#75155,错误#20201006)

  • 当与libmysqld嵌入式服务器一起使用时,mysql_stmt_execute()C API 函数malformed communication packet会因错误而失败,即使对于简单的准备语句也是如此。(错误#70664,错误#17883203)