Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.16 的变化(2014-01-31,全面上市)

MySQL 5.6.16 的变化(2014-01-31,全面上市)

此版本的已知限制:

笔记

使用 Visual Studio 2008 在 Windows 上从源构建 MySQL 失败并出现标识符未找到 错误。更高版本的 Visual Studio 不受影响。解决方法是将CMake构建选项 设置INNODB_PAGE_ATOMIC_REF_COUNTOFF. 这个选项是ON 默认的。

笔记

如果您有InnoDB带有全文搜索索引的表,并且您正在从 MySQL 5.6.10 升级到 MySQL 版本(包括 MySQL 5.6.18),则服务器将在升级后无法启动(错误#72079)。此错误已在 MySQL 5.6.19 中修复。解决方法是在升级之前删除全文搜索索引,并在升级完成后重建全文搜索索引。

添加或更改的功能

  • InnoDB: 新的全局配置参数, innodb_status_outputinnodb_status_output_locks,允许您动态启用和禁用标准 InnoDBMonitor 和InnoDB Lock Monitor 以进行定期输出。通过创建和删除特殊命名的表来启用和禁用定期输出的监视器已被弃用,并且可能会在未来的版本中删除。有关其他信息,请参阅 InnoDB 监视器

  • 以前,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)

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

修正错误

  • 创新数据库;复制: 尝试在 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)

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

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

  • InnoDB: 当通过ALTER TABLE操作添加新索引时,不是只保存表级统计信息和新索引的统计信息,而是 InnoDB保存整个表的统计信息,包括表的其他索引。此行为会降低 ALTER TABLE性能。(错误#17848838,错误#16511145)

  • 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: InnoDB初始化失败后会报错的操作系统错误码。(缺陷 #17788055,缺陷 #70867)

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

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

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

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

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

  • 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: 算法未能减少自动增量值。(错误#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: 该函数os_file_get_status不适用于原始设备。(错误#17023438,错误#69424)

  • 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: 在 Windows 上,全文搜索 (FTS) 对象 ID 不是预期的十六进制格式。(漏洞 #16559254)

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

  • 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: 表重命名错误将出现在输出LATEST FOREIGN KEY ERROR部分SHOW ENGINE INNODB STATUS(缺陷 #12762390,缺陷 #61746)

  • 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)

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

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

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

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

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

  • 复制: mysqlbinlog没有正确解码 DECIMAL基于行的二进制日志中的值。这可能会导致为DECIMAL列打印出无效值。(漏洞 #17544169)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 在需要将子查询中的聚合表达式解析为外部查询的视图定义中,从视图中进行选择可能会导致服务器退出。(漏洞 #17547804)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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