Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.14 的变化(2013-09-20,全面上市)

MySQL 5.6.14 的变化(2013-09-20,全面上市)

此版本的已知限制:

笔记

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

审核日志说明

  • MySQL 5.7 将审计日志文件输出更改为与 Oracle Audit Vault 具有更好兼容性的新格式。此格式已反向移植到 MySQL 5.6,可以使用新 audit_log_format系统变量选择旧格式或新格式,该变量具有允许值OLDNEW(默认值OLD)。有关每种格式的详细信息,请参阅 审核日志文件格式

    此外,当审计日志插件轮换审计日志文件时,它使用不同的文件名格式。对于名为 的日志文件 audit.log,插件先前将该文件重命名为 . 该插件现在将文件重命名为 以指示它是一个 XML 文件。 audit.log.TIMESTAMPaudit.log.TIMESTAMP.xml

    如果更改 的值 audit_log_format,请使用此过程避免将一种格式的日志条目写入包含不同格式条目的现有日志文件:

    1. 停止服务器。

    2. 手动重命名当前审计日志文件。

    3. 使用新值重新启动服务器 audit_log_format。审核日志插件将创建一个新的日志文件,其中包含所选格式的日志条目。

    用于编写审计插件的 API 也发生了变化。该 mysql_event_general结构有新成员来表示客户端主机名和 IP 地址、命令类和外部用户。有关详细信息,请参阅 编写审计插件

添加或更改的功能

  • 不兼容的变化: 在 MySQL 5.6.13 中,Performance Schema 表 statement/com/中的抽象语句 instrument . 该更改已恢复。 setup_instrumentsstatement/com/new_packet

    引用旧仪器名称的应用程序必须更新为新名称。有关在语句分类中使用抽象工具的更多信息,请参阅 性能模式语句事件表。(错误#16750433,错误#17271055)

  • InnoDB: memcachedInnoDB 插件 现在支持插入和读取 定义为主键InnoDB的映射表 INTEGER(错误#17315083,错误#17203937)

修正错误

  • 重要变更;复制: START SLAVE UNTIL SQL_AFTER_GTIDS在执行具有指定 GTID 的事务后收到下一个 GTID 事件之前不会导致从站停止,这可能会在下一个 GTID 事件延迟或不存在的情况下导致问题。现在,slave 在完成与该 GTID 的事务后停止。(漏洞 #14767986)

  • 创新数据库;分区: 在对 INFORMATION_SCHEMA.PARTITIONS 表进行任何查询之后,InnoDB如语句输出中所示的索引统计信息是 从最后一个分区读取的,而不是从包含最大行数的分区读取的。(缺陷 #11766851,缺陷 #60071)SELECT * FROM INFORMATION_SCHEMA.STATISTICS

    参考资料:另请参阅:Bug #16882435、Bug #69179。

  • InnoDB: 在在线期间记录记录的删除标记时 ALTER TABLE...ADD PRIMARY KEYInnoDB将事务 ID 写入日志,就像记录删除或删除标记之前一样。这样做时, InnoDB会覆盖 DB_TRX_ID原始表中的字段,这可能会导致锁定问题。(漏洞 #17316731)

  • InnoDB:row_sel_sec_rec_is_for_clust_rec函数会错误地准备将二级索引中的 NULL 列前缀与聚集索引中的非 NULL 列进行比较。(漏洞#17312846)

  • InnoDB:fil_node_open_file由于缺少 .ibd文件 ,将引发断言 而不是断言, InnoDB应该返回 false 并且调用者 fil_node_open_file应该处理返回消息。(错误#17305626,错误#70007)

  • InnoDB: 回滚对删除标记的记录的更新时会发生不正确的清除。(漏洞 #17302896)

  • InnoDB:ut_ad(oldest_lsn <= cur_lsn) 文件中 的断言buf0flu.cc失败,因为当前最大 LSN 将在最早的 LSN 之前从缓冲池中检索。(漏洞 #17252421)

  • InnoDB: InnoDB memcached addset操作比 SQL INSERT操作执行得更慢。(漏洞 #17214191)

  • InnoDB: 如评论中log0log.hold_lsn并且old_buf_free 只应在UNIV_LOG_DEBUG 启用时编译。(漏洞 #17160270,漏洞 #69724)

  • InnoDB: 添加一个外键,其约束名称包含字符串_ibfk_ ,导致InnoDB创建具有生成的内部名称的重复约束。生成的内部名称也可能与同名的现有用户定义约束冲突,导致重复键错误。(错误#17076737、错误#69693、错误#17076718、错误#69707)

  • InnoDB:ha_innobase::clone函数会错误地断言一个线程不能克隆另一个线程使用的表处理程序,并且原始表处理程序和克隆的表处理程序必须属于同一个事务。不正确的断言已被删除。(漏洞 #17001980)

  • InnoDB: 错误 #14606334 的修复中引入的回归会导致崩溃恢复期间启动时崩溃。(漏洞#16996584)

  • InnoDB:INSERT在写入失败后 回滚BLOB将导致断言失败。如果在写入BLOB期间发生错误,断言已被修改为允许 NULLBLOB(漏洞 #16971045)

  • InnoDB: 当删除具有多个索引的列上的所有索引 当外键约束需要索引时InnoDB无法阻止 DROP INDEX(漏洞#16896810)

  • InnoDB: 断言失败将发生在 包含意外但有效数据目录标志的表row0log.ccROW_FORMAT=REDUNDANT(漏洞#16863098)

  • InnoDB: 针对 Bug #11762038 的修复引入的回归会导致InnoDB引发不正确的错误消息。该消息指出,InnoDB 无法删除/更新具有超过最大深度 20 的级联外键约束的行。当终止从InnoDB 没有外键约束的表中读取的连接时,会出现错误消息。(漏洞 #16710923)

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

  • InnoDB:innodb_log_group_home_dir在调试版本中,如果不存在 ,则会发生断言失败 如果不存在InnoDB 现在会中止并显示错误消息 ,而不是断言innodb_log_group_home_dir(缺陷 #16691130,缺陷 #69000)

  • InnoDB: 对于 Barracuda 文件格式及更高版本,即使前缀已经本地存储在内存中,也会读取外部存储的前缀。(漏洞 #16569640)

  • InnoDB:innodb_data_file_path当使用并保留当前日志文件 更改共享表空间文件名 InnoDB将创建一个新的表空间文件并覆盖日志文件,从而导致数据字典与磁盘上的表不匹配。如果存在不一致的系统表空间、撤消表空间或重做日志文件,此错误修复可确保 InnoDB不会创建新的表空间。(漏洞 #16418661)

  • InnoDB: 在只读模式下运行时,持久统计信息将被不必要地禁用。当以只读模式运行时,从磁盘获取统计信息不涉及对磁盘数据的任何修改,除了 whenANALYZE TABLE运行。此修复为只读模式启用持久统计信息。(漏洞 #16083211)

  • InnoDB: 文档错误地指出 或 START TRANSACTION WITH CONSISTENT SNAPSHOT时才提供一致的快照 。 仅适用于 . 所有其他隔离级别都将被忽略。文档已修改,现在只要 忽略该子句就会生成警告。(错误#14017206,错误#65146)REPEATABLE READSERIALIZABLESTART TRANSACTION WITH CONSISTENT SNAPSHOTREPEATABLE READWITH CONSISTENT SNAPSHOT

  • InnoDB: 后台srv_master_thread线程,它监视服务器活动并在服务器处于非活动状态或处于关闭状态时执行页面刷新等活动,以一秒延迟循环运行。 srv_master_thread休眠前未能检查服务器是否处于关机状态。(缺陷 #13417564,缺陷 #63276)

  • InnoDB:buf_page_get_gen处理仅压缩页面时 可能会出现无限循环 (缺陷 #12560151,缺陷 #61132)

  • 分区:t1使用 创建表CREATE TABLE ... PARTITION BY LIST ... PARTITION ... VALUES IN (NULL),然后尝试执行 CREATE TABLE ... LIKE t1导致服务器失败。(漏洞 #16860588)

  • 复制: 服务器在重置表时尝试执行表的内部截断 slave_worker_info,即使这是 DDL 操作并且不应与 DML 操作同时使用。为了防止这种情况发生,重置现在执行顺序行删除来代替截断操作。(错误#17286858,错误#69898)

  • Replication: 当该设置为大于1的值--relay-log-info-file 一起使用时 , mysqld启动失败。(漏洞 #17160671)slave_parallel_workers

  • Replication: 二进制日志轮转失败导致的提交错误在二进制日志文件中产生了一个事件事件,并以错误消息中断了用户会话,其中没有提到重播事件事件时从属服务器将在稍后停止。

    现在,当遇到二进制日志轮换失败时,一个更有帮助的错误消息会写入日志,提醒用户及时进行调查。(漏洞 #17016017)

  • 复制: 可以在CHANGE MASTER TO语句中将 MASTER_DELAY选项设置为大于支持的最大值 ()。此外,由于设置为大于的值 没有得到正确处理。(错误#16820156、错误#16960315、错误#69249、错误#69469)231 − 1MASTER_DELAY232

  • 复制: 当启用了半同步复制的主服务器关闭时,主服务器在完成关闭之前无法等待半同步 ACK或超时。这阻止了半同步复制恢复为异步复制,并允许打开的事务在主服务器上完成,从而导致从服务器上丢失事件。

    为了解决这个问题,转储线程现在在关闭期间最后停止,在客户端被告知停止之后,这样,如果转储线程有来自活动客户端的未决事件,它们可以被发送到从属。(漏洞 #16775543)

  • 复制: 组提交期间的会话附件错误导致事务回滚(如预期的那样),但发生这种情况的事务仍然写入二进制日志并复制到从属服务器。因此,这样的错误可能会导致主从不匹配。

    现在,当发生此错误时,会在二进制日志中写入一个事件事件,导致复制停止,并通知用户二进制日志中可能存在冗余事件。现在还会向客户端报告一个额外的错误,表明正在进行的事务已被回滚。(漏洞 #16579083)

  • 复制: 当服务器以 和 以及 和一起START SLAVE启动时失败 。 master_info_repository=TABLErelay_log_info_repository=TABLEautocommit=0--skip-slave-start

    以前版本的 MySQL 的解决方法是在没有 选项的情况下重新启动从属mysqld 。--skip-slave-start(漏洞 #16533802)

  • 复制: 使用基于行的复制的从属无法正确读取包含类型列的行MYSQL_TYPE_DECIMAL (旧式十进制,在 MySQL 5.0.3 之前使用)。现在,如果从站接收到这种类型的数据,它就会抛出一个错误。您可以使用 ; 将旧式DECIMAL 格式转换为当前 MySQL 版本中使用的二进制格式 ALTER TABLE;有关详细信息,请参阅 从 MySQL 4.1 升级到 5.0。(漏洞 #16416302)

  • 复制: DROP TEMP TABLE IF EXISTS语句可能导致在时间点恢复操作期间应用二进制日志失败。这是因为,当使用基于行的复制时,服务器会附加IF EXISTS到写入二进制日志的任何DROP TEMPORARY TABLE语句,并且从属 SQL 线程不会检查 * 通配符过滤规则DROP TEMPORARY TABLE IF EXISTS。如果 --log-slave-updates在从机上也启用了,则这样的语句之前有一个 USE语句。如果语句引用的数据库USE不存在,则语句失败,并停止复制。

    现在,写入DROP TEMPORARY TABLE IF EXISTS二进制日志时,没有USE 写入语句,语句中的表名DROP TEMPORARY TABLE是完全限定的表名。(漏洞 #16290902)

  • ER_LOCK_DEADLOCK发生错误(或 ER_LOCK_WAIT_TIMEOUT错误,如果 innodb_rollback_on_timeout已启用) 后无法成功使用保存点 。(漏洞#17356954)

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

  • mysql_real_connect()如果失败,C API 函数可能会泄漏内存 。(漏洞#17337684)

  • 在使用布尔运算符的搜索中, 对表的全文搜索InnoDB失败。+(漏洞 #17280122)

  • 对于单线程工作负载,优化器会识别一些特殊情况,在这些情况下它可以避免函数调用并提高性能。(漏洞 #17234723)

  • AES_ENCRYPT()当 MySQL 使用 192 或 256 的值构建时 AES_DECRYPT()无法正常工作 AES_KEY_LENGTH。(缺陷 #17170207)

  • SELECT * from performance_schema.events_statements_current由于负载下的竞争条件,可能会引发断言。(漏洞 #17164720)

  • InnoDB在名称以数字开头的数据库中全文搜索失败。(漏洞 #17161372)

  • 成功的连接未能重置用于计算连续连接失败的每个 IP 地址计数器。max_connect_errors当达到限制时,这可能会导致主机被阻止 。(漏洞 #17156507)

  • 在启用线程池插件并使用 SSL 的情况下,一个连接中的错误可能会影响其他连接,导致它们失去连接。(漏洞 #17087862)

  • 在负载下,截断accounts Performance Schema 表可能会导致服务器退出。(漏洞 #17084615)

  • 在存储程序中,将标量子查询的值与IN子句进行比较会在第一次执行时导致错误,并在第二次执行时引发断言。(漏洞 #17029399)

  • my_strtoll10()函数可能会错误地将一些长字符串格式的数字转换为数值,并且无法设置溢出标志。(漏洞 #16997513)

  • 线程池插件中的竞争条件可能会导致状态变量 Aborted_connects不递增,并允许同一线程 ID 发生并发终止。(漏洞 #16959022)

  • 对于分区表,查询可能会返回不同的结果,具体取决于是否使用索引合并。(漏洞#16862316)

    参考资料:另请参阅:Bug #17648468、Bug #176588348、Bug #18167648。

  • 在这些情况下,多次执行存储过程会导致内存消耗过多:1) 存储过程有一条 SQL 语句在验证期间失败。2) 存储过程有一个需要重新准备的 SQL 语句。(漏洞 #16857395)

  • 对于某些语句,当优化器删除不需要的子查询子句时,可能会导致内存泄漏。(漏洞 #16807641)

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

  • 一般查询日志中的密码重写现在也适用于准备好的语句。(漏洞 #16732621)

  • 在存储过程中,对带有分区的表重复执行准备好的 CREATE TABLE语句可能会导致服务器退出。(漏洞 #16614004)

  • 对于调试版本,当优化器删除 Item_ref指向子查询的指针时,会导致服务器退出。(漏洞 #16509874)

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

  • 如果删除了系统表的主键mysql.proc(不受支持且不推荐的操作),则服务器将退出以进行后续存储过程调用。其他系统表可能会出现类似的问题。现在出现错误。(漏洞 #16373054)

  • 涉及元数据锁和InnoDB 死锁的死锁都被报告为 ER_LOCK_DEADLOCK错误,但只有 InnoDB死锁回滚了事务。现在两个死锁都回滚了事务。(漏洞 #14188793)

  • 为具有外连接的准备好的SELECT 语句返回的元数据可能表明包含NULL值的列是NOT NULL. (漏洞 #12818811)

  • 对于在子查询中访问 INFORMATION_SCHEMA表的查询,尝试锁定已经锁定的互斥量可能会导致服务器崩溃。(漏洞 #11765744)

  • 使用布尔运算符时,对表的全文搜索在InnoDB搜索包含撇号的单词时失败。

    innodb_ft_max_token_size 最大值被错误地定义为 252,这是最大字节长度 。现在最大值 innodb_ft_max_token_size为 84,这是最大字符长度。(缺陷 #69932,缺陷 #17276125)

  • InnoDB死锁导致事务回滚但没有释放元数据锁,阻塞事务表上的并发 DDL,直到出现死锁的连接发出显式COMMITor ROLLBACK。(缺陷 #69668,缺陷 #17054007)

  • libmysql.dll中缺少几个符号:my_initmysql_client_find_pluginmysql_client_register_pluginmysql_load_pluginmysql_load_plugin_vmysql_options4mysql_plugin_options。(漏洞 #69204、漏洞 #16797982、漏洞 #62394)

  • mysqldumpSET将 语句写 SET OPTION,重新加载时失败,因为不推荐使用的OPTION 关键字已从 SET 语法中删除。(漏洞 #67507,漏洞 #15844882)

  • 对于为事件调度程序、事件执行或新连接创建新线程失败,没有消息写入错误日志。这可能会给人留下事件调度程序正常运行的印象,而实际上却没有。(错误#67191、错误#14749800、错误#16865959)

  • 如果一个连接更改了其默认数据库并同时执行了另一个连接SHOW PROCESSLIST,则第二个连接在尝试显示第一个连接的默认数据库时可能会访问无效内存。记忆。(错误#58198,错误#11765252)

  • 为了更好地防止堆栈溢出,服务器现在在发出线程堆栈大小请求时考虑保护区的大小。(漏洞 #35019,漏洞 #11748074)