Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.4 的变化(2011-12-20,里程碑 7)

MySQL 5.6.4 的变化(2011-12-20,里程碑 7)

笔记

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

条件处理程序更改

  • 不兼容的更改: MySQL 现在支持该GET DIAGNOSTICS语句。GET DIAGNOSTICS为应用程序提供了一种从诊断区域获取信息的标准化方式,例如先前的 SQL 语句是否产生了异常以及它是什么。请参阅GET DIAGNOSTICS 语句

    此外,纠正了条件处理程序处理规则中的几个缺陷,使 MySQL 的行为更像标准 SQL:

    • 块作用域用于确定选择哪个处理程序。以前,存储程序被视为具有处理程序选择的单一范围。

    • 更准确地解决了条件优先级。

    • 诊断区域清理已更改。错误 #55843 导致在激活处理程序之前从诊断区域清除已处理的条件。这使得条件信息在处理程序中不可用。现在条件信息在处理程序中可用,可以用GET DIAGNOSTICS语句检查它。如果在处理程序执行期间尚未清除条件信息,则在处理程序退出时清除条件信息。

    • 以前,一旦条件发生,处理程序就会被激活。现在它们不会被激活,直到条件发生的语句完成执行,此时选择最合适的处理程序。这对于引发多个条件的语句可能会有所不同,如果在语句执行期间稍后引发的条件比较早的条件具有更高的优先级并且两个条件在相同范围内有处理程序。以前,将选择引发第一个条件的处理程序,即使它的优先级低于其他处理程序。现在选择具有最高优先级的条件的处理程序,

    • 修复了由于处理程序调用堆栈处理不正确而导致服务器退出的问题。

    刚刚描述的工作涉及几个条件处理程序错误修复:

    • RETURN声明没有清除应有的诊断区域。现在诊断区域在执行之前被清除 RETURN。这可以防止嵌套函数调用中的条件错误地传播到外部范围。这也意味着无法从存储函数返回 SQL 警告。此更改不向后兼容,但产生的行为更像标准 SQL。

    • 激活SQLHANDLER时,已处理的条件会立即从诊断区域中删除。因此,在处理程序中执行的任何 SQL 诊断语句都无法检查激活处理程序的条件。现在条件信息在处理程序中可用。

    • 如果存储程序中的同一级别存在多个处理程序,则可能会选择错误的处理程序。现在选择最高优先级条件的处理程序。

    • 如果错误发生在不同处理程序出现在不同嵌套级别的上下文中,则可以选择外部处理程序而不是最内部的处理程序。

    有关详细信息,请参阅处理程序的范围规则。(错误#12951117、错误#38806、错误#11749343、错误#55852、错误#11763171、错误#61392、错误#12652873、错误#11660、错误#11745196、错误#48637、错误#11756690)

小数秒处理

  • 不兼容的更改: MySQL 现在允许 、 和 TIME, 精度可达微秒(6 位)。要定义包含小数秒部分的列,请使用语法 ,其中is 、 或 ,并且 是小数秒精度。例如: DATETIMETIMESTAMPtype_name(fsp)type_nameTIMEDATETIMETIMESTAMPfsp

    CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

    fsp值(如果给定)必须在 0 到 6 的范围内。值 0 表示没有小数部分。如果省略,则默认精度为 0。(这与标准 SQL 默认值 6 不同,以与以前的 MySQL 版本兼容。)

    以下各项总结了此更改的含义。另请参阅时间值中的小数秒

    • 对于TIMEDATETIMETIMESTAMP列,新表中的编码和存储要求与以前创建的表中的此类列不同,因为这些类型现在包含小数秒部分。这会影响依赖于行格式的语句的输出,例如CHECKSUM TABLE.

    • 由于 MySQLDATETIMETIMESTAMP类型的编码和存储要求的这些变化,将使用包含 和 类型的 MySQL 5.6.4 之前的InnoDB表 导入 MySQL 5.6.4(或更高版本)需要一个变通过程,这在服务器变化部分中有描述MySQL 5.6的 变化。 ALTER TABLE ... IMPORT TABLESPACEDATETIMETIMESTAMP

    • 时态文字的语法现在生成时态值: 、 、 和,以及 ODBC 语法等价物。如果指定,结果值包括尾随的小数秒部分。以前,时间类型关键字被忽略,这些构造产生字符串值。请参阅 标准 SQL 和 ODBC 日期和时间文字DATE 'str'TIME 'str'TIMESTAMP 'str'

    • 采用时间参数的函数接受带有小数秒的值。时间函数的返回值包括适当的小数秒。

    • INFORMATION_SCHEMACOLUMNS和 三个表现PARAMETERSROUTINES有一个 DATETIME_PRECISION列。它的值是 、 和 列以及其他数据类型的 TIMEDATETIME数秒 TIMESTAMP精度 NULL

    • C API 可容纳小数秒,如下所示:

      • MYSQL_FIELD列元数据结构中,该decimals成员指示 、 和 列的小 TIME数秒 DATETIME精度 TIMESTAMPdecimals客户端可以通过检查相应MYSQL_FIELD结构中的非零值来确定结果集时间列是否具有小数秒部分。以前,该decimals成员指示数字列的精度,否则为零。

      • MYSQL_TIME用于二进制协议的结构中,该second_part 成员表示 、 和 列的 TIME微秒 DATETIME部分 TIMESTAMP。以前,该second_part成员未被使用。

    在某些情况下,以前接受的语法可能会产生不同的结果。以下各项指示可能需要更改现有代码以避免出现问题的位置:

    • 一些表达式产生的结果与以前的结果不同。示例: timestamp系统变量返回一个包含微秒小数部分而不是整数值的值。返回包含当前时间的结果的函数(例如 CURTIME()SYSDATE()UTC_TIMESTAMP())将参数解释为一个fsp值,并且返回值包括那么多数字的小数秒部分。以前,这些函数允许参数但忽略它。

    • TIMEDATETIME通过将时间添加到当前日期来转换为值 。'00:00:00'(这意味着如果时间值超出从到 的范围,则结果的日期部分不同于当前日期'23:59:59'。)以前,将 TIME值 转换DATETIME为不可靠。请参阅 日期和时间类型之间的转换

    • TIMESTAMP(N) 在旧的 MySQL 版本中是允许的,但 N它是显示宽度而不是小数秒精度。在 MySQL 5.5.3 中删除了对这种行为的支持,因此合理更新的应用程序不应受到此问题的影响。否则,必须重写代码。

    笔记

    从理解小数秒的主服务器复制到不理解小数秒的旧从服务器可能会出现问题:

    • 对于CREATE TABLE包含 fsp值大于 0 的列的语句,复制将因解析器错误而失败。

    • fsp使用值为 0 的时间数据类型的 语句将适用于基于语句的日志记录,但不适用于基于行的日志记录。在后一种情况下,数据类型在主机上的二进制格式和类型代码与从机上的不同。

    • 某些表达式结果在主从上会有所不同。例如, timestamp如前所述,涉及系统变量的表达式或返回当前时间的函数具有不同的结果。

    (缺陷 #8523,缺陷 #11745064)

InnoDB 注释

优化器注释

  • 实施了这些查询优化器改进:

    • 优化器检测并优化掉 // / 子查询中这些无用 INALL查询 部分 SOMEEXISTS

      • DISTINCT

      • GROUP BY, 如果没有 HAVING子句也没有聚合函数

      • ORDER BY,这没有效果,因为 LIMIT这些子查询不支持

性能模式注释

  • Performance Schema 添加了以下内容:

    • Performance Schema 现在允许在服务器启动时进行仪器和消费者配置,以前只能在运行时使用 和 表UPDATE的语句进行配置 。进行此更改是因为运行时配置为时已晚,无法禁用在服务器启动期间已初始化的工具。例如, 互斥量在服务器启动期间初始化一次,因此尝试在运行时禁用相应的工具没有任何效果。 setup_instrumentssetup_consumerswait/sync/mutex/sql/LOCK_open

      要在服务器启动时控制仪器,请使用以下形式的选项:

      --performance-schema-instrument='instrument_name=value'

      这里,instrument_name是一个仪器名称,例如 wait/sync/mutex/sql/LOCK_openvalue是以下值之一:

      • off, false, 或 0: 禁用仪器

      • on, true, 或 1: 启用仪器并计时

      • counted:启用并计算(而不是时间)仪器

      每个 --performance-schema-instrument 选项只能指定一个仪器名称,但可以给出该选项的多个实例以配置多个仪器。此外,仪器名称中允许使用模式来配置与模式匹配的仪器。要将所有条件同步工具配置为启用和计数,请使用此选项:

      --performance-schema-instrument='wait/synch/cond/%=counted'

      要禁用所有仪器,请使用此选项:

      --performance-schema-instrument='%=off'

      较长的乐器名称字符串优先于较短的模式名称,无论顺序如何。有关指定模式以选择工具的信息,请参阅 命名工具或过滤操作的消费者

      无法识别的仪器名称将被忽略。稍后安装的插件可能会创建仪器,此时名称会被识别和配置。

      要在服务器启动时控制消费者,请使用以下形式的选项:

      --performance-schema-consumer_consumer_name=value

      这里,consumer_name是消费者名称,例如events_waits_historyvalue是以下值之一:

      • off, false, or 0:不为消费者收集事件

      • on, true, or 1: 为消费者收集事件

      例如,要启用 events_waits_history消费者,请使用此选项:

      --performance-schema-consumer-events-waits-history=on

      可以通过检查该 setup_consumers表找到允许的消费者名称。不允许使用图案。

      除了之前在服务器启动时允许配置的更改外,默认的仪器和消费者配置也发生了变化。以前,默认情况下启用所有仪器和消费者。现在,除语句、I/O 和空闲仪器外,其他仪器都被禁用。除了全局、线程和当前语句消费者外,消费者被禁用。这些更改会产生一个低开销的默认配置。

    • 具有EVENT_ID列的表现在也具有END_EVENT_ID支持确定嵌套事件关系的列:

      和以前一样,EVENT_ID在事件开始时填充线程当前事件计数器。此外,END_EVENT_ID直到 NULL事件结束,此时它被设置为新线程的当前事件计数器。这允许使用以下表达式确定关系事件 B 包含在事件 A 中,而不必使用以下每个包含关系 NESTING_EVENT_ID

      A.EVENT_ID <= B.EVENT_ID AND B.END_EVENT_ID <= A.END_EVENT_ID
    • Performance Schema 在表和 表 两个地方聚合了文件 I/O 操作 。可以 使用列将 表连接到 。但是,不可能对 表 和 表做同样的事情,因为前者 用作实例标识符而后者用作events_waits_summary_xxxfile_summary_xxxevents_waits_summary_global_by_event_namefile_summary_by_event_nameEVENT_NAMEevents_waits_summary_by_instancefile_summary_by_instanceOBJECT_INSTANCE_BEGINFILE_NAME. 这意味着可以同时获得文件 I/O 延迟和每个文件的使用情况,但是当存在不止一种形式的文件(例如多个重做日志、表文件等)时,无法正确地将延迟与使用相关联.

      为了解决这个问题,该 file_summary_by_instance表现在有一OBJECT_INSTANCE_BEGIN列。此外, file_summary_by_instancefile_summary_by_event_name都有额外的聚合列(例如计时器等待信息),这在许多情况下可以在根本不需要连接的情况下获得所需的摘要信息。

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

    有关详细信息,请参阅MySQL 性能架构

添加或更改的功能

  • 表现; InnoDB: 新的优化适用于只读InnoDB 事务。有关详细信息,请参阅 优化 InnoDB 只读事务。新的优化使 自动提交比以前更适用于InnoDB查询,作为一种表示事务是只读的方式,因为它是单语句SELECT

  • 表现; InnoDB: 您现在可以将未压缩表的InnoDB 页面大小设置为 8KB 或 4KB,以替代默认的 16KB。此设置由 innodb_page_size配置选项控制。您在创建 MySQL 实例时指定大小。一个实例中的所有InnoDB 表空间共享相同的页面大小。较小的页面大小有助于避免某些工作负载和存储设备组合的冗余或低效 I/O,尤其是 块大小较小的SSD设备。

  • 复制: 以前,复制从服务器只能通过使用本机身份验证的主帐户连接到主服务器。如果所需的客户端插件安装在从属 plugin_dir系统变量命名的目录中的从属侧,现在复制从属也可以通过使用非本机身份验证的主帐户连接。(漏洞 #12897501)

  • 优化器跟踪功能现在可以跟踪服务器在语句执行期间创建的临时表。(漏洞 #13400713)

  • 通过为元数据锁定对象建立缓存,改进了 Windows XP 系统上元数据锁定操作的性能。这允许服务器避免在 XP 上创建和销毁同步对象的昂贵操作。一个新的系统变量, metadata_locks_cache_size允许控制缓存的大小。默认大小为 1024。(缺陷 #12695572)

  • Advanced GPL从RPM 包 升级到AdvancedRPM 包不起作用。现在在 Linux 上可以使用rpm -U将任何已安装的 MySQL 产品替换为任何其他相同版本系列的产品。没有必要先用 rpm -e删除旧的产品。(漏洞 #11886309)

  • make_win_bin_dist脚本不再使用,并已从 MySQL 发行版和手册中删除(漏洞 #58241)

  • MEMORY表的创建时间现在可以在表的列和输出的CREATE_TIME列 中使用 。(错误#51655,错误#11759349)INFORMATION_SCHEMA.TABLESCreate_timeSHOW TABLE STATUS

  • 以前,MySQL 服务器 5.1 及更高版本拒绝打开 ARCHIVE在 5.0 中创建的表,因为打开它们会导致服务器崩溃。服务器现在可以打开 5.0ARCHIVE表,并将 REPAIR TABLE它们更新为 5.6 中使用的格式。不过,推荐的升级流程还是升级前先转储5.0ARCHIVE表,升级后重新加载。(错误#48633,错误#11756687)

  • 仅涉及错误代码的错误消息现在也包括相应的错误描述。(错误#48348,错误#11756433)

  • MySQL 代码库已更改为允许使用 C++ 标准库并启用异常和运行时类型信息 (RTTI)。此更改具有以下含义:

    • 库和可执行文件依赖于一些 C++ 标准库。在 Linux 上,以前不是这种情况。在 Solaris 上,默认依赖项已从默认库更改为libstlport,现在包含在二进制分发版中,供系统没有它的用​​户使用。

    • 和选项不再用于构建插件,例如存储引擎-fno-rtti-fno-exceptions编写自己的插件的用户如果使用的是 tem,则应省略这些选项。

    • 从源代码编译的 C++ 用户应该设置 CXX为 C++ 编译器而不是 C 编译器。例如,使用g++而不是gcc。这包括服务器以及客户端程序。

    • mysql_config现在有一个 --cxxflags选项。这类似于--cflags 选项,但生成适合 C++ 编译器而不是 C 编译器的标志。

    • 可以使用标准库功能在 C++ 中编写可加载函数。

修正错误

  • 安全增强;复制: 语句START SLAVE现在接受USERPASSWORD 选项。默认使用MySQL原生认证,用户名和密码存储在 master.info仓库中。可以通过在发布时另外指定身份验证插件DEFAULT_AUTH) 和位置 (来覆盖此行为。. PLUGIN_DIRSTART SLAVE

    作为此更改的一部分,现在会在以下情况下发出警告:

    1. 如果 使用未加密的连接执行START SLAVE USER="..." PASSWORD="..."或 ,则会生成警告消息“在没有 SSL/TLS 的情况下以纯文本形式发送密码是极其不安全的”( )。 CHANGE MASTER TO MASTER_USER="..." MASTER_PASSWORD="..."ER_INSECURE_PLAIN_TEXT

    2. 如果在执行过程中将用户名和密码存储在存储库中或从 master.info存储库中读取,CHANGE MASTER TO则会在错误日志中打印一条警告消息: Storing MySQL user name or password information in the master.info repository is not secure and therefore不推荐ER_INSECURE_CHANGE_MASTER)。

    笔记

    运行START SLAVE语句的文本,包括 和 的值 USERPASSWORD可以在并发 SHOW PROCESSLIST语句的输出中看到。CHANGE MASTER TO语句 的完整文本也对 可见SHOW PROCESSLIST

    另请参阅可插入身份验证。(漏洞 #13083642)

  • 不相容的变化;复制: 以下列表中的语句现在标记为对基于语句的复制不安全。这是因为这些语句中的每一个都取决于 SELECT不能总是确定其顺序的语句的结果。使用 STATEMENT日志记录模式时,二进制日志中会针对这些语句中的任何一个发出警告;使用 MIXED日志记录模式时,使用基于行的格式记录语句。

    升级时,您应该注意在您的应用程序中使用这些语句,请记住,插入或替换从 a 获取的行的语句 SELECT在使用基于行的格式记录时占用的二进制日志空间是使用基于行的格式记录时的许多倍仅记录语句本身。根据任何此类语句选择和插入(或替换)的行的数量和大小,将这些语句的日志记录从基于语句切换为基于行后,二进制日志的大小差异可能有几个数量级规模。请参阅基于语句和基于行的复制的优点和缺点。(缺陷 #11758262,缺陷 #50439)

  • Incompatible Change: 以前,Aborted connection错误是根据会话值写入错误日志的 log_warnings,这允许具有最小权限的用户导致许多消息被写入日志,除非受到 MAX_CONNECTIONS_PER_HOUR资源限制的限制。现在,此日志记录基于全局 log_warnings变量。会话变量没有剩余用途 log_warnings,因此它已被删除并且该变量现在只有一个全局值。(错误#53466,错误#11761014)

  • 重要变更;InnoDB: 如果由于底层文件重命名系统调用的错误代码导致表 ALTER TABLE语句失败可能会丢失对表文件的跟踪 。此问题仅在 启用配置选项时发生,并且在经过数千次重试尝试后低级错误仍然存​​在。在 MySQL 5.1 中,此问题适用于 InnoDB 插件,但不适用于内置的 InnoDB 存储引擎。 InnoDBInnoDB.ibdinnodb_file_per_table

    例如,如果您遇到如下错误:

    mysql> ALTER TABLE sb2 ADD COLUMN d2 INT;
    ERROR 1025 (HY000): Error on rename of './sbtest/#sql-1eb9_1' to
    './sbtest/sb2' (errno: -1)

    您可以通过从具有相同架构的#sql*表中复制文件来访问该表。.frm用于文件的表名将 .frm`sbtest.#mysql50##sql-1eb9_1`前面的示例中。(缺陷 #12884631,缺陷 #62146)

  • 重要变更;复制: 在语句中设置空用户会CHANGE MASTER TO导致无效的内部结果,并且不再被允许。在未设置的情况下尝试使用 MASTER_USER=''或设置 MASTER_PASSWORDMASTER_USER导致语句失败并出现错误。(漏洞 #13427949)

  • 表现; InnoDB:在关闭期间或使用以下语句关闭 AHI 时 ,取消分配InnoDB 自适应哈希索引的过程变得更快:

    SET GLOBAL innodb_adaptive_hash_index=OFF;

    (缺陷 #13006367,缺陷 #62487)

  • 表现; InnoDB: 此修复提高了 InnoDB缓冲池操作的检测代码的性能。(缺陷 #12950803,缺陷 #62294)

  • 表现; InnoDB:此修复提高了在启用该选项 对 表 InnoDB执行 a 时 释放缓冲池中页面的效率和并发性DROP TABLEInnoDBinnodb_file_per_table

    对于具有大型缓冲池的系统,此更改最为明显。在 drop 操作期间,缓冲池内存结构的一次遍历从 LRU 列表(整个缓冲池)更改为刷新列表(一个小得多的结构)。LRU 扫描减少了,但没有完全消除。缓冲池互斥量也会定期释放,因此如果删除操作花费大量时间,其他线程可以并发进行。(缺陷 #11759044,缺陷 #51325)

  • InnoDB:在为 DML 操作(尤其是 语句)InnoDB执行大量更改缓冲的服务器上, 可能会发生内部死锁 DELETE(漏洞 #13340047)

  • InnoDB:修复了影响4.6.1InnoDB源代码 的编译问题 gcc受影响的 InnoDB源文件是 btr/btr0cur.c. (漏洞 #13116045)

  • InnoDB: 查询 INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS 表可能会导致服务器因断言错误而停止,仅在调试版本中。(漏洞 #12960058)

  • InnoDB: 使用设置构建时出现 Valgrind 错误 innodb_checksum_algorithm=innodbinnodb_checksum_algorithm=crc32 已修复。(漏洞 #12939557)

  • InnoDB:InnoDB从与迷你交易相关 的内部代码中删除了未使用的功能 (缺陷 #12626794,缺陷 #61240)

  • InnoDB: 使用二级索引的查找可能会在一组特定条件下给出不正确的匹配。条件涉及在列前缀上定义的索引,用于存储在索引页之外的 BLOB 或其他长列,以及使用 Barracuda 文件格式的表。(错误#12601439,错误#12543666)

  • InnoDB:表 的UPDATE语句 InnoDB可能会挂起。该问题影响使用Barracuda 文件格式并在 列前缀上具有多个索引的表。撤消日志记录的大小可能超过页面大小,即使列前缀的总大小小于页面大小(通常为 16KB)。在 MySQL 5.5 及更高版本中,现在使用新代码报告此错误 ER_UNDO_RECORD_TOO_BIG。在带有InnoDB Plugin的MySQL 5.1中,使用现有代码报该错误 ER_TOO_BIG_ROWSIZE。(漏洞 #12547647)

  • InnoDB: 此修复纠正了 MySQL 服务器可能挂起或中止并显示long semaphore wait消息的情况。(这与在声明期间出现这些症状时不同CHECK TABLE。)(错误 #11766591,错误 #59733)

  • InnoDB: 从并发线程为表 发出INSERT...ON DUPLICATE KEY语句可能会导致死锁,尤其是表单。 发出多个语句也可能触发该问题 该修复避免了由多个事务访问同一行而导致的死锁。当多个事务以不一致的顺序同时插入和更新多行时,仍然可能发生死锁;这些类型的死锁需要在应用程序端进行标准错误处理,重新尝试事务。(错误#11759688、错误#52020、错误#12842206)InnoDBINSERT...ON DUPLICATE KEY UPDATEINSERT IGNORE

  • 分区: CHECKSUM TABLE为分区表返回 0,除非该语句与该 EXTENDED选项一起使用。(缺陷 #11933226,缺陷 #60681)

  • 分区:ER_TABLE_CANT_HANDLE_FT尝试对分区表使用索引时出现 错误 1214 (FULLTEXT显示误导性文本The used table type doesn't support FULLTEXT indexes具有误导性,已替换为错误 1752 (ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING),后者显示更准确的FULLTEXT分区表不支持索引。(缺陷 #11763825,缺陷 #56590)

  • 分区: 使用ALTER TABLE从有效MyISAM 表中删除分区可能会损坏它。(错误#52599,错误#11760213)

  • 复制: 为系统变量设置的值 slave_parallel_workers并不总是正确的;在这种情况下,使用随机值。(漏洞 #13334470)

  • 复制:LOAD DATAMyISAM的插入后触发器的 执行InnoDB 导致基于语句的多线程复制中止并出现错误 1742(无法在并行模式下执行当前事件组)。(漏洞 #12982188)

  • 复制: 为了印刷错误和清晰度,修改了一些警告和信息性消息。(错误#12947248,错误#12978113)

  • 复制: 当一个包含大量行的语句应用到一个不包含主键的从表上时,可能需要相当长的时间来查找和更改所有要更改的行。如果使用基于行的复制复制的给定语句的执行时间超过 60 秒,当前修复通过在错误日志中打印一条消息来帮助诊断此问题。 log_warnings必须大于 1 才能将此消息打印到错误日志中。(缺陷 #11760927,缺陷 #53375)

  • 复制: mysqlbinlog --hexdump以两种方式错误地打印了十六进制转储的最后一行:

    1. 如果最后一行的长度是八个字节,则将前一行的末尾复制到最后一行的末尾,将最后一行填充到全长。

    2. 如果最后一行的长度小于 16 个字节,则其文本表示与前几行的文本表示不对齐。

    (错误#11747887,错误#34386)

  • 复制: 在主服务器上的二进制日志磁盘变满后,复制主服务器可以将损坏的事件发送给从服务器。为更正此问题,主转储线程现在仅将完整事件推送到从属 I/O 线程。此外,主站在发现不完整事件时发送给从站的错误文本现在指出不完整事件可能是由于主站磁盘空间不足引起的,并提供了第一个和最后一个事件字节的坐标读。(错误#11747416,错误#32228)

    参考资料:另请参阅:Bug #64035、Bug #13593869。

  • 复制: 当源数据库 ( ) 的名称仅包含一个字符 时,无法正常工作(缺陷 #34332,缺陷 #11747866)--replicate-rewrite-db=from_name->to_namefrom_name

  • 不正确的InnoDB断言可能会导致服务器停止。此问题仅影响调试版本。断言引用了源文件 btr0pcur.ic和变量 cursor->pos_state。(漏洞 #13358468)

  • 包含超过 64 列的派生表导致服务器崩溃。(漏洞 #13354889)

  • InnoDB启用更改缓冲并 innodb_page_size设置为 8K 或 4K 页面大小的情况下,UPDATE 如果要更新的列包含的值超过页面大小的 1/8,语句可能会失败。(漏洞 #13336585)

  • thd->current_utime()即使最终没有写入日志条目, 写入慢速日志也会调用 ,从而不必要地降低性能。(漏洞 #13326965)

  • DBL_MAX返回 舍入DBL_MAX,而不是“inf”。(漏洞 #13261955)

  • 对于物化临时表,缺少键长度检查可能会导致不正确的查询结果。(漏洞 #13261277)

  • 检查每个存储的程序指令的访问权限,即使该指令不使用表,也会导致性能下降。(漏洞 #13251277)

  • 的错误消息 ER_EVENT_CANNOT_ALTER_IN_THE_PAST 不正确。(漏洞 #13247871)

  • 在表打开过程中,内存被分配并随后被释放,这是需要视图加载的,即使对于不使用视图的语句也是如此。这些不必要的分配和空闲操作不再做。(漏洞 #13116518)

  • OUTER JOIN如果子查询引用另一个 的列,则子 查询可能会返回不正确的结果SELECT。(漏洞 #13068506)

  • 写入MyISAM临时表可能包括未初始化的数据,这些数据可能包含敏感信息。现在只复制包含初始化数据的字节,这也提高了性能。(漏洞 #12997905)

  • 性能模式在错误的语句中嵌套了一些网络 I/O 事件。(漏洞 #12981100)

  • mysql_plugin在某些情况下错误处理了 --plugin-ini--mysqld--my-print-defaults(漏洞 #12968815)

  • mysql_plugin从失败的服务器引导执行中返回了错误的错误代码。(漏洞 #12968567)

  • 零与二进制的内部转换和返回可能会产生精度不正确的结果。(漏洞 #12911710)

  • 由操作生成的 Valgrind 警告filesort 已修复。(漏洞 #12856915)

  • 如果外部值列表包含 ,到子查询的转换可能会产生不正确的IN结果。(漏洞 #12838171)EXISTSNULL

  • 启用索引条件下推后, STRAIGHT_JOIN查询可能会产生不正确的结果。(错误#12822678,错误#12724899)

  • 某些数字的结果ROUND()不正确。(漏洞 #12744991)

  • SPACE()警告消息中提到 的使用引起 REPEAT()的警告。(漏洞 #12735829)

  • INEXISTS子查询与DISTINCTORDER BY 可能返回不正确的结果。(漏洞 #12709738)

  • 之后由于无法清理而发生内存泄漏 QUICK_INDEX_MERGE_SELECT/Unique。(错误#12694872,错误#14542543)

  • 对与 MySQL 发行版捆绑在一起的库进行了多项改进libedit ,并且可用于 MySQL 支持的所有平台,Windows 除外。

    • 导航键不适用于 UTF-8 输入。

    • 单词导航和删除操作不适用于带有西里尔字符的 UTF-8 输入。

    • 非拉丁字符在 UTF-8 输入的覆盖模式下被损坏。

    • 长查询导致语句历史文件损坏。

    • Alt 键导致历史操作失败。

    (错误#12605400、错误#12613725、错误#12618092、错误#12624155、错误#12617651、错误#12605388)

  • SELECT SQL_BUFFER_RESULTGROUP BY如果一个子句被优化掉,查询结果包含太多行。(漏洞 #12578908)

  • decimal_round()处理长数字字符串时可能导致服务器退出。(漏洞 #12563865)

  • mysqldump --all-databases没有转储复制日志表。(只有在调用mysqldump时明确命名它们并使用该--master-data 选项 才能转储它们

    由于修复了这个问题,现在可以随时在复制日志表上执行需要读锁的语句,而只要复制正在进行,就不允许在其中一个或两个表上执行任何需要写锁的语句. 有关详细信息,请参阅 中继日志和复制元数据存储库。(缺陷 #12402875,缺陷 #60902)

  • 客户端-服务器协议现在让客户端将身份验证数据作为长度编码字符串发送,以便可以发送超过 256 字节的数据。这是使用 CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA客户端功能完成的。(漏洞 #11878962)

  • mysqld_safe没有正确检查已经运行的mysqld实例。(漏洞 #11878394)

  • SUM(DISTINCT)错误地将 DATEDATETIMETIMETIMESTAMP 参数转换为YEAR. (错误#73543,错误#19427648)

  • 如果选择了索引条件下推访问然后又放弃了,一些变量没有被清除,导致查询结果不正确。(漏洞 #62533)

  • CMake配置检查没有正确测试 C 编译器是否支持该 关键字inline。(缺陷 #61708,缺陷 #12711108)

  • 对于lower_case_table_names 1 或 2 的值和具有混合大小写名称的数据库,使用包括数据库名称的完全限定名称调用存储函数失败。(缺陷 #60347,缺陷 #11840395)

  • mysql_upgrade在使用或 选项没有升级系统表或创建mysql_upgrade_info 文件 (缺陷 #60223,缺陷 #11827359)--write-binlog--skip-write-binlog

  • 多表UPDATE语句需要对视图的UPDATE特权,只有在使用合并算法处理视图时才读取该特权。(错误#59957,错误#11766767)

  • 当连接操作包含视图时,优化器有时无法将视图的WHERE子句与连接中的第一个表或视图相关联,而这可能会导致查询效率降低。(错误#59696,错误#11766559)

  • 从使用已删除的可加载函数的视图中进行选择的视图中进行选择时,会引发断言。(错误#59546,错误#11766440)

  • mysql_install_db 的帮助消息并未表明它支持 --defaults-file, --defaults-extra-file--no-defaults选项。(错误#58898,错误#11765888)

  • mysql_install_db在其错误消息之一中打印了 --skip-grant-tables服务器选项--skip-grant(错误#58534,错误#11765553)

  • 当整个键集适合内存时,也会引发旨在检测零长度排序键的断言。(缺陷 #58200,缺陷 #11765254)

  • 在优化期间,ZEROFILL值可能会转换为字符串常量。但是, CASE表达式在规划阶段后不处理数据类型的切换,导致 CASE找到一个空指针而不是它的参数。(错误#57135,错误#11764313)

  • PLUGIN_VAR_MEMALLOC如果卸载插件,则不会释放 带有 wth 标志的字符串类型插件变量的线程局部变量 。(错误#56652,错误#11763882)

  • 当这四件事同时发生时,可能会发生死锁: 1) 一个旧的转储线程正在等待二进制日志增长。2)从旧转储线程复制的从服务器试图重新连接。在重新连接期间,新的转储线程试图杀死旧的转储线程。3) 一条 KILL语句试图杀死旧的转储线程。4)INSERT 语句导致二进制日志轮换。(错误#56299,错误#11763573)

  • myisampackFULLTEXT在压缩表时可能会创建损坏 (错误#53646,错误#11761180)

  • SQL_BIG_RESULT修饰符可以更改包含GROUP BY 子句的查询 的结果。(错误#53534,错误#11761078)

  • ARCHIVE带有 NULL列的表可能导致服务器崩溃或在并发负载下损坏。(错误#51252,错误#11758979)

  • InnoDB如果用户遵循消息中的建议,则在错误消息中使用不正确的标识符引用样式会导致错误。(缺陷 #49556,缺陷 #11757503)

  • OPTIMIZE TABLE如果启用,可能会损坏 MyISAM表 。myisam_use_mmap(缺陷 #49030,缺陷 #11757032)

  • 对表的并发访问ARCHIVE可能会导致损坏。(错误#42784,错误#11751793)

  • 选择 GROUP_CONCAT()函数结果的查询可能会返回不同的值,具体取决于是否 ORDER BY存在函数结果。(错误#41090,错误#11750518)

  • 链接问题阻止了 FEDERATED存储引擎插件的加载。(缺陷 #40942,缺陷 #11750417)

  • 启用实现后,子查询可能会返回不正确的结果。(错误#40037、错误#11749901、错误#12705660、错误#12908058)

  • 对于调试版本,可以为 ALTER执行 RENAME操作的语句提出断言。HTON_FLUSH_AFTER_RENAME这发生在暴露标志的存储引擎处理程序上 。(缺陷 #38028,缺陷 #11749050)

  • 操作所需空间的估计值filesort 可能过高,导致初始化效率低下。(错误#37359,错误#11748783)

  • ALTER TABLE包含在语句中较早修改的列找不到现有列后添加新列的 操作ADD ... AFTER。(缺陷 #34972,缺陷 #11748057)

  • 对于FEDERATED表,在某些插入操作期间丢失与远程表的连接可能会导致服务器崩溃。(漏洞 #34660,漏洞 #11747970)

  • 对于某些查询, index_merge访问方法甚至在比访问更昂贵的情况下也被使用 ref。(缺陷 #32254,缺陷 #11747423)

  • 函数的排序规则SPACE()collation_connection系统变量的解析时间值(而不是运行时值)决定,这可能会从准备好的语句、触发器和存储过程中产生意外结果。(缺陷 #23637,缺陷 #11746123)