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

MySQL 5.6.22 的变化(2014-12-01,全面上市)

编译笔记

  • FreeBSD 10 上嘈杂的编译器警告被静音。(漏洞#18790490)

  • 旧 OS X 和 XCode 版本的CMake解决方法已被删除。在 OS X 上,编译始终使用 Clang,即使对于 32 位构建也是如此。

    现在支持 OS X 10.8 及更高版本的 OS X 编译,使用 XCode 5 及更高版本。旧版本的编译可能有效,但不受支持。(漏洞 #18510941)

  • 以前, CMake选项在调试构建时默认打开,在发布构建时默认关闭,并 在使用 GCC 构建时启用。 这使得在某些情况下启用变得很麻烦,例如在使用 Clang 进行编译时。 MYSQL_MAINTAINER_MODE MYSQL_MAINTAINER_MODE-Werror-Werror

    现在,MYSQL_MAINTAINER_MODE在使用 GCC 编译调试版本时默认启用,并且 无论使用 GCC 还是 Clang 都MYSQL_MAINTAINER_MODE启用 。只需 在运行 CMake-Werror时明确设置即可启用Clang 。此外,修复了 Clang 3.4 报告的一些编译警告,使得使用. (漏洞 #18313717)-Werror-DMYSQL_MAINTAINER_MODE=1-Werror

  • 构建支持已修改,以便为 Clang 生成与gcc相同的警告。(漏洞#17959689)

  • 编译器的CMake配置为 Clang在 Linux 上构建设置了更合适的标志。具体来说,-g -fno-omit-frame-pointer -fno-strict-aliasing现在补充。(漏洞 #17633291)

弃用和移除说明

  • 复制: 变量 binlogging_impossible_mode现在有一个名为 的别名 binlog_error_action,这是首选名称。 binlogging_impossible_mode现在已弃用。(漏洞 #19507567)

  • 复制:系统变量 的全局范围 sql_log_bin已被弃用,现在只能在会话范围内设置此变量。该语句 SET GLOBAL SQL_LOG_BIN现在产生一个错误。仍然可以读取 的全局值sql_log_bin,但这样做会产生警告。您应该立即采取行动,从您的应用程序中删除任何对读取此值的依赖;sql_log_binMySQL 8.0 中删除了全局范围(缺陷 #67433,缺陷 #15868071)

  • OLD_PASSWORD()已弃用,但在调用时未产生任何警告。(错误#73376,错误#19285177)

安全说明

  • yaSSL 已升级到版本 2.3.5。(错误#19695101,错误#20201864)

  • MySQL Commercial Server 的链接 OpenSSL 库已从版本 1.0.1h 更新到版本 1.0.1j。http://www.openssl.org/news/vulnerabilities.html中描述了新版本中修复的问题 。

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(错误#74174,错误#19717832)

修正错误

  • InnoDB: 一个ALTER TABLE操作提出了一个断言。当从字典缓存中删除外键对象时,从 rb-tree 中删除了不正确的外键对象。(漏洞 #19908343)

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

  • InnoDB: 在调试版本中,将 innodb_limit_optimistic_insert_debug调试配置选项设置为 1 会导致无限的 B 树页面拆分。(缺陷 #19904003,缺陷 #74605)

  • InnoDB:dict_set_corrupted()函数试图 SYS_INDEXES错误地更新数据字典表的聚簇索引。(漏洞 #19584379)

  • InnoDB: 校验和值为零的页面被错误地视为空页面。只有当校验和值和 LSN 字段值为零时,页面才应被认为是空的。(缺陷 #19500258,缺陷 #73689)

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

  • InnoDB: 当操作更改列名的大小写InnoDB数据字典未更新ALTER TABLE ... CHANGE COLUMN(漏洞#19465984)

  • InnoDB: 内存访问冲突导致 mysqldfts_optimize_thread终止 。(漏洞 #19314480)

  • InnoDB: 从函数调用以对临时表执行操作的过程导致服务器停止。(漏洞 #19306524)

  • InnoDB: 尝试在启动服务器后关闭服务器innodb_force_recovery=6 导致挂起。(缺陷 #19265668,缺陷 #73341)

  • InnoDB:COMMIT与全文搜索相关 的(漏洞 #18503734)

  • InnoDB: 如果数据库在 MySQL 服务器上使用大写字母命名lower_case_table_names=2 (在 OS X 上是默认设置), 内部系统表 (InnoDB中指定的方式存储数据库名称,但在磁盘上以小写形式存储名称。在崩溃恢复期间,大小写不匹配导致将表空间 文件标记为丢失的冲突。此错误的补丁在崩溃恢复时将数据库名称转换为小写。(错误#18412598,错误#72043)InnoDBSYS_TABLES.ibd

  • InnoDB: 在调试版本中,InnoDB锁定监视器在DROP TABLE操作后断言,并且InnoDB监视器在buf_page_get_gen. (错误#18062698、错误#71343、错误#18173184、错误#68116)

  • InnoDB:CREATE TABLE启用时失败 的innodb_strict_mode 时成功而没有打印警告 innodb_strict_mode。(漏洞 #17852083)

  • InnoDB: 为了显式缓存一致性,在头部添加了写屏障,os_thread_create_func()在断言代码中添加了读屏障 rw_lock_free_func()。(错误#13364876、错误#62692、错误#18870970、错误#72809)

  • InnoDB: 针对 Bug #16963396 / MySQL Bug #69477 的 MySQL 5.6.20 补丁将重做日志BLOB 写入的大小限制为重做日志文件大小的 10%。此限制已放宽。重做日志BLOB 写入现在限制为总重做日志大小 (innodb_log_file_size* innodb_log_files_in_group) 的 10%。

    因此, innodb_log_file_size* innodb_log_files_in_group 应该比 BLOB表行中的最大数据大小加上其他可变长度字段( 、 和类型字段)的长度VARCHARVARBINARY10 TEXT倍。如果 innodb_log_file_size* innodb_log_files_in_group已经足够大或者您的表不包含任何 BLOB数据,则无需执行任何操作。(错误#73707,错误#19498877)

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

  • 分区: 当在分区中使用多个列时KEY ,它们的顺序可能有助于确定行所在的分区。通过 ALTER TABLE使用 ALGORITHM=INPLACE可能会导致在分区中放置行时不一致;换句话说,在这样的操作之前插入的行被放置在一个分区中,但之后插入的同一行被放置在不同的分区中。出于这个原因,当该索引也用作分区表的基础时,不再允许在线更改多列索引的顺序KEY;相反,您必须使用复制ALTER TABLE来执行更改。(漏洞#17896265)

  • 复制: 当使用 WITH_DEBUG启用该选项编译的 MySQL 版本时,使用 expire_logs_days清除二进制日志会导致重启导致服务器崩溃。此问题在修复错误 #17283409 后出现。该修复程序确保 current_thd在调用 之前进行检查 DEBUG_SYNC()。(漏洞 #19553099)

  • 复制: 有时从属 I/O 线程会在当前中继日志中留下部分组,例如当它被杀死或停止时。重新启动后,一个新的中继日志在轮换时创建,并且从主服务器复制一对ROTATE_EVENTFORMAT_DESCRIPTION_EVENT写入新的中继日志。在使用多线程slave时,在relay log中应用组的剩余部分时遇到了错误1755等问题。此修复确保如果 MASTER_AUTO_POSITION启用,则工作人员回滚部分组,完成其工作,然后应用该组的新的完整副本。如果 MASTER_AUTO_POSITION禁用,工作人员不会回滚部分组。(漏洞 #19545298)

  • 复制: 损坏的标头长度 FORMAT_DESCRIPTION_LOG_EVENT可能导致服务器意外停止。这是因为 FORMAT_DESCRIPTION_LOG_EVENT如果标头长度太短,则会被视为无效。(漏洞 #19145712)

  • 复制: 启动日志事件未被从站检查最小大小。(漏洞 #19145698)

  • 复制: 当使用 slave_type_conversions启用的基于行的复制时,连续有多个二进制日志 Rows_log_event导致崩溃。slave_type_conversions这是因为过早发布了作为流程一部分生成的临时表 此修复确保临时表不会过早释放,还确保长事务不会导致内存不足错误。(错误#18770469,错误#19704825)

  • 复制: 当使用从主服务器手动复制的二进制日志文件时,例如为了避免 I/O 线程读取延迟,多线程从服务器生成错误 1755。因为 Previous_gtids日志事件是使用主服务器server_id而不是从服务器的 server_id,先前事件记录没有被正确跳过。此修复确保 Previous_gtids始终跳过日志事件中的事件,无论它们是来自中继日志(在从属设备上生成)还是来自二进制日志(在主设备上生成并作为中继日志手动复制到从属设备)。(漏洞#17812024)

  • 复制: 从较早版本的 MySQL 主服务器(例如 4.1 版)复制时,校验和不用于事件。复制到运行较新版本 MySQL(例如 5.6 版)的从属服务器,该版本 slave_sql_verify_checksum 默认启用意味着来自旧主服务器的事件的最后 4 个字节被错误地解释为校验和。现在会生成一个警告,为避免这种情况,请设置 slave_sql_verify_checksum=0为禁用从站上的校验和。(漏洞 #17276183)

  • Replication: 重启MySQL并 relay_log_recovery启用从崩溃中恢复时,如果SQL线程从未启动过,则开始恢复的位置未正确初始化,因为Relay_Master_Log_File丢失。此修复可确保在这种情况下,从第一个中继日志文件开始,从主服务器搜索每个中继日志以查找轮换事件,该事件指定复制从何处开始。然后使用此轮换事件来设置 SQL 线程Relay_Master_Log_FileRelay_Log_Pos恢复将照常进行。(错误#73039,错误#19021091)

  • 复制: 当使用 GTID 进行复制并 MASTER_AUTO_POSITION启用时,如果从服务器请求的 GTID 已被主服务器清除,则主服务器将发送所有可用的 GTID。发生这种情况是因为 master 读取所有可用的二进制日志并搜索包含 GTID 的二进制日志,而该 GTID 不包含在 和 的联合gtid_executedgtid_retrieved。如果找到这样的 GTID,master 将从该位置开始发送信息。在 slave 和 set 的 gtid_executedgtid_retreived集不包含 master 的gtid_purged设置,奴隶会期待已经被主人清除的GTID。此修复可确保在这种情况下,从站的 I/O 线程会因错误“主站已清除包含从站所需的 GTID 的二进制日志”而中止。(错误#73032,错误#19012085)

  • 复制: 由于 mysqlbinlog为每个事件读取调用 localtime(),而这又调用 stat(/etc/localtime),因此导致了内核互斥锁争用。此修复确保mysqlbinlog使用 localtime_r(),它经过优化以存储只读时区内部结构。这也意味着mysqlbinlog 现在在处理开始时建立时区,您不能在处理过程中更改它。这与 MySQL 服务器的行为相同。(错误#72701,错误#18808072)

  • Microsoft Windows: 在 Windows 上,替换实用程序不起作用。(漏洞 #16581605)

  • Debian 软件包安装的 AppArmor 配置文件缺少成功启动服务器所需的条目。(缺陷号 20057782)

  • InnoDBinnodb_checksum_algorithm 如果在操作期间修改了系统变量的值,则表校验和计算可能会产生不正确的结果 。(漏洞#19931177)

  • 对于与半连接一起使用的物化内部临时表,优化器可以向其添加索引,但随后使用不适当的查找策略,导致服务器退出。(错误#19695490,错误#21782943)

  • GROUP BY或列ORDER BYCHAR(0) NOT NULL可能导致服务器退出。(漏洞 #19660891)

  • 激活validate_password插件并启用字典查找后,将用户定义的变量传递给PASSWORD()可能会导致服务器退出。(漏洞 #19388163)

  • Debian 软件包是使用复杂 的字符集集构建的,而不是all字符集集。(漏洞 #19363801)

  • 如果转储目标位于 NFS 安装上,则mysqldump无法报告磁盘已满错误。(漏洞 #18817867)

  • 以前,InnoDB允许创建引用用户没有足够权限的父表的外键。现在,用户必须至少具有父表的SELECTINSERTUPDATEDELETEREFERENCES中的一种权限才能创建外键。(错误#18790730,错误#11746917)

  • InnoDB在全文索引初始化期间,将包含全文列的表从 Windows 复制到 Linux 会导致 Linux 上的服务器退出。(错误#18285007、错误#19864963、错误#73155)

  • 在 Debian 上,apt-get upgrade没有替换存储库中的某些软件包。解决方法是首先mysql-client通过运行 apt-get install mysql-client手动安装或直接运行 apt-get dist-upgrade。(错误#75485,错误#20348793)

  • 在CentOS 6 上,为选项指定相对路径名 --socket导致MySQL 启动脚本失败。(错误#74111,错误#19775856)

  • 在 Solaris 11.2 中,dtrace -V输出从 更改Sun DOracle D,导致在 MySQL 配置期间检测 DTrace 可用性失败。(错误#73826,错误#19586917)

  • mysql_config --libs_r生成包含链接标志的输出libmysqlclient_r,即使该库已在 MySQL 5.5 中删除并替换为指向底层 libmysqlclient库的符号链接。现在的输出直接指向libmysqlclient. (这意味着不再需要为了能够使用mysql_config --libs_r而维护符号链接。)(错误 #73724,错误 #19506315)

  • 对于语句摘要计算,性能模式无法将带符号的文字数字识别为可表示的值, ?并为应该具有相同签名的语句创建了多个摘要。现在,所有一元加号和一元减号后跟数字的实例都减少到 ?摘要中。(缺陷 #73504,缺陷 #19389709)

  • 使用 Visual Studio 2013 在 Windows 上编译导致 未解析的外部符号错误。(错误#73461,错误#19351573)

  • UNION DISTINCT子查询具体化或与临时表上的哈希索引一起使用的 某些查询 可能会产生不正确的结果或导致服务器退出。(错误#73368,错误#19297190)

  • 和函数实现包含竞争条件IS_FREE_LOCK()IS_USED_LOCK()因此当同时检查和释放用户锁时,它们可以访问释放的内存。访问释放的内存可能会导致函数返回值不正确或服务器退出。(错误#73123,错误#19070633)

  • LOCK TABLES有时会为隐式锁定的表获取不够强的锁。(错误#72887,错误#18913551)

  • 默认情况下错误地启用了CMake选项。(错误#72106,错误#18448743)ENABLED_LOCAL_INFILE

  • 使用 ODBC 格式的日期文字可能会产生不正确的查询结果。(缺陷 #69233,缺陷 #16812821)

  • mysql_install_db忽略默认位置的选项文件。(漏洞 #68807,漏洞 #16570238)

  • mysql_setpermission未能在它生成的 SQL 语句中正确引用用户名。(漏洞 #66317,漏洞 #14486004)