Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.17 的变化(2014-03-27,全面上市)

MySQL 5.6.17 的变化(2014-03-27,全面上市)

此版本的已知限制:

笔记

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

弃用和移除说明

  • 不兼容的更改:ERROR_FOR_DIVISION_BY_ZERO、 和 NO_ZERO_DATESQL NO_ZERO_IN_DATE模式现在已弃用,将sql_mode值设置为包含其中任何一个都会生成警告。在 MySQL 5.7 中,这些模式什么都不做。相反,它们的效果包含在严格 SQL 模式(STRICT_ALL_TABLESSTRICT_TRANS_TABLES)的效果中。MySQL 5.7 改变的动机是减少依赖于严格模式的 SQL 模式的数量,并使它们成为严格模式本身的一部分。

    为升级到 MySQL 5.7 做提前准备,请参阅 MySQL 5.7 中的 SQL 模式更改。该讨论提供了评估您的应用程序是否会受到 MySQL 5.7 中 SQL 模式更改的影响的指南。

  • msql2mysql mysql_convert_table_formatmysql_find_rowsmysql_fix_extensionsmysql_setpermissionmysqlaccess实用程序现已弃用, 并将在 MySQL 5.7 中删除。(错误#27482、错误#69012、错误#69014、错误#69015、错误#69016、错误#69017、错误#11746603、错误#16699248、错误#16699279、错误#16699284、错误#16699317、错误#18179576)

  • IGNOREfor 子句 ALTER TABLE现已弃用,并将在未来版本的 MySQL 中删除 。ALTER IGNORE TABLE导致复制问题,阻止联机ALTER TABLE创建唯一索引,并导致外键问题(父表中删除的行)。

添加或更改的功能

  • 不兼容的更改: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: 在线 DDL支持扩展到常规表和分区 InnoDB表的以下操作:

    (漏洞 #13975225)

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

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

修正错误

  • 不兼容的更改:--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:在分区表上 运行SELECT导致内存访问冲突memcpy()。(漏洞 #18383840)

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

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

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

  • 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: 错误 #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:在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: 在禁用外键检查时尝试添加无效外键 (foreign_key_checks=0) 会导致严重错误。(漏洞#17666774)

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

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

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

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

  • 分区:index_merge_intersection标志(默认启用)或 index_merge_union通过系统变量的设置启用标志时 存储引擎的分区表以及缺少主键的optimizer_switch分区表执行时返回不正确的结果 (漏洞#18167648)MyISAMInnoDB

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

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

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

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

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

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

  • 复制: 二进制日志事件可以在它们被刷新到主服务器上的磁盘之前发送到从服务器,即使 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。

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

    长状态消息现在被静默截断以避免错误。此修复仅适用于 MySQL 5.6;MySQL 5.7 及更高版本中对该问题进行了永久修复。(漏洞 #17319380)

  • 复制: 在使用基于行的复制时,服务器没有正确处理大于 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。

  • 复制: 在事务中修改大量数据会导致创建临时文件。max_binlog_cache_size当修改的数据大小超过二进制日志缓存 ( )的大小时,将创建此类文件以前,此类文件会一直存在,直到客户端连接关闭,这可以让它们不断增长,直到耗尽tmpdir. 为防止这种情况发生,在给定事务中以这种方式创建的临时文件的大小现在在事务提交或回滚时重置为 0。(错误#15909788、错误#18021493、错误#66237)

  • 复制: 服务器检查以确定是否启用了无锁半同步复制,如果是,则获取锁并再次检查。如果半同步复制在第一个之后但在第二个之前被禁用,这可能会导致服务器失败。(漏洞 #14511533,漏洞 #66411)

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

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

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

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

  • mysql_install_db在读取 /dev/random以生成随机 root密码时可能会挂起。(漏洞 #18395378)

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

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

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

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

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

  • 当表从表缓存中重新打开并且当前线程未针对性能模式进行检测时,表句柄被不必要地检测。(漏洞 #18047865)

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

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

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

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

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

  • DROP TRIGGER即使read_only启用了系统变量也成功了。(漏洞 #17503460)

  • 如果用于处理 带有或 参数 CALL的存储过程的准备语句,则没有正确设置检索所有结果集所需的标志。(错误#14492429,错误#17849978)OUTINOUTmysql_stmt_store_result()

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

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

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

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

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

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

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

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

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

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