Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.6 的变化(2012-08-07,里程碑 9)

MySQL 5.6.6 的变化(2012-08-07,里程碑 9)

笔记

这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)

二进制日志记录

  • 性能: 服务器现在为二进制日志实现组提交:多个提交在内存中分组,然后作为一个组而不是单独写入并刷新到磁盘。这减少了写入和刷新的次数,提高了二进制日志记录的性能。组提交适用于所有存储引擎。 InnoDB实施一些优化以利用组提交功能。

    这些系统变量是与组提交一起添加的:

配置注意事项

弃用和移除说明

性能模式注释

  • Performance Schema 现在默认启用( performance_schema系统变量默认启用)。要禁用它,请 performance_schema=off在服务器启动时设置。

    此外,如果未明确设置,Performance Schema 现在会在服务器启动时自动调整其几个参数的值。例如,它以这种方式调整控制事件等待表大小的参数。要查看此策略下哪些参数的大小,请使用 mysqld --verbose --help并查找默认值为 −1 的参数,或查看 Performance Schema System Variables

    对于服务器启动时未设置(或设置为 -1)的每个自动调整参数,性能模式根据以下系统值的值确定如何设置其值,这些值被视为有关您如何拥有的提示配置您的 MySQL 服务器:

    max_connections
    open_files_limit
    table_definition_cache
    table_open_cache

    要覆盖给定参数的自动调整大小,请在启动时将其设置为 −1 以外的值。在这种情况下,性能模式为其分配指定的值。

    在运行时,SHOW VARIABLES 显示自动调整参数设置的实际值。

    如果性能模式被禁用,它的自动调整参数保持设置为 -1 并SHOW VARIABLES显示 -1。

安全说明

  • 实施了这些安全改进:

    • MySQL 现在提供了一种方法,用于存储在名为 .mylogin.cnf. 要创建该文件,请使用mysql_config_editor实用程序。稍后 MySQL 客户端程序可以读取该文件以获得用于连接到 MySQL 服务器的身份验证凭据。 mysql_config_editor写入 .mylogin.cnf文件使用加密,因此凭据不会以明文形式存储,并且当客户端程序解密时,其内容仅在内存中使用。通过这种方式,密码可以以非明文格式存储在文件中并在以后使用,而无需在命令行或环境变量中公开。有关详细信息,请参阅 mysql_config_editor — MySQL 配置实用程序

      .mylogin.cnf文件可以包含多组选项,称为登录路径”。这使得设置多个 个性以连接到不同的 MySQL 服务器变得容易。--login-path 当您调用客户端程序时,稍后可以使用该选项按名称选择其中任何一个。请参阅 影响选项文件处理的命令行选项

    • MySQL 现在支持对用户帐户密码进行更强大的加密,可通过名为的身份验证插件 sha256_password实现 SHA-256 密码散列。这个插件是内置的,所以它总是可用的,不需要显式加载。有关详细信息,包括创建使用 SHA-256 密码的帐户的说明,请参阅 SHA-256 可插入身份验证

      sha256_password与插件 引入相关的其他更改 :

      • 系统old_passwords 变量以前允许值 1 或 0 来控制and 语句和 函数是否使用 MySQL 本机密码散列 。现在 允许值 2 选择使用 SHA-256 密码散列。 CREATE USERGRANTPASSWORD()old_passwords

        笔记

        以前, old_passwords 允许值OFFor ON作为 0 或 1 的同义词。这不再适用。

      • SHA-256 密码哈希 ( old_passwords=2) 使用随机盐值,这使得结果具有不 PASSWORD() 确定性。因此,使用此函数的语句对于基于语句的复制不再安全,并且不能存储在查询缓存中。

      • 如果MySQL是用OpenSSL搭建的,在客户端连接过程中可以使用RSA加密来传输密码。和 系统变量允许在服务器端命名私钥文件sha256_password_private_key_pathsha256_password_public_key_path 公钥文件。状态变量显示 Rsa_public_key公钥值。mysqlmysqltest客户端支持一个 选项, --server-public-key允许在连接到服务器时明确指定公钥文件。(这个选项是通过一个新的MYSQL_SERVER_PUBLIC_KEYmysql_options()C API 函数 的选项 。)

      MySQL 连接器支持:使用 C 客户端库的连接器sha256_password 无需更改即可使用。为自己实现身份验证过程的连接器必须更新以说明客户端/服务器协议中的更改。

    • 服务器现在可以 --default-authentication-plugin 选择指定默认插件以与没有明确命名插件的新帐户相关联。允许的值为mysql_native_password(使用 MySQL 本机密码;这是默认值)和 sha256_password(使用 SHA-256 密码)。如有必要,此选项还会将初始 old_passwords值更改为与默认插件所需的密码哈希方法一致。

      笔记

      如果使用此选项将默认身份验证方法更改为 以外的值 mysql_native_password,则 MySQL 5.5.7 之前的客户端将无法再连接,因为它们无法理解对身份验证协议的更改。

    • mysql.user表现在有一 password_expired列允许 DBA 使帐户密码过期并要求用户重置其密码。默认password_expired 值为'N',但可以 'Y'使用新 ALTER USER语句设置为。帐户密码过期后,该帐户在后续与服务器的连接中执行的所有操作都会导致错误,直到用户发出 SET PASSWORD建立新帐户密码的语句。有关详细信息,请参阅 ALTER USER 语句过期密码的服务器处理

      如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将此更改合并到 mysql数据库中。

      警告

      更新: ALTER USER也将 Password列设置为空字符串,所以不要在5.6.6中使用这个语句。此问题已在 MySQL 5.6.7 中修复。

    • MySQL 现在有检查密码安全性的规定:

      这两种功能都由 validate_password插件实现。如果没有安装插件,受影响的语句和 PASSWORD()和和 OLD_PASSWORD()以前一样工作(没有密码检查),并且 VALIDATE_PASSWORD_STRENGTH() 总是返回 0。

      validate_password插件还实现了一组与控制密码检查的参数相对应的系统变量。如果安装了插件,您可以修改这些变量来配置密码策略。

      validate_password插件是使用 MySQL 插件 API 编写的,该 API 已扩展为支持编写密码验证插件。

      有关详细信息,请参阅 密码验证插件。有关编写密码检查插件的信息,请参阅 编写密码验证插件

    • 如果 mysql_upgrade 发现用户帐户的密码使用较早的 4.1 之前的散列方法进行散列,则mysql_upgrade现在会发出警告。应更新此类帐户以使用更安全的密码哈希。请参阅 MySQL 中的密码散列

    (漏洞 #65461,漏洞 #14136939)

  • 对于WITH_SSLCMake 选项, no不再是允许值或默认值。默认为现在bundled。因此,MySQL 现在始终支持 SSL。

添加或更改的功能

  • 不兼容的更改: 现在明确不允许将值分配 DEFAULT给存储过程或函数参数或存储程序局部变量(例如使用 语句)。这以前不受支持,也未按允许记录,但被标记为不兼容的更改,以防现有代码无意中使用此构造。仍然允许像以前一样分配给系统变量,但 现在分配给参数或局部变量会导致语法错误。 SET var_name = DEFAULTDEFAULTDEFAULT

    升级到 MySQL 5.6.6 或更高版本后,使用此构造的现有存储程序在调用时会产生语法错误。如果将 5.6.5 或更早版本的mysqldump文件加载到 5.6.6 或更高版本,加载操作将失败,并且必须更改受影响的存储程序定义。

  • 不兼容 的更改:--safe-mode服务器选项已被删除。

  • 重要变更;分区: MySQL 现在支持分区锁修剪,它允许许多针对分区表的 DDL 和 DML 语句使用 MyISAM(或使用表级锁定的其他存储引擎)仅锁定那些直接受语句影响的分区。这些陈述包括(但不限于)许多 SELECTSELECT ... PARTITIONUPDATEREPLACEINSERT和其他陈述。当与具有许多(32 个或更多)分区的表一起使用时,此增强功能尤其提高了许多此类语句的性能。有关受影响声明的完整列表以及详细信息和其他信息,请参阅 分区和锁定。(缺陷 #37252,缺陷 #11748732)

  • 重要变更;复制: 现在,如果多线程从站在使用该 --relay-log-recovery选项运行时失败,则可以安全地将其切换到单线程模式,尽管中继日志中存在任何未处理事务的间隙。为此,您现在可以使用 START SLAVE [SQL_THREAD] UNTIL SQL_AFTER_MTS_GAPS使从属 SQL 线程运行,直到在中继日志中不再发现此类间隙。完成此语句后,您可以更改slave_parallel_workers 系统变量,并(如有必要)在重新启动从站之前发出一条 CHANGE MASTER TO语句。(漏洞 #13893363)

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

  • 重要变更;复制: INSERT ON DUPLICATE KEY UPDATE如果目标表有多个主键或唯一键,现在标记为不安全的基于语句的复制。有关详细信息,请参阅 二进制日志记录中安全和不安全语句的确定。(错误#58637、错误#11765650、错误#13038678)

  • 重要变更;复制:SHOW BINARY LOGS语句(及其等价物 SHOW MASTER LOGS)现在可以由具有 REPLICATION CLIENT特权的用户执行。(以前,SUPER使用此语句的任何一种形式都需要特权。)

  • 重要变化: 在 MySQL 中,TIMESTAMP数据类型与其他数据类型的非标准方式不同:

    • TIMESTAMP未明确声明该NULL 属性的列将分配该NOT NULL 属性。NULL(如果未使用属性显式声明,则其他数据类型的列允许 值NOT NULL。)设置此类列以NULL将其设置为当前时间戳。

    • 表中的第一TIMESTAMP列,如果未使用NULL 属性或显式DEFAULTON UPDATE属性声明,则自动分配DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 属性。

    • TIMESTAMP第一列之后的列,如果未使用 NULL属性或显式 DEFAULT属性声明,将自动分配DEFAULT '0000-00-00 00:00:00'时间戳)。对于没有为此类列指定显式值的插入行,将分配该列'0000-00-00 00:00:00'并且不会出现警告。

    这些非标准行为仍然是默认行为, TIMESTAMP但现在已弃用,并且此警告出现在启动时:

    [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
    Please use --explicit_defaults_for_timestamp server option (see
    documentation for more details).

    如警告所示,要关闭非标准行为,请 explicit_defaults_for_timestamp 在服务器启动时启用新的系统变量。启用此变量后,服务器TIMESTAMP将按如下方式处理:

    • TIMESTAMPNULL如果未使用属性显式声明,则列允许 值NOT NULL。设置此类列以NULL将其设置为 NULL,而不是当前时间戳。

    • 不会自动为任何TIMESTAMP列分配DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP属性。必须明确指定这些属性。

    • TIMESTAMP声明为 NOT NULL和没有显式 DEFAULT属性的列被视为没有默认值。对于没有为此类列指定显式值的插入行,结果取决于 SQL 模式。如果启用严格 SQL 模式,则会发生错误。如果未启用严格 SQL 模式,则会为该列分配隐式默认值'0000-00-00 00:00:00'并出现警告。这类似于 MySQL 处理其他时间类型的方式,例如 DATETIME.

    要升级用于复制的服务器,请先升级从服务器,然后再升级主服务器。主从之间的复制应该可以工作,前提是它们都使用相同的值 explicit_defaults_for_timestamp

    1. 关闭从站,升级它们,使用所需的值配置它们 explicit_defaults_for_timestamp,然后将它们重新启动。

      从属节点将从主节点接收到的二进制日志格式中识别出主节点较旧(早于引入 explicit_defaults_for_timestamp),并且对 TIMESTAMP来自主节点的列的操作使用旧 TIMESTAMP行为。

    2. 关闭主服务器,升级它,并 explicit_defaults_for_timestamp 使用在从服务器上使用的相同值配置它,然后将其重新启动。

    (错误#63034、错误#13344629、错误#55131、错误#11762529)

  • 表现; InnoDB:现在可以 在线执行 许多对表的DDL操作 ,而不会使表无法用于查询。一些操作,例如创建或删除索引,甚至允许在操作进行时在表上, , 单个在线 DDL 操作也可以代替一系列语句,例如几条 语句, 然后是几条 语句。有关完整详细信息,请参阅 InnoDB 和在线 DDLInnoDBINSERTUPDATEDELETEDROP INDEXALTER TABLE ... ADD COLUMNCREATE INDEX

    ALTER TABLE对于尝试从在另一个会话 中更改的表中重新读取数据的一致读取事务,此更改会产生额外的影响。事务不会收到空集,而是会收到错误(ER_TABLE_DEF_CHANGED定义已更改,请重试事务)。(错误#58368、错误#11765404、错误#11872643、错误#12325508、错误#11765266、错误#60689)

  • 表现; InnoDB:表 的持久统计功能InnoDB 现在默认启用,并且可以在单个表的级别进行控制。此功能涉及配置选项 innodb_stats_persistentinnodb_stats_auto_recalc和 and 的 innodb_stats_persistent_sample_pages子句STATS_PERSISTENTSTATS_AUTO_RECALC和 。有关使用详细信息,请参阅 配置持久性优化器统计参数STATS_SAMPLE_PAGESCREATE TABLEALTER TABLE

  • 表现; InnoDB: MySQL 服务器现在包括广泛使用的 memcached内存缓存系统,以及一个允许通过memcached协议以 NoSQL 方式快速访问 InnoDB表 这种访问方式避免了 SQL 解析和构建查询优化计划的开销。您可以将基础数据存储在单个 表中,或将其分布在多个表中。和SQL都可以读写数据 例如,您可以通过memcached调用进行快速单键查找,并通过 SQL 对所有数据进行统计报告。 InnoDBmemcached get

    多个配置选项可让您微调该系统,特别是在原始性能与数据的持久性和一致性之间取得平衡。主要的新配置选项是 daemon_memcached_optiondaemon_memcached_r_batch_sizedaemon_memcached_w_batch_sizeinnodb_api_trx_levelinnodb_api_enable_mdlinnodb_api_enable_binlog

    有关完整详细信息,请参阅InnoDB memcached 插件

  • InnoDB: 对于具有持续繁重 工作负载或波动很大的工作负载的系统,几个新的配置选项可让您微调表的刷新 行为InnoDBinnodb_adaptive_flushing_lwm,, innodb_max_dirty_pages_pct_lwminnodb_max_io_capacity在后续版本中更改为 innodb_io_capacity_max),和 innodb_flushing_avg_loops。这些选项输入到 innodb_adaptive_flushing 选项使用的改进公式中。请参阅配置缓冲池刷新

  • InnoDB: InnoDB表现在支持 “可传输表空间的概念,允许 .ibd文件从正在运行的 MySQL 实例导出并导入到另一个正在运行的实例。该 FOR EXPORT子句 FLUSH TABLES将任何未保存的更改从 InnoDB内存缓冲区 .ibd文件。.ibd将文件和单独的元数据文件复制 DISCARD TABLESPACEandIMPORT TABLESPACE 子句ALTER TABLE 将表数据带入不同的 MySQL 实例。

    有关详细信息,请参阅导入 InnoDB 表

  • InnoDB: InnoDB现在支持语句的 子句 ,允许在数据目录外创建表。有关详细信息,请参阅在 外部创建表DATA DIRECTORY='directory'CREATE TABLE

  • 复制:STOP SLAVE选项 SQL_BEFORE_GTIDS没有正常运行,并且SQL_AFTER_GTIDS同一语句的选项根本没有运行。(漏洞 #13810456)

  • 复制:为mysqld 添加了 slave_rows_search_algorithms 系统变量,它确定启用时用于查找从属更新匹配项的搜索算法,包括表或索引散列是否用于使用主键或唯一键、其他键或不使用的搜索钥匙。 slave_allow_batching

  • Performance Schema 有一个新的系统变量 performance_schema_session_connect_attrs_size,和新的状态变量, Performance_schema_session_connect_attrs_lost。系统变量是为保存连接属性键/值对而保留的每个线程的预分配内存量。如果客户端发送的连接属性数据的总大小大于此数量,则性能模式会截断属性数据并增加状态变量。请参阅 性能模式连接属性表。(漏洞 #14076427)

  • yaSSL 从版本 1.7.2 升级到 2.1.4。(漏洞 #13713205)

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

  • 磁盘扫描多读取范围 (DS-MRR) 的优化器成本模型已得到改进。改进的成本模型使 DSMRR 更有可能用于从磁盘读取大量数据的查询。

  • bind_address以前,系统变量 的默认值为 0.0.0.0,这会导致服务器在所有服务器主机 IPv4 接口上接受 TCP/IP 连接。为了在没有特殊配置的情况下更容易使用 IPv6 连接, bind_address现在的默认值为 *. 这与 类似 0.0.0.0,但如果服务器主机支持 IPv6,则会导致服务器也接受所有 IPv6 接口上的 TCP/IP 连接。(接受 IPv4 和 IPv6 连接的另一种方法是使用bind_address=::,但在这种情况下,如果服务器主机不支持 IPv6,则会发生错误。)

  • 现在客户端程序可以以键/值对的形式将连接属性传递给服务器。使用C API 函数的 和 选项以及新函数的MYSQL_OPT_CONNECT_ATTR_RESET选项 MYSQL_OPT_CONNECT_ATTR_DELETE来 操作属性 。连接属性通过 和 Performance Schema 表公开。 mysql_options()MYSQL_OPT_CONNECT_ATTR_ADDmysql_options4()session_connect_attrssession_account_connect_attrs

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到 performance_schema数据库中。

    有关详细信息,请参阅 C API 函数参考MySQL 性能架构

  • 以前,对于半连接处理,外部查询规范仅限于简单的表扫描或使用逗号语法的内部连接,并且无法引用视图。现在外查询规范允许外连接和内连接语法,并且取消了表引用必须是基表的限制。

  • 为了通过减少会话之间对打开的表缓存的全局锁的争用来提高可伸缩性,现在可以将缓存划分为几个较小的缓存实例。一个会话现在只需要锁定一个实例就可以访问它以执行 DML 语句。这在实例之间分段缓存访问,允许在许多会话访问表时需要使用缓存的操作具有更高的性能。(DDL 语句仍然需要锁定整个缓存,但此类语句的频率远低于 DML 语句。)

    一个新的系统变量, table_open_cache_instances允许控制缓存实例的数量。每个实例的大小为 table_open_cache/ table_open_cache_instances。默认情况下,实例数为 1。

    三个新的状态变量提供有关打开表缓存操作的信息。 Table_open_cache_hitsTable_open_cache_misses 指示高速缓存中命中和未命中或查找的次数。 Table_open_cache_overflows 表示在打开或关闭表后,实例有多少次未使用的条目并且实例的大小大于table_open_cache/ table_open_cache_instances

  • 通用的过程 API已从服务器中删除。这以前是作为编写服务器程序的一种方式出现的,但除了PROCEDURE ANALYSE(). 删除接口简化了内部过程表示的各个方面,这些方面与服务器中不再存在的代码相关,但对其操作有负面影响,因为这些方面阻碍了优化器在更常见的查询类型上更好地执行的能力。此外,此代码阻碍了未来优化器的开发,将其删除将有利于该开发。

    PROCEDURE ANALYSE()仍然可用,但不再使用公共接口实现。(有关信息,请参阅使用 PROCEDURE ANALYZE。)删除过程接口的一个结果是 EXPLAIN SELECT ... PROCEDURE ANALYSE()现在可以在以前产生错误的地方工作。

修正错误

  • 不兼容的更改: 存储程序中使用的表或视图等对象的元数据处理不正确。每个此类对象的元数据在程序执行开始时收集,但如果 DDL 语句在程序执行期间修改了对象(或者如果程序保留在存储的程序缓存中,则在程序执行之间修改它)则不会更新。这导致实际对象结构与存储程序认为对象在执行期间具有的结构不匹配,并导致数据错误或服务器崩溃等问题。

    现在,在执行期间检测到存储程序中使用的对象的元数据更改,并重新解析程序中受影响的语句,以便它们使用更新后的元数据。

    示例:假设存储程序在循环中执行此语句,并且 t1在循环执行期间更改了表中的列:

    SELECT * FROM t1;

    以前,发生错误是因为程序执行未检测SELECT *到在更改后评估为一组不同的列。现在检测到表更改并SELECT重新分析以确定新的列集。

    其他情况也会发生重新分析,例如 t1 从基表更改为视图或 TEMPORARY表。有关详细信息,请参阅 准备好的语句和存储程序的缓存

    新行为可能存在不兼容性:假定先前行为并实施解决方法的应用程序代码可能需要更改。

    已纠正问题的其他实例:

    • SELECT *TEMPORARY对于使用准备好的语句在程序中创建的表, 存储程序中的操作可能会失败。

    • 未知列错误或错误数据可能是由于在程序执行之间或在程序循环中使用表时更改存储程序中使用的表中的列集而导致的。如果更改了视图定义,则在类似情况下也可能发生错误,对于 TEMPORARY表,如果删除了表,也可能发生错误。

    • 触发器未能注意到程序中访问的对象中的元数据更改可能会导致触发器故障。

    • 存储程序未能注意到程序中访问的对象的元数据更改可能会导致复制失败。

    (错误#61434、错误#12652835、错误#55678、错误#11763018、错误#64574、错误#13840615、错误#33843、错误#11747732、错误#33289、错误#11747626、错误#33255、错误#11747619 #33000,错误#11747566,错误#27011,错误#11746530,错误#33083,错误#11747581,错误#32868,错误#11747537,错误#12257,错误#11745236)

  • 重要变更;NDB Cluster: mysqld_safe现在捕获信号 13 (SIGPIPE),以便此信号不再终止 MySQL 服务器进程。(漏洞 #33984)

  • 表现; 创新数据库;分区: 优化器用于查询分区InnoDB表的统计信息仅基于每个此类表的第一个分区,导致使用错误的执行计划。(漏洞 #13694811)

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

  • 表现; InnoDB: 提高了InnoDB与 CPU 缓存一致性相关的代码效率。(漏洞 #14034087)

  • 表现; InnoDB: 提高了系统调用获取系统时间记录事务开始时间的效率。此修复减少了影响性能的潜在缓存一致性问题。(漏洞 #13993661)

  • 表现; InnoDB: 改进了 自适应刷新相关的算法。在使用压缩且数据集大于 缓冲池的情况下,此修复会提高刷新率 ,从而导致逐出。(漏洞 #13990648,漏洞 #65061)

  • 表现; InnoDB:通过减少上下文切换和在操作过程中获取/重新获取互斥锁的可能性,COMMIT了表操作 的效率 InnoDB(漏洞 #13989037)

  • 表现; InnoDB: 改进了启用配置选项时执行 刷新 的顺序innodb_flush_neighbors该算法使邻居刷新技术在 HDD存储上更快,同时减少了SSD 存储上的性能开销。(innodb_flush_neighborsSSD 硬件通常不需要。)(错误 #13798956)

  • 表现; InnoDB: 此修复程序通过删除缓冲池扫描以删除自适应哈希索引的条目来 DROP TABLE提高。 这种改进在具有非常大的缓冲池和启用该选项的系统上最为明显 (缺陷 #13704145,缺陷 #64284)InnoDBinnodb_adaptive_hash_index

  • 表现; 复制: 作为给定事务的一部分所做的所有更改都被缓存;当事务被提交时,这个缓存的内容被写入二进制日志。使用全局事务标识符时,标识此事务的 GTID 必须是缓存中属于该事务的所有事件中的第一个事件。

    以前,缓存的一部分在事务开始时被预先分配为缓冲区;提交后,它已使用有效的 GTID 完成。但是,由于无法在缓存中执行查找,因此必须将其刷新到一个临时文件中,然后在该文件中查找。当缓存缓冲区不足以容纳包含给定事务的所有更改时,它会将数据交换到磁盘,然后重新初始化缓存以使缓冲区再次正确填充正确的数据。每次写入 GTID 事件时,缓冲区实际上被刷新并重新初始化缓存,即使在构成给定事务的所有事件都适合缓存缓冲区的情况下,也是如此,

    现在只有在实际需要时才重新初始化缓存——换句话说,只有当缓存实际上被交换到磁盘时才重新初始化。

    此外,此问题的修复解决了当服务器无法写入空事务组时缺少解锁操作的问题,并减少了在将缓存刷新到磁盘之前将 GTID 添加到缓存内容所需的代码量。(漏洞#13877432)

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

  • 性能: 在存储程序中,即使未启用相应的日志,也会产生使语句日志友好的开销。(漏洞 #12884336)

  • 性能:MD5()函数 SHA1()对于短字符串有过多的开销。(错误#49491、错误#11757443、错误#60227、错误#14134662)

  • 创新数据库;复制: 当二进制日志语句在从属服务器上重放时 Com_insertCom_update、 和Com_delete 计数器由 BEGIN 启动影响 InnoDB表的事务的语句递增,但不会由 COMMIT结束此类事务的语句递增。这会影响这些语句,无论它们是复制的还是使用 mysqlbinlog运行的。(漏洞 #12662190)

  • InnoDB:如果表是在启用设置的情况下创建的,则 删除InnoDB临时表可能会留下.ibd文件 innodb_file_per_table。在 Windows 系统上,这可能会导致另一个问题:重复尝试删除文件 2000 秒。除了解决用于删除文件的不正确路径名之外,此修复还将重试循环限制为 10 秒,例如,如果文件由于被备份进程锁定而无法删除。(漏洞 #14169459)

  • InnoDB: 当导入表示压缩表的表空间时,正在执行不必要的 InnoDB 校验和计算(漏洞 #14161424)

  • InnoDB: 如果 MySQL 在ALTER TABLE t DISCARD TABLESPACE操作期间崩溃,它可能会 InnoDB在下次启动时处于崩溃状态。错误信息是:

    InnoDB: Error: a record lock wait happens in a dictionary operation!

    (漏洞 #14146981)

  • InnoDB:在表 的在线 CREATE INDEX语句 InnoDB。这个错误只影响非常小的表。它需要对表进行DML 操作,影响 主键列,同时CREATE INDEX发出语句。(漏洞 #14117641)

  • InnoDB: 如果在指定为只读的会话中创建 XA 事务,则可能会发生断言错误。(漏洞 #14108709)

  • InnoDB: 如果从表中删除了一行InnoDB,然后使用相同的主键值重新插入了另一行,并发事务尝试锁定该行可能会在它应该等待的时候成功。如果锁定选择使用WHERE使用二级索引执行索引扫描的子句,则会发生此问题。(缺陷 #14100254,缺陷 #65389)

  • InnoDB:此修复提高了 设置为大于 1 的 系统 INFORMATION_SCHEMA表 中数据的准确性。 改进的信息适用于从缓冲池中刷新的页数,特别是表中的这些条目: innodb_metricsinnodb_buffer_pool_instances

    buffer_flush_batch_total_pages
    buffer_flush_neighbor_total_pages
    buffer_flush_adaptive_total_pages
    buffer_flush_sync_total_pages
    buffer_flush_background_total_pages
    buffer_LRU_batch_total_pages

    (漏洞 #14037167)

  • InnoDB: 在使用REPEATABLE READ隔离级别的事务中,表的UPDATEor DELETE语句 InnoDB有时会忽略其他事务最近提交的行。如 一致非锁定读取中所述,事务中的 DML 语句REPEATABLE READ适用于其他事务提交的行,即使查询看不到这些行。(缺陷 #14007649,缺陷 #65111)

  • InnoDB: 在表的ANALYZE TABLE语句InnoDB,服务器可能挂起(在非调试版本中),或者可能发生断言错误,表明递归获取锁(在调试版本中)。(漏洞 #14007109)

  • InnoDB: 如果 在删除 InnoDB数据库时将表移动到不同 。(漏洞 #13982017)ALTER TABLE ... RENAMEDROP DATABASE

  • InnoDB:INFORMATION_SCHEMA.INNODB_TRX在服务器运行繁重的 查询 InnoDB可能会导致崩溃,错误日志中的消息引用该函数 fetch_data_into_cache_low。这个问题出现在新功能开发期间,只影响 MySQL 5.6。(漏洞 #13966453)

  • InnoDB: 修复了最近引入的InnoDB 持久统计问题,该问题可能导致崩溃(非调试构建)或断言错误(调试构建)。(漏洞 #13946118)

  • InnoDB:%在使用索引的查询中 包含一个InnoDB FULLTEXT可能会导致崩溃。(FULLTEXT索引 InnoDB是一项新功能,仍在开发中。)(错误 #13940669,错误 #64901)

  • InnoDB: 使用KILL语句终止查询可能会导致错误日志中出现不必要的消息:

    [ERROR] Got error -1 when reading table table_name

    (漏洞 #13933132)

  • InnoDB: 重命名表时,InnoDB 持久统计信息未与新表名相关联。(漏洞 #13920437)

  • InnoDB: 如果服务器在删除 InnoDB 临时表或临时表上的索引时 崩溃,则在崩溃恢复期间可能会发生更多错误,从而阻止服务器重新启动。(漏洞 #13913670)

  • InnoDB:如果使用减号运算符的术语后跟另一个使用加号运算符的术语,则对表 的FULLTEXT查询 InnoDB(漏洞 #13907075)

  • InnoDB: RW-locks 的performance_schema计数器 InnoDB没有记录一些小事务获取锁的情况。(漏洞 #13860722)

  • InnoDB:InnoDB 在短时间内 从表中删除大量数据此问题可能会导致不必要的磁盘空间使用,但不会导致任何数据完整性问题。如果此问题导致磁盘空间不足,请重新启动服务器以解决此问题。此问题只可能发生在 32 位平台上。(漏洞 #13847885)

  • InnoDB: 复制配置中的从属服务器可能会在创建InnoDB临时表时退出。(漏洞 #13838761)

  • InnoDB:SAVEPOINT将语句与InnoDB包含 FULLTEXT索引 使用时,服务器可能会崩溃 (漏洞 #13831840)

  • InnoDB:innodb_force_recovery 配置选项设置为 2 或更大,关闭可能会在消息后挂起:

    InnoDB: Waiting for purge thread to be suspended

    这个问题是在 MySQL 5.6 开发周期的最新变化中引入的。(漏洞 #13830371)

  • InnoDB:在 大于 1 的服务器上运行并发批量插入, auto_increment_offset=1可能 会 导致如下所示的间歇性错误,即使主键设置为 auto_increment 并从 语句中省略也是如此: auto_increment_incrementinnodb_autoinc_lock_mode=1INSERT

    Duplicate entry 'value' for key 'PRIMARY'

    解决方法是设置 auto_increment_offset=1innodb_autoinc_lock_mode=0传统)。(缺陷 #13817703,缺陷 #61209)

  • InnoDB: 当 DDL 和 DML 操作InnoDB同时在同一个表上运行时,服务器可能会因断言错误而停止:

    InnoDB: Error: a record lock wait happens in a dictionary operation!

    此修复源于 MySQL 5.6 中的在线 DDL 功能。(漏洞 #13641926)

  • InnoDB: 在为表创建主键的 语句ALTER TABLEInnoDB部分列特征可能设置不正确,导致后续查询出错。不正确的数据可能是列前缀的最大长度或 NOT NULL标志的状态。

    在 MySQL 5.1 中,此修复适用于 InnoDB 插件,但不适用于内置的 InnoDB 存储引擎。(漏洞 #13641275)

  • InnoDB:删除一个索引并创建另一个索引的表 的ALTER TABLE语句 InnoDB可能会失败,错误代码为 1280,并在消息中显示错误的索引名称。(缺陷 #13029445,缺陷 #62544)

  • InnoDB: 如果innodb_undo_tablespacesinnodb_undo_logs 配置选项被指定为引用单独 的撤消表空间,并且关联的表空间不存在,则在启动期间未正确检测到该错误情况。(漏洞 #13016100)

  • InnoDB: 改进了错误处理和消息,以尝试创建一个 带有引用自身的列的外键。该消息表明 数据字典存在潜在问题,而实际上并不存在此类问题。(漏洞 #12902967)

  • InnoDB: 对于InnoDB有触发器的表,在设置下 innodb_autoinc_lock_mode=1,有时自动增量值可能会在两个会话并发插入表时交错。自动增量值的顺序可能会因时间而异,从而导致使用复制的系统中的数据不一致。(缺陷 #12752572,缺陷 #61579)

  • InnoDB: 如果ALTER TABLE同时使用 IGNOREandADD UNIQUE KEY 子句会产生错误,而不是在第一个行之后删除所有重复行。通过此修复,语句创建索引ALTER TABLE IGNORE语法会自动启用该ALGORITHM=COPY子句 ALTER TABLE(漏洞 #12622150)

  • InnoDB: 当从InnoDB表中删除数据时,新插入的数据可能不会重用释放的磁盘块,导致系统表空间或.ibd文件的大小意外增加(取决于 . 的设置 innodb_file_per_table。 在某些情况下OPTIMIZE TABLE可以压缩 .ibd其他。随着附加数据的插入,释放的磁盘块最终将被重新使用。(Bug #11766634,Bug #59783)

  • InnoDB:由于 2 小时的超时值, 该CHECK TABLE语句对于大型表可能会失败InnoDB对于典型的存储设备,超过大约 200 或 350 GB 的表可能会出现此问题,具体取决于 I/O 速度。该修复放宽了对正在检查的表执行的锁定,从而降低了超时的可能性。它还可以InnoDB识别语法CHECK TABLE QUICK,从而完全避免超时的可能性。(缺陷 #11758510,缺陷 #50723)

  • InnoDB: 全文搜索InnoDB尝试跟踪外键引用而不跟踪它已经看到的引用。对于循环和其他复杂的设置,这可能会永远循环或很长时间,从而导致查询线程挂起。(错误#64274,错误#13701973)

  • 分区: 如果分区表t1是使用该ROW_FORMAT选项创建的,则尝试执行 ALTER TABLE t1 EXCHANGE PARTITION ... WITH TABLE t2失败并出现错误Tables have different definitions即使 table 的定义 t2t1. 发生这种情况是因为对表定义中的显式ROW_FORMAT设置进行了检查,如果已设置,则操作将被拒绝。

    现在在这种情况下,明确检查每个表实际使用的行格式,EXCHANGE PARTITION 如果两个行格式相同,则允许执行操作。(漏洞 #11894100)

  • 分区:表 的PARTITION_COMMENTINFORMATION_SCHEMA.PARTITIONS截断分区注释,只显示前80个字符。

    作为此问题修复的一部分,分区注释的最大长度现在设置为 1024 个字符,并且此宽度受 INFORMATION_SCHEMA.PARTITIONS.PARTITION_COMMENT. (错误#11748924,错误#37728)

  • 复制: 当一个完整的全局事务跨越中继日志,以至于只有它的 GTID 出现在给定的中继日志中,而事务的主体(包括 BEGINCOMMIT语句)出现在下一个中继日志中时,GTID 被错误地解释为属于一个空组. (漏洞 #14136654)

  • 复制: 在某些情况下,在提交或回滚正在进行的事务之前使用半同步复制进行日志轮换是可能的。(漏洞 #14123372)

  • 复制: 如果在服务器停止后删除了中继日志,而没有先停止复制,则服务器无法正常启动。(缺陷 #14029212,缺陷 #65152)

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

  • 复制:mysqld--bootstrap选项 由 mysql_install_db在初始化系统表时使用。现在,无论何时使用此选项,GTID(请参阅 使用全局事务标识符进行复制)和复制都会自动禁用。(漏洞 #13992602)

  • 复制: 理论上并发执行多个实例SHOW BINLOG EVENTS可能导致 MySQL 服务器崩溃。(漏洞 #13979418)

  • 复制: 如果在尝试初始化 mysql.slave_master_infomysql.slave_relay_log_info表时遇到错误,服务器将拒绝启动。现在在这种情况下, 检查复制元数据时会出现警告消息错误。当从未使用复制元数据表的版本进行实时升级时,也可能会发生这种情况,以通知用户已发生这种情况,但允许服务器继续启动。(漏洞 #13893363)

  • 复制:ER_AUTO_POSITION_REQUIRES_GTID_MODE_ON所 引用 错误的文本, AUTO_POSITION = 1尽管这应该是MASTER_AUTO_POSITION = 1。文本已更正。(漏洞 #13868465)

  • 复制: 一条CHANGE MASTER TO语句可以改变 的有效值 relay_log_purge。此外,relay_log_recovery系统变量现在是只读的,只能通过使用启动服务器来更改 --relay-log-recovery。(漏洞 #13840948)

  • 复制:binlog_rows_query_log_events= 1 并且使用基于行的日志记录格式将语句写入二进制日志时,服务器会生成一个包含原始语句文本的附加日志事件。如果 使用 在此日志上执行 mysqlbinlog,则会打印原始语句。为了防止在行事件之外执行该语句(这实际上会导致该语句被执行两次),它被注释掉了一个前导 字符。 --verbose --verbose#

    这是在假设这样的语句将由一行组成的情况下实现的,这意味着覆盖多行的语句处理不当,因为实际上只有语句的第一行被注释掉了。现在在这种情况下,声明的每一行都用前导注释掉#。(漏洞 #13799555)

  • 复制:SHOW BINLOG EVENTS当在或mysqlbinlog 的输出中查看时,长度超过 255 个字符的查询被截断。这是由于 Rows_query_log_events使用单个字节存储查询的长度。(漏洞 #13799489)

  • 复制: 复制锁和一些控制这些锁使用的协议没有得到很好的实施或执行。特别是,此修复改进了 、 和 等语句的CHANGE MASTER TO锁定 SHOW SLAVE STATUS处理 FLUSH LOGS。(漏洞 #13779291)

  • 复制: 当记录影响事务和非事务表的事务时,以下语句有时会以错误的顺序或在事务边界的错误一侧写入二进制日志:

    (漏洞 #13627921)

  • 复制:在主服务器上 设置binlog_checksum一个在从服务器上未知的值会导致复制失败。现在在这种情况下,复制校验和在从站上被禁用并且复制停止并显示适当的错误消息。(缺陷 #13553750,缺陷 #61096)

  • 复制: 为了提供一个崩溃安全的从站 , 以前 slave_master_info需要 通过 发出 . 为了简化使用这些从属日志表的复制设置,现在使用存储引擎创建它们。(漏洞 #13538891)slave_relay_log_infoslave_worker_infoMyISAMInnoDBALTER TABLEInnoDB

  • 复制: 当从站设置为 using 选项等于大于零的任何允许值,然后停止使用CHANGE MASTER TO,指向当前中继日志位置(如 SHOW SLAVE STATUS 所示),并再次启动,失败并出现错误Could不初始化主信息结构。(漏洞 #12995174)MASTER_DELAYSTOP SLAVESTART SLAVE

  • 复制:--relay-log-space-limit 选项有时会被忽略。

    更具体地说,当 SQL 线程进入睡眠状态时,它允许 I/O 线程以绕过中继日志空间限制的方式对其他事件进行排队,并且队列中的事件数量可能会增长到超过中继日志需要轮换。现在在这种情况下,SQL 线程会检查 I/O 线程是否应该轮换并为 SQL 线程提供清除日志的机会(从而释放空间)。

    请注意,当 SQL 线程处于事务中间时,它无法清除日志;它只能在事务完成之前请求更多事件。一旦事务完成,SQL 线程可以立即指示 I/O 线程进行轮换。(缺陷 #12400313,缺陷 #64503)

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

  • 复制: 长度超过主转储线程大小的事件max_allowed_packet 导致复制失败。当更新许多大行并使用基于行的复制时,可能会发生这种情况。

    作为此修复的一部分, slave_max_allowed_packet添加了一个新的系统变量,它允许 max_allowed_packet从属 SQL 和 I/O 线程超出。现在,从 master 传输到 slave 的数据包的大小仅根据该值进行检查,而不是根据 的值进行检查 max_allowed_packet。(缺陷 #12400221,缺陷 #60926)

  • 复制:当使用基于语句的复制和复制过滤服务器选项时, 使用AUTO_INCREMENTLAST_INSERT_ID()RAND()或用户变量的语句可能会应用在从站的错误上下文中(请参阅服务器如何评估复制过滤规则)。(缺陷 #11761686,缺陷 #54201)

    参考资料:另请参阅:Bug #11754117、Bug #45670、Bug #11746146、Bug #23894。

  • 复制:INSERT具有复合主键的表进行复制,其中包含的 AUTO_INCREMENT列不是此复合键的第一列,对于基于语句的二进制日志记录或复制来说是不安全的。此类语句现在被标记为不安全,并且在使用 STATEMENT二进制日志记录格式时会失败并显示错误。有关详细信息,请参阅二进制日志记录中安全和不安全语句的确定,以及 复制和 AUTO_INCREMENT

    笔记

    此问题不会影响使用 InnoDB存储引擎的 InnoDB表,因为具有 AUTO_INCREMENT 列的表至少需要一个键,其中自动增量列是唯一或最左边的列。

    (缺陷 #11754117,缺陷 #45670)

    参考资料:另请参阅:Bug #11761686、Bug #54201、Bug #11746146、Bug #23894。

  • Replication: 将replication slave升级到MySQL 5.6.2或更高版本后,启用query cache最终导致slave失效。(漏洞 #64624,漏洞 #14005409)

  • Microsoft Windows: 在 Windows 上, mysqlslap因尝试使用共享内存进行连接而崩溃。(错误#31173、错误#11747181、错误#59107、错误#11766072)

  • Microsoft Windows: 对于 Microsoft Windows,已弃用的 MySQL Configuration Wizard 不再分发,取而代之的是更新的 MySQL Installer 可用且首选。

  • 为表 运行后,某些其他 操作(如重命名表或重建主键)可能会导致崩溃。(漏洞 #14213568)ALTER TABLE tbl DISCARD TABLESPACEInnoDBALTER TABLE

  • 对于表单WHERE p1 AND (p2 OR p3)的条件,优化器现在使用索引合并访问方法,(p2,p3)如果它比范围扫描更有效p1。以前,当可以进行范围扫描时,不考虑索引合并。(漏洞 #14208922)

  • 本应显示“YEAR(2)”的错误消息显示为“YEAR(0)”。(漏洞 #14167585)

  • 对于调试版本, INSERT IGNORE INTO ... SELECT选择多 max_join_size行可能会引发断言。(漏洞 #14145442)

  • 通过将一般查询日志记录到表中,在只读事务中禁用日志记录,因为日志表上的写锁获取被阻止。(漏洞 #14136866)

  • 除非还构建了性能模式,ARCHIVE否则无法构建存储引擎。(漏洞 #14116252)

  • 如果配置选项请求将不存在的页面加载到 InnoDB 缓冲池中,则 innodb_buffer_pool_load_at_startup 后续的关闭操作可能会挂起。(漏洞 #14106082)

  • 在调试版本中,服务器无法从存储引擎检查错误状态并提出断言。(漏洞 #14101852)

  • 在调试版本中,在创建 带有和 禁用的InnoDB表 期间发生的警告可能会引发断言。(漏洞 #14101563)ROW_FORMAT=DYNAMICinnodb_file_per_table

  • CREATE TABLE ... SELECT使用第一列中的单行查询输出 创建的派生表和表NULL可能会将值更改为 0。(缺陷 #14069831)

  • 对触发器中子查询结果的列可空性的不正确评估可能会导致列不能为空错误。(漏洞 #14069810,漏洞 #14005353)

  • 性能模式没有为CALL语句生成一致的摘要值。(漏洞 #14069132)

  • LooseScan 半连接策略可能无法从结果集中删除重复项。(漏洞 #14053325)

  • 的某些参数RPAD()可能会导致未初始化的变量警告。(漏洞 #14039955)

  • 对于使用 编译的调试版本gcov,使用DBUG_SUICIDE丢失 gcov数据的测试。(漏洞 #14028421)

  • 当删除强制外键约束的索引时,在重新启用foreign_key_checks=0该选项后,涉及外键列的进一步操作可能会导致严重错误 。foreign_key_checks(漏洞 #14025221)

  • 对管理语句中失败的内部提交的错误处理,例如ANALYZE TABLE 可能导致提出断言。(漏洞 #14001091)

  • TIME对作为参数给定 的值的小数计算不当 IF()or IFNULL()可能会导致服务器崩溃。(错误#13988413,错误#14042545)

  • 的一些参数MAKETIME() 可能会导致缓冲区溢出。(漏洞 #13982125)

  • 对于调试版本,将双精度值转换为 lldiv_t类型可能会引发断言。(漏洞 #13976233)

  • 在多表 UPDATE IGNORE 语句期间错误处理失败可能会导致引发断言。(漏洞 #13974815)

  • 按子查询中的外部 BLOB列分组的查询导致服务器崩溃。(漏洞 #13966809)

  • 从涉及表的左连接或右连接中 选择MIN()or 可能会导致服务器崩溃。(漏洞 #13966514)MAX()INFORMATION_SCHEMA

  • 包含对用户变量的引用的查询未通过一些重写写入一般查询日志,而不是收到的。(漏洞 #13958454)

  • 对于调试版本,优化器可能会在检查排序顺序时更改查询计划并返回不正确的结果。(漏洞 #13949068)

  • 在 Performance Schema 中可能会出现无限线程循环,导致服务器无响应。(漏洞 #13898343)

  • Performance Schema 表聚合操作的开销过多。(漏洞#13862186)

  • 系统version_compile_machine 变量有时不包括在 6464 位系统上编译的服务器二进制文件的值。(漏洞 #13859866)

  • 启用子查询具体化后,子句中包含子查询的某些查询会HAVING导致服务器崩溃。(漏洞 #13848789)

  • InnoDB启用持久统计功能时,带有删除标记记录ALTER TABLE 的表上的语句InnoDB可能会导致崩溃(非调试构建)或断言错误(调试构建)。(错误#13838962,错误#13867915)

  • 在引导程序模式下,如果服务器提前中止,服务器信号处理程序线程不会关闭。(漏洞 #13837221)

  • MySQL 5.6 中的一些错误与 MySQL 5.5 中的编号不同。(漏洞 #13833438)

  • 如果KILL QUERY 中断 anINSERTUPDATE具有 IGNORE修饰符,OK 将错误地返回给客户端而不是错误代码。现在返回一个错误(查询执行被中断)。(漏洞 #13822652)

  • 如果KILL QUERY 在派生表具体化过程中中断语句,服务器稍后会在尝试读取不存在的具体化表时崩溃。(漏洞 #13820776)

  • 双表连接的成本计算不正确可能会导致连接顺序不正确。(漏洞 #13810048)

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

  • Performance Schema 将标识符存储在摘要表中, utf8而不是先从原始字符集中转换它们。(漏洞 #13809293)

  • 不正确的存储程序缓存可能会导致存储程序中包含GROUP BY 子句的语句在多个程序调用中返回不同的结果。(漏洞 #13805127)

  • 为了将时间值与索引字符列进行比较,优化器可以应用 range访问方法,从而执行仅找到文字匹配项的索引搜索。这是不正确的,因为 MySQL 允许在表示为字符串的时间值中使用各种分隔符。(漏洞 #13803810)

  • 对优化器跟踪输出进行了多项澄清。(漏洞 #13799348)

  • viosslfactories没有在 Oracle Linux 6.0 上使用CMake选项 -DWITH_SSL=system-DWITH_DEBUG=1. (漏洞 #13799126)

  • 在调试版本中,关闭期间信号处理程序中的竞争条件导致服务器崩溃。(漏洞 #13793813)

  • 引用视图并使用半连接转换执行的准备好的语句可能会针对不同的执行返回不同的结果。(漏洞 #13773979)

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

  • 外连接查询ALL可能会返回不正确的结果,因为优化器错误地重写了它们以使用内连接。(漏洞 #13735712)

  • (a,b) IN (SELECT c,d FROM t1 WHERE ...)如果在和/或 包含值t1上有索引,可能会产生不正确的结果。(漏洞 #13731417)(c, d)cdNULL

  • 对于有效导致完整索引扫描的开放范围,优化器不会丢弃不需要的范围谓词。(漏洞 #13731380)

  • 根据操作数的顺序,范围优化器有时不会对等价表达式进行相同处理。例如,它可以区别对待a <= band b >= a。(漏洞 #13701206)

  • 启用半连接优化后,会针对表数大于搜索深度的查询提出断言。(漏洞 #13685026)

  • 截断表分区不会使使用该表的查询缓存中的查询无效。(漏洞 #13485448)

  • 设置max_sort_length为较小的值可能会导致服务器崩溃。(漏洞 #13485416)

  • 在子句中使用文字值执行的查询 WHERE返回的结果可能不同于为使用 子句SELECT中的语句 从单独的表中选择相同文字值而编写的相同查询WHERE。(漏洞 #13468414)

  • 条件处理程序代码可以假设在处理程序执行后,控制将向上传递一个级别给父级,有时会导致服务器崩溃。(漏洞 #13431226)

  • 如果GROUP_CONCAT()结果是使用中间结果计算的(例如,如果存在ORDER BYDISTINCT存在),则每个中间结果都会被截断为最大值 64K,即使 group_concat_max_len系统变量设置为更大的值也是如此。现在任何中间结果和最终结果的长度都由该 group_concat_max_len值控制。(漏洞 #13387020)

  • ALL由于错误的查询转换 ,带有子查询谓词的查询可能会返回不正确的结果。(漏洞 #13330886)

  • 使用接口在索引扫描和随机扫描之间切换 HANDLER可能会导致接口无法正确重新初始化扫描。(漏洞 #13008220)

  • 数据库中命名的文件的存在.empty阻止 test了删除该数据库。(漏洞 #12845091)

  • 对于带有ORDER BY COUNT(*)LIMIT的查询,优化器可以选择产生不正确结果的执行计划。(漏洞 #12713907)

  • 对于一些应该在非主索引上使用范围扫描执行并且需要使用文件排序的子查询,只有子查询的第一次执行是作为范围扫描完成的。以下所有执行都是作为全表扫描完成的,导致性能不佳。此外,如果使用索引条件下推,可能会返回不正确的结果。(漏洞 #12667154)

  • IPv6 函数,例如IS_IPV6() 生成带有使用多字节字符集的参数的 Valgrind 警告。(错误#12635232,错误#14040277)

  • STRAIGHT_JOIN使用和使用多范围读取优化执行的 查询可能会导致内存泄漏。(漏洞 #12365385)

  • 性能模式的开销减少了。(漏洞 #12346211)

  • IN使用方差或标准差聚合函数的子查询可能会返回不同的结果,具体取决于是否 启用了标志。 optimizer_switch materialization

    笔记

    这些聚合函数现在可能会返回一个与以前不同的小数位数的结果。

    (漏洞 #11766758)

  • 在 Windows 上,初始数据库创建在引导过程中失败。(漏洞 #11766342)

  • 优化器中的回归错误可能会导致表UPDATE上的语句 使用过多的磁盘InnoDB。对于innodb_file_per_table 启用时创建的表,OPTIMIZE TABLE可用于恢复使用的过多空间。对于在 InnoDB系统表空间中创建的表,需要执行转储并恢复到系统表空间的新实例中。(缺陷 #65745,缺陷 #14248833)

  • 加载 UCA 或 LDML 归类描述时发生的解析错误未写入错误日志。(漏洞 #65593,漏洞 #14197426)

  • 可能会为从某些视图返回的列生成不正确的元数据。(漏洞 #65379,漏洞 #14096619)

  • 如果帐户具有非零 MAX_USER_CONNECTIONS值,则该值并不总是被尊重。(漏洞 #65104,漏洞 #14003080)

  • ALTER TABLE使用无效的外键约束执行操作时,报告的错误 ER_CANT_CREATE_TABLE不是 ER_CANNOT_ADD_FOREIGN。(缺陷 #64617,缺陷 #13840553)

  • SAVEPOINTXA 事务中错误地禁止语句。(错误#64374,错误#13737343)

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

  • 如果慢速查询日志文件是命名管道,则服务器在关闭时崩溃。(缺陷 #64345,缺陷 #13733221)

  • 某些捷克语错误消息包含无效字符。(缺陷 #64310,缺陷 #13726075)

  • lower_case_table_names=2 具有不区分大小写的文件系统(例如 Windows 或 OS X)的系统上,CREATE TABLE ... LIKE没有保留语句中给出的目标表名称的字母大小写。(漏洞 #64211,漏洞 #13702397)

  • 存储引擎的文件访问ARCHIVE未被检测,因此未显示在性能模式表中。(漏洞 #63340,漏洞 #13417440)

  • Performance Schema 在 Windows 文件名中错误地显示了一些反斜杠(通过将它们加倍)。(漏洞 #63339,漏洞 #13417446)

  • 使用不适当的互斥锁来保护随机数生成,导致连接操作期间发生争用。(缺陷 #62282,缺陷 #12951609)

  • mysql_store_result()并且 mysql_use_result()不与准备好的语句一起使用,也不打算在后面调用mysql_stmt_execute(),但在以这种方式调用时未能返回错误 libmysqld。(缺陷 #62136,缺陷 #13738989)

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

  • 在某些情况下,直到使用(这应该不是必需的)之前,效果RENAME USER才被认可 。FLUSH PRIVILEGES(漏洞 #61865,漏洞 #12766319)

  • 如果bind_address系统变量被赋予主机名值并且主机名解析为多个 IP 地址,则服务器无法启动。例如,with bind_address=localhost,如果 localhost同时解析为 127.0.0.1::1,则启动失败。现在服务器在这种情况下更喜欢 IPv4 地址。(缺陷 #61713,缺陷 #12762885)

  • SHOW TABLES除非所需信息已经在磁盘缓存中,否则速度非常慢。(缺陷 #60961,缺陷 #12427262)

  • 在 Windows 上,mysql客户端在使用其完整路径名调用时崩溃。(缺陷 #60858,缺陷 #12402882)

  • 在执行、、 和 的组合时SELECT, 会话可能最终陷入僵局 。(缺陷 #60682,缺陷 #12636001)DROP TABLEKILLSHOW ENGINE INNODB STATUS

  • 对于调试版本,处理 INSERT DELAYED语句期间发生的错误可能会使服务器崩溃。(缺陷 #60114,缺陷 #11827404)

  • 使用CONCAT()LIKE模式匹配构建模式可能会导致内存损坏和匹配失败。(缺陷 #59140,缺陷 #11766101)

  • 由于竞争条件,两个线程可能会针对不同的查询以相同的查询 ID 结束。(错误#58785,错误#11765785)

  • 对于具有范围谓词的查询,优化器可能会错误计算所使用的关键部分的数量,从而可能导致服务器崩溃。(错误#58731,错误#11765737)

  • SHOW语句将存储过程、存储函数和事件名称视为区分大小写。(错误#56224,错误#11763507)

  • 如果发生文件写入错误, mysqlbinlog将退出且没有错误代码。(错误#55289,错误#11762667)

  • yaSSL 拒绝了 OpenSSL 接受的有效 SSL 证书。(错误#54348,错误#11761822)

  • 如果服务器在执行网络 I/O 时持有全局互斥锁,则客户端断开连接可能会很慢。(错误#53096,错误#11760669)

  • UPDATE带有 关键字 的多表IGNORE导致不适当且无意义的Got error 0 from storage engine消息。(缺陷 #49539,缺陷 #11757486)

  • 转储mysql数据库时, mysqldump没有包含 general_logslow_query_log表,因为它们无法被锁定。如果该文件包含数据库的DROP DATABASE语句,则在重新加载转储文件后会导致问题mysql :数据库不再包含日志表,并且尝试记录到它们失败。现在mysqldump 包括重新创建 general_logslow_query_log表的语句,以便它们在加载转储文件后存在。日志表内容仍未转储。(错误#45740,错误#11754178)

  • 当查询被终止时,错误代码并不总是通过服务器代码正确传播。(错误#43353,错误#11752226)

  • 与未引用的数字相比,优化器可以为使用引用的数字的条件选择更差的执行计划。(错误#43319,错误#11752201)

  • 使用的查询针对 进行了优化 ,但未针对 或 进行了优化。(错误#43187,错误#11752097)WHERE (col1, col2) IN ((const, const))SELECTDELETEUPDATE

  • 对于ALTER TABLEwith IGNORE关键字,IGNORE现在是提供给存储引擎的一部分信息。在就地或复制算法之间选择更改表时是否使用它取决于存储引擎。对于InnoDB索引操作, IGNORE如果索引唯一则不使用,所以使用复制算法。(错误#40344,错误#11750045)

  • LEFT JOIN在派生表上非常慢。现在通过使用子查询具体化解决了这个问题。(错误#34364,错误#11747876)

  • MySQL 在为和 语句的列定义中的默认值 强制执行NO_ZERO_DATE和 SQL 模式 时过于激进 。以前,启用这些 SQL 模式时无效的默认日期会产生错误,即使未启用严格模式也是如此。现在启用 或启用,如果未启用严格 SQL 模式,则无效的默认日期会产生警告,如果启用严格模式,则会产生错误。(缺陷 #34280,缺陷 #11747847)NO_ZERO_IN_DATECREATE TABLEALTER TABLENO_ZERO_DATENO_ZERO_IN_DATE

  • 索引创建操作可能会产生 冗余的Specified key was too long ”消息。(错误#31149,错误#11747177)

  • 存储引擎 API 的代码未检查 、 和 函数的ha_rnd_init()返回 ha_index_init()index_init()。(错误#26040、错误#11746399、错误#54166、错误#11761652)

  • 对于超过 64 个字符的表或数据库名称,返回错误不正确的表名而不是标识符太长。(缺陷 #25168,缺陷 #11746295)

  • 在启动过程中,mysqld可能会错误地删除已在运行的 mysqld的 PID 文件。(错误#23790,错误#11746142)

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

  • 使用ALTER TABLE添加 TIMESTAMP包含 DEFAULT CURRENT_TIMESTAMP在定义中的列导致列包含'0000-00-00 00:00:00',而不是当前时间戳。(错误#17392,错误#11745578)