Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.5 的变化(2012-04-10,里程碑 8)

MySQL 5.6.5 的变化(2012-04-10,里程碑 8)

笔记

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

从 MySQL 5.6.5 开始,Oracle 不再为 OS X 10.5 提供二进制文件。这与 Apple 不再为此平台提供更新或支持一致。

数据类型注释

  • 以前,TIMESTAMP 每个表最多一列可以自动初始化或更新为当前日期和时间。此限制已取消。任何TIMESTAMP列定义都可以具有DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP子句的任意组合。此外,这些子句现在可以与DATETIME 列定义一起使用。有关详细信息,请参阅 TIMESTAMP 和 DATETIME 的自动初始化和更新

使用 GTID 进行复制

  • 重要变更;复制: 此版本为 MySQL 复制引入了全局事务标识符(GTID)。GTID 是在提交时分配给每个事务的唯一标识符;此标识符在事务发起的 MySQL 服务器上以及给定复制设置中的所有 MySQL 服务器上是唯一的。因为基于 GTID 的复制依赖于跟踪事务,所以它不能用于使用非事务性存储引擎的表,例如MyISAM;因此,目前仅支持 InnoDB表格。

    因为每个事务都是唯一标识的,所以在启动新从属服务器或故障转移到新主服务器时,没有必要使用 GTID 指定主服务器二进制日志中的位置。这反映在 为该语句添加一个新MASTER_AUTO_POSITION选项,该 选项在执行此语句以准备 MySQL 服务器充当复制从属服务器时 取代和 选项。CHANGE MASTER TOMASTER_LOG_FILEMASTER_LOG_POS

    要在 MySQL 服务器上启用 GTID,必须使用选项启动服务器。无论服务器是作为复制主服务器还是作为复制从服务器,都需要这些选项;和 选项是此版本中的新选项。 一旦主服务器和从服务器都使用这些选项启动,只需在从服务器上发出一个 后跟的命令即可开始复制。 --gtid-mode=ON --disable-gtid-unsafe-statements --log-bin --log-slave-updates--gtid-mode--disable-gtid-unsafe-statementsCHANGE MASTER TO ... MASTER_AUTO_POSITION=1START SLAVE

    还添加了许多新的服务器系统变量,用于监视 GTID 使用情况。有关这些选项和变量的更多信息,请参阅全局事务 ID 选项和变量

    作为这些更改的一部分,添加了三个新的 mysqlbinlog 选项—— --include-gtids--exclude-gtids--skip-gtids——用于读取服务器参与 GTID 复制时生成的二进制日志。

    重要的

    由于发布前发现的一个问题,您无法将使用mysqldump生成的转储从 MySQL 5.5 服务器导入到 MySQL 5.6.5 服务器,然后在启用 GTID 的情况下在 MySQL 5.6.5 服务器上使用 mysqlupgrade;这样做会导致升级后无法正常连接到服务器。相反,您应该 在 MySQL 5.6.5 服务器运行时 导入转储并运行mysqlupgrade--gtid-mode=OFF,然后使用 重新启动它--gtid-mode=ON。(错误 #13833710)(mysqlupgrade可以在服务器运行时执行, --gtid-mode设置为 OFF,或ON.)

    有关 GTID 和设置基于 GTID 的复制的其他信息,请参阅使用全局事务标识符进行复制

主机缓存说明

  • MySQL 现在改进了对主机缓存的访问,其中包含客户端 IP 地址和主机名信息,用于避免 DNS 查找,以及有关客户端连接到服务器时发生的错误原因的更多信息。这些更改已经实施:

    • 一个新的 Performance Schema host_cache表公开了主机缓存的内容,以便可以使用 SELECT语句对其进行检查。访问主机缓存内容可以回答诸如缓存了多少主机、哪些主机发生了何种连接错误或主机错误计数接近 max_connect_errors系统变量限制等问题。必须启用性能模式,否则该表为空。

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

    • 主机缓存有额外的计数器来跟踪适用于特定 IP 地址的错误。

    • 现在可以使用 host_cache_size系统变量配置主机缓存大小。此变量还控制表的最大大小,host_cache因为该表是缓存可见表示。将大小设置为 0 会禁用主机缓存。这类似于通过使用 启动服务器来禁用缓存 --skip-host-cache,但使用 host_cache_size更灵活,因为它还可以用于在运行时调整大小、启用和禁用主机缓存,而不仅仅是在服务器启动时。如果使用 启动服务器 --skip-host-cache,则无法在运行时重新启用主机缓存。

    • 新的 状态变量提供有关不适用于特定客户端 IP 地址的连接错误的信息。 Connection_errors_xxx

    有关详细信息,请参阅DNS 查找和主机缓存host_cache 表。(错误#22821、错误#24906、错误#45817、错误#59404、错误#11746048、错误#11746269、错误#11754244、错误#11766316)

优化器注释

  • 对于某些语句,如何对结果集进行排序的报告 EXPLAIN已得到改进。此排序决定可能会被错误地报告,导致Using filesortUsing temporary在不应该被报告时被报告,反之亦然。对于包含索引提示、形式 SELECT SQL_BIG_RESULT ... GROUP BY为 、与 一起使用 SQL_CALC_FOUND_ROWSLIMIT使用GROUP BYORDER BY和 的语句,可能会发生这种情况LIMIT。(错误#11744768,错误#1560)

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

    • EXPLAIN语句现在可以生成 JSON 格式的输出。要选择它,请使用 语法。对于,输出包括常规 信息,以及扩展和分区信息。 EXPLAIN FORMAT = JSON explainable_stmtFORMAT = JSONEXPLAIN

      传统EXPLAIN输出也发生了变化,因此空列包含 NULL的是空字符串。此外,UNION RESULT行在 列Using filesort中, Extra因为临时表用于缓冲UNION结果。

      为了同时适用于优化器跟踪和 JSON 格式 EXPLAIN输出,系统变量的 end_marker参数 optimizer_trace已移至单独的 end_markers_in_json系统变量。这是对 optimizer_trace变量的不兼容更改。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器

    • 优化器尝试通过从最有前途的表开始并递归地将剩余表中最有前途的表添加到计划中来找到最佳查询执行计划。比已找到的计划成本更高的部分执行计划被修剪。优化器现在尝试改进将表添加到计划中的顺序,从而减少考虑的部分计划的数量。

      可能具有改进性能的查询是许多表的连接,其中大多数表使用 eq_refref连接类型(如EXPLAIN输出所示)。

      一个新的状态变量, Last_query_partial_plans计算优化器在执行计划构造中为先前的查询所做的迭代次数。

    • 优化器使用半连接和物化策略来优化子查询执行。请参阅 使用半连接转换优化子查询和 使用物化优化子查询。此外,用于内部联接和外部联接操作的批量密钥访问 (BKA) 联接和块嵌套循环 (BNL) 联接算法已扩展为支持半联接操作。有关详细信息,请参阅 阻止嵌套循环和批量密钥访问联接

      几个标志已添加到 optimizer_switch系统变量以启用对半连接和子查询实现策略的控制。该 semijoin标志控制是否使用半连接。如果它设置为 on,则 firstmatchloosescan标志可以更好地控制允许的半连接策略。该 materialization标志控制是否使用子查询实现。如果 semijoinmaterialization都是 on,则半连接也会在适用的情况下使用具体化。这些标志是on默认的。请参阅可切换优化

    • 对于诸如 将列与值列表进行比较的表达式,优化器先前使用索引潜水对列表中的每个值进行行估计。随着值的数量变大,这变得低效。优化器现在可以使用索引统计信息对此类表达式进行行估计,这不太准确,但对于大量值来说速度更快。优化器从索引潜水切换到索引统计的点可以使用新的 系统变量进行配置。有关详细信息,请参阅 多值比较的相等范围优化col_name IN(values)eq_range_index_dive_limit

性能模式注释

  • Performance Schema 添加了以下内容:

    • Performance Schema 现在有一个 host_cache表,可以公开主机缓存的内容,以便可以使用SELECT语句对其进行检查。请参阅此变更日志中其他地方的主机缓存说明。

    • 性能模式现在维护语句摘要信息。这对具有相同签名的语句进行规范化和分组,并允许回答有关服务器正在执行的语句类型以及它们发生的频率的问题。

    有关详细信息,请参阅 host_cache 表性能模式语句事件表语句摘要表

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

安全说明

  • 以 MySQL 4.1 之前使用的旧哈希格式存储的密码不如使用本机密码哈希方法的密码安全,应避免使用。4.1 之前的密码和 mysql_old_password身份验证插件现已弃用。为防止使用具有 4.1 之前密码哈希的帐户进行连接, secure_auth现在默认启用系统变量。(要允许具有此类密码哈希的帐户连接,请使用 --secure_auth=0. 启动服务器)(缺陷 #13586336)

  • 如果在命令行上给出密码可能不安全,MySQL 客户端程序现在会发出警告。

添加或更改的功能

  • 不兼容的更改: 语句 的过时OPTION修饰符 SET

  • InnoDB: --ignore-builtin-innodb如果使用,现在将被忽略。(漏洞 #13586262)

  • 操作系统;Microsoft Windows:可以在 Windows 或 OS X 上设置 一个新的CMake选项, MYSQL_PROJECT_NAME(漏洞 #13551687)

  • Microsoft Windows: 一个新的服务器选项, --slow-start-timeout控制 Windows 服务控制管理器的服务启动超时。该值是服务控制管理器在启动期间尝试终止 MySQL 服务之前等待的最大毫秒数。默认值为 15000(15 秒)。如果 MySQL 服务启动时间过长,您可能需要增加此值。值为 0 表示没有超时。(错误#45546,错误#11754011)

  • MySQL-shared-compatRPM 包使 Red Hat 提供 的mysql-*-5.1RPM 包的用户能够迁移到 Oracle 提供的 MySQL-*-5.5包。 现在通过替换 后一个包的文件来MySQL-shared-compat替换 Red Hat 包,从而满足其他包对 . 此更改仅影响 Red Hat(或与 Red Hat 兼容)RPM 包的用户。Oracle RPM 包的用户没有什么不同。(漏洞 #13867506)mysql-libslibmysqlclient.somysql-libs

  • 如果查询的临时表包含足够大的列,则它们 INFORMATION_SCHEMA 现在使用动态行格式,从而节省空间。(漏洞 #13627632)MyISAMVARCHAR

  • 从 MySQL 5.5.3 开始,LOW_PRIORITY修饰符 forLOCK TABLES ... LOW_PRIORITY WRITE无效。此修饰符现已弃用。应避免使用它,现在会产生警告。改用LOCK TABLES ... WRITE。(漏洞 #13586314)

  • 如果 log_queries_not_using_indexes 启用系统变量,则不使用索引的慢查询将写入慢查询日志。在这种情况下,现在可以通过设置新的 log_throttle_queries_not_using_indexes 系统变量,使慢查询日志不会增长太快。默认情况下,此变量为 0,表示没有限制。正值对不使用索引的查询的记录施加每分钟限制。第一个这样的查询会打开一个 60 秒的窗口,服务器会在该窗口内记录达到给定限制的查询,然后抑制其他查询。如果窗口结束时有被抑制的查询,服务器会记录一个摘要,指示有多少以及在这些查询中花费的总时间。当服务器记录下一个不使用索引的查询时,下一个 60 秒窗口开始。(错误#55323,错误#11762697)

  • 通过实施半连接子查询优化策略解决了几个子查询性能问题。请参阅 使用半连接转换优化子查询。(错误#47914、错误#11756048、错误#58660、错误#11765671、错误#10815、错误#11745162、错误#9021、错误#13519134、错误#48763、错误#11756798、错误#25130、错误#11746289)

  • mysql客户端 现在支持一个 选项。选项值是连接到服务器后要执行的 SQL 语句。如果启用了自动重新连接,则在重新连接发生后再次执行该语句。(错误#45634,错误#11754087)--init-command=str

  • 添加了新的utf8_general_mysql500_ciucs2_general_mysql500_ci排序规则,它们保留了 5.1.24utf8_general_ci之前 ucs2_general_ci版本的 MySQL 的行为。错误 #27877 更正了原始归类中的一个错误,但引入了对包含德语'ß'拉丁小写字母 SHARP S 的列的不兼容性。(作为修复的结果,该字符与之前比较不同的字符比较相等。)从早于 5.1.24 的版本升级到 MySQL 5.1.24 或更新版本后的问题是 CHECK TABLE产生此错误:

    Table upgrade required.
    Please do "REPAIR TABLE `t`" or dump/reload to fix it!

    不幸REPAIR TABLE的是,无法解决问题。新的排序规则允许将在 MySQL 5.1.24 之前创建的旧表升级到当前版本的 MySQL。

    要在保留表文件的二进制升级后转换受影响的表,请更改表以使用新的排序规则。假设该表t1包含一个或多个有问题的utf8列。要在表级别转换表,请使用如下语句:

    ALTER TABLE t1
    CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;

    要在特定于列的基础上应用更改,请使用如下语句(请务必重复最初指定的列定义,COLLATE子句除外):

    ALTER TABLE t1
    MODIFY c1 CHAR(N) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;

    要使用转储和重新加载过程升级表,请使用mysqldump转储表,修改 CREATE TABLE转储文件中的语句以使用新的排序规则,然后重新加载表。

    进行适当的更改后,CHECK TABLE应该不会报告任何错误。(错误#43593,错误#11752408)

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

  • SET TRANSACTIONand START TRANSACTION语句现在支持 和READ WRITE修饰符READ ONLY来设置事务中使用的表的事务访问模式。默认模式是读/写,这与以前的模式相同。现在可以使用READ WRITE修饰符明确指定读/写模式。使用READ ONLY禁止表更改,并可能使存储引擎能够在不允许更改时进行性能改进。

    此外,新 --transaction-read-only选项和tx_read_only系统变量允许在服务器启动和运行时设置默认事务访问模式。

    有关详细信息,请参阅SET TRANSACTION 语句START TRANSACTION、COMMIT 和 ROLLBACK 语句

  • MySQL 发行版不再包含 GPL readline输入编辑库。这导致更简单的维护和支持,并简化了许可注意事项。

修正错误

  • 不相容的变化;复制: CHANGE MASTER TO使用带引号的数值将语句写入错误日志,尽管此语句的语法不允许引用此类选项值。这意味着无法从错误日志中复制此类语句并逐字重新运行。现在 CHANGE MASTER TO语句被写入错误日志,没有多余的引号,因此在语法上是正确的。

  • 不兼容的更改: MySQL 5.6.3 中的更改导致 LAST_DAY()更加严格并拒绝日期部分为零的不完整日期。对于此函数,非零日部分不是必需的,因此已恢复更改。(漏洞 #13458237)

  • 重要变更;InnoDB: 当行的大小由于UPDATE 操作而增加时,其他(未更新的)列可以移动到页外存储,以便有关该行的信息仍然符合InnoDB页面大小的限制。在分配和写入页面之前,不会设置指向新分配的页外数据的指针,如果在将列移出页面时系统崩溃,则可能会导致数据丢失。该问题在使用ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED与 Barracuda 文件格式一起使用的表中更常见,尤其是在 innodb_file_per_table启用设置的情况下,因为页面分配操作更常见,因为.ibd表空间文件被扩展。尽管如此,InnoDB 版本、文件格式和行格式的任意组合都可能出现问题。

    一个相关的问题是,在此类 UPDATE操作或 INSERT重复使用标记为删除的记录的操作期间,无论隔离级别如何,其他事务都可能看到受影响列的无效数据。

    此修复更正了将列数据从原始页面移出并用指针替换它的操作顺序。现在,如果在传输列数据的准确时刻发生崩溃,则在崩溃恢复期间不会重新运行传输。

    在 MySQL 5.1 中,此修复适用于 InnoDB 插件,但不适用于内置的 InnoDB 存储引擎。(错误#13721257、错误#12612184、错误#12704861)

  • 重要变更;分区: 查询缓存并不总是在事务上下文中与分区表一起正常运行。出于这个原因,现在对使用分区表的任何查询都禁用了查询缓存,并且无法再缓存此类查询。有关详细信息,请参阅 分区的约束和限制。(缺陷 #11761296,缺陷 #53775)

  • 重要变更;复制: 语句CHANGE MASTER TO未检查选项值中的无效字符,例如MASTER_HOSTMASTER_USER。此外,当服务器重新启动时,包含某些字符的值被修剪,导致其原始值丢失。现在这些值已经过验证,如果值包含无效字符,包括换行 (\n0x0A) 字符,语句将失败并显示错误 (ER_MASTER_INFO)。(缺陷 #11758581,缺陷 #50801)

  • 重要变更;复制: 将二进制日志文件、中继日志文件或这两个文件移动到新位置,然后使用 、 或两者的新值重新启动服务器 --log-bin--relay-log导致服务器在启动时中止。这是因为索引文件中的条目覆盖了新位置。此外,路径是相对于 datadir(而不是 --log-binor --relay-log值)计算的。

    此问题的修复意味着,当服务器从索引文件中读取条目时,它现在会检查该条目是否包含相对路径。如果是,则路径的相对部分将替换为使用 --log-binor --relay-log选项设置的绝对路径。绝对路径保持不变;在这种情况下,必须手动编辑索引以启用要使用的新路径。(缺陷 #11745230,缺陷 #12133)

  • 表现; InnoDB: 优化器现在考虑InnoDB 了 16KB 以外的页面大小,这可以 innodb_page_size在创建 MySQL 实例时使用选项进行配置。此更改改进了对具有非默认 InnoDB页面大小的系统查询的 I/O 成本的估计。(漏洞 #13623078)

  • 表现; InnoDB:重新组织 了表的内存分配,InnoDB以减少大量表或分区的内存开销,避免了 无论 语句如何, “驻留集大小”都可能增长的情况。FLUSH TABLES对于行大小较大的表,该问题最为明显。以前为每个打开的表分配的一些内存现在仅在第一次修改表时分配。(缺陷 #11764622,缺陷 #57480)

  • 性能: 临时MyISAM表(与普通MyISAM表不同)在包含列时不使用动态行格式 VARCHAR,导致临时文件(和文件 I/O)比必要的更大。现在使用动态行格式,这会导致处理速度更快的更小表格。(错误#13350136、错误#78840、错误#22023218)

  • InnoDB: 在包含零长度值(即'')的列上创建索引时,仅在调试版本中可能会出现错误断言。(漏洞 #13654923)

  • InnoDB: 一个 DDL 操作ALTER TABLE ... ADD COLUMN可能会停止,最终超时并显示一条 Error 1005: Can't create table消息引用fil_rename_tablespace. (错误#13636122、错误#62100、错误#63553)

  • InnoDB: 如果 InnoDB 启动时 innodb_force_recovery设置为 3 或 4 的值,并且有 事务回滚,正常 关闭将挂起等待这些事务完成。现在关闭会立即发生,不会回滚任何事务,因为 的非零值innodb_force_recovery仅适用于故障排除和诊断目的。(漏洞 #13628420)

  • InnoDB:innodb_use_native_aio如果 关闭 配置选项,MySQL 服务器在某些情况下可能会挂起(漏洞 #13619598)

  • InnoDB: 函数中修复了 Valgrind 错误 os_aio_init()。(漏洞 #13612811)

  • InnoDB:为了保持一致性 ,配置选项innodb_sort_buf_size 已重命名 innodb_sort_buffer_size创建 InnoDB索引时使用此工作区。(漏洞 #13610358)

  • InnoDB:如果设置指向 文件系统并 创建 InnoDB临时表 ,因为它在 MySQL 5.5.4 及更高版本中是默认设置。错误日志中的条目如下所示: $TMPDIRtmpfsinnodb_use_native_aio

    101123  2:10:59  InnoDB: Operating system error number 22 in a file operation.
    InnoDB: Error number 22 means 'Invalid argument'.

    发生崩溃是因为在某些 Linux 内核版本中 tmpfs 不支持异步 I/O。解决方法是关闭innodb_use_native_aio设置或使用不同的临时目录。如果检测到临时文件目录不支持异步 I/O,此修复程序会 自动InnoDB关闭该 设置。innodb_use_native_aio(错误#13593888、错误#11765450、错误#58421)

  • InnoDB: 在启动期间,状态变量 Innodb_buffer_pool_dump_status 在被初始化为正确值之前可能会短暂地为空not started。(漏洞 #13513676)

  • InnoDB: 修复了引用内部函数时的 Valgrind 错误 buf_LRU_scan_and_free_block()。(漏洞 #13491704)

  • InnoDB: MySQL 错误日志可能包含如下消息:

    InnoDB: Ignoring strange row from mysql.innodb_index_stats WHERE ...

    此修复使 innodb_index_statsinnodb_table_stats表的内容区分大小写,以正确区分名称仅在字母大小写上不同的表的统计信息。修复了在检索持久统计信息时可能为索引选择了错误名称的其他情况。(漏洞 #13432465)

  • InnoDB:从 源代码和 HAVE_purify的 引用 它们仅用于为 Valgrind 检测的调试版本。它们被对宏的调用所取代。(漏洞 #13418934)UNIV_INIT_MEM_TO_ZEROUNIV_SET_MEM_TO_ZEROInnoDBUNIV_MEM_INVALID()

  • InnoDB: MySQL 服务器可能因断言错误而停止:

    InnoDB: Failing assertion: page_get_n_recs(page) > 1

    随后的重新启动可能会失败并出现相同的错误。该错误发生在涉及更改缓冲区的清除 操作期间。解决方法是设置配置选项 。(缺陷 #13413535,缺陷 #61104)InnoDB innodb_change_buffering=inserts

  • InnoDB:InnoDB 可用撤消日志的数量与当前处于活动状态的撤消日志的数量 之间可能会出现差异 现在 innodb_undo_logs系统变量报告活动撤消日志的数量,新的 Innodb_available_undo_logs 状态变量报告撤消日志的总数。(漏洞 #13255225)

  • InnoDB: 当从 MySQL 5.6.4 或更高版本进行实时降级时, innodb_page_size设置为 16384 以外的值,现在较早的 MySQL 版本报告页面大小与旧版本不兼容,而不是崩溃或显示损坏错误。(漏洞 #13116225)

  • InnoDB:对于包含外键定义的子表, 某些CREATE TABLE语句可能会失败InnoDB此问题仅影响设置为 lower_case_table_names=0. 这是 MySQL 错误 #55222 的回归。(缺陷 #13083023,缺陷 #60229)

  • InnoDB: 如果服务器在表 TRUNCATE TABLEorCREATE INDEX 语句包含表的数据库,则索引可能已损坏,从而在重启后访问表时导致错误消息: InnoDBDROP DATABASEInnoDB

    InnoDB: Error: trying to load index index_name for table table_name
    InnoDB: but the index tree has been freed!

    在 MySQL 5.1 中,此修复适用于 InnoDB 插件,但不适用于内置的 InnoDB 存储引擎。(错误#12861864,错误#11766019)

  • InnoDB:表 的 DDL 操作InnoDB可能导致繁忙的 MySQL 服务器因断言错误而停止:

    InnoDB: Failing assertion: trx->error_state == DB_SUCCESS

    如果在并发事务使用所有 1023 个撤消槽时运行 DDL 操作,则会发生错误。这个错误在 MySQL 5.5 和 5.6 中不太可能发生,因为增加InnoDBundo slots 的数量将同时事务的数量(对应于 undo slots 的数量)从 1K 增加到 128K。(缺陷 #12739098,缺陷 #62401)

  • InnoDB: InnoDB持久统计数据对日期列的估计不如其他数据类型的列准确。此修复更改了为非唯一键估计基数的方式,并避免了相同值出现在不同索引页上时可能被计算两次的情况。(漏洞 #12429443)

  • InnoDB:innodb_max_purge_lag 变量控制清除操作滞后时如何延迟 DML 操作。以前,如果检测到旧的一致读取视图,即使清除延迟超过 innodb_max_purge_lag设置,DML 操作也不会延迟。

    此外,如果 innodb_max_purge_lag使用该设置,可能会出现 DML 延迟时间继续增加但由于存在旧的一致读取视图而不会立即应用的情况。当最终应用累积的 DML 延迟时间时,这可能会导致冗长的 DML 延迟。

    此修复将 DML 延迟限制在最大值,删除了一致性读取检查,并修改了 DML 延迟计算。(缺陷 #12407434,缺陷 #60776)

  • InnoDB: 在同时运行 1024 个并发InnoDB事务并 innodb_file_per_table启用该设置的情况下,CREATE TABLEInnoDB表的操作可能会失败。.ibd来自失败的 CREATE TABLE被遗留下来,阻止了稍后在负载下降后创建表。

    该修复程序添加了错误处理以删除错误 .ibd文件。这个错误在 MySQL 5.5 和 5.6 中不太可能发生,因为增加 InnoDB撤消槽的数量会增加触发错误所需的同时事务的数量,从 1K 到 128K。(漏洞 #12400341)

  • InnoDB: 提高了InnoDB 大型表的持久统计信息的准确性。如果索引树的深度超过 3 层,则不同记录的估计可能不准确。(漏洞 #12316365)

  • InnoDB: 关机可能会挂起,并在日志中显示如下消息:

    Waiting for purge thread  to be suspended

    1 小时后,关机超时并 mysqld退出。此问题最有可能在 的值较高时发生 innodb_purge_threads。(错误#11765863、错误#58868、错误#60939)

  • InnoDB:DROP TABLE由于所有撤消槽都在使用而失败时,返回的错误是 Unknown table '...'而不是预期的Too many active concurrent transactions。(错误#11764724,错误#57586)

    参考资料:另请参阅:Bug #11764668、Bug #57529。

  • InnoDB:如果变量 InnoDB中的路径以 字符 服务器启动可能会为使用存储引擎的临时表产生错误错误日志如下所示: $TMPDIR/

    120202 19:21:26  InnoDB: Operating system error number 2 in a file operation.
    InnoDB: The error means the system cannot find the path specified.
    InnoDB: If you are installing InnoDB, remember that you must create
    InnoDB: directories yourself, InnoDB does not create them.
    120202 19:21:26  InnoDB: Error: trying to open a table, but could not
    InnoDB: open the tablespace file './t/#sql7750_1_0.ibd'!
    InnoDB: Have you moved InnoDB .ibd files around without using the
    InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?
    InnoDB: It is also possible that this is a temporary table #sql...,
    InnoDB: and MySQL removed the .ibd file for this.

    该问题的解决方法是再次创建一个类似的临时表,将其.frm文件复制到 tmpdir错误消息中提到的名称(例如,#sql123.frm)下,然后 将设置为其正常值重新启动,不带尾部斜杠, mysqld例如。在启动时,MySQL 会看到孤立临时表的 文件和问题。(错误#11754376,错误#45976)tmpdir/var/tmp.frmDROP TABLE

  • 分区: 当从使用显式分区选择的语句创建视图时 SELECT,查询的分区选择部分被忽略。(漏洞 #13559657)

  • 分区:LIST如果新分区中的项目数大于 16,则将 添加到已存在的分区 ALTER TABLE ... ADD PARTITION语句或 ALTER TABLE ... REORGANIZE PARTITION语句添加分区时可能会发生这种情况。

    CREATE TABLE ... PARTITION BY LIST使用或 时,这个 16 项限制并不明显 ALTER TABLE ... PARTITION BY LIST。(缺陷 #13029508,缺陷 #62505)

  • 分区: 用于查找匹配子分区的代码内部函数将无符号数表示为有符号数,结果查询结果中有时会遗漏匹配的子分区。(缺陷 #12725206,缺陷 #61765)

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

  • 分区:在按或 分区的表上失败 的 ALTER TABLE ... ADD PARTITION语句 。(缺陷 #11764110,缺陷 #56909)ALTER TABLE ... REORGANIZE PARTITIONHASHKEY

  • 复制:使用 选项 执行mysqlbinlog ,其中等于 0 或大于转储文件长度的值,导致它崩溃。 --start-position=NN

    此问题是在 MySQL 5.5.18 中通过修复 Bug #32228 和 Bug #11747416 引入的。(缺陷 #13593869,缺陷 #64035)

    参考资料:此问题是 Bug #32228、Bug #11747416 的回归。

  • 复制: 启动服务器时,即使server_id系统变量等于 0(默认值),也会检查复制存储库,尽管 server_id必须为充当主服务器或辅助服务器的服务器提供MySQL 复制中的从站。

    当尝试从 MySQL 5.5 执行实时升级时,这可能会导致问题,尽管可以通过启动服务器来解决这个问题 --skip-slave-start(除了任何其他必需的选项)。

    --server-id为避免此问题,现在仅在使用非零值 启动服务器时才检查复制存储库 。(错误#13427444,错误#13504821)

  • 复制:以前,无论端口设置不正确还是根本没有设置,Port输出中显示的列 的默认值为 SHOW SLAVE HOSTS现在,当未设置从端口时,将显示从端口使用的实际端口。此更改还会影响为 --report-port服务器选项显示的默认值。(漏洞 #13333431)

  • 复制:当在一台机器上 运行多个 mysqld实例时,当多个从属线程同时启动,并且每个这样的线程试图并发使用同一个临时文件时,可能会发生竞争条件。(缺陷 #12844302,缺陷 #62055)

  • 复制:在使用表的 复制从站 FEDERATED上,长时间运行的操作可能会超时,例如 Error 1160 Got an error writing communication packetsFEDERATED不需要复制这些(缺陷 #11758931,缺陷 #51196)

    参考资料:另请参阅:Bug #12896628、Bug #61790。

  • 复制: 写入包含 AUTO_INCREMENT基于 SELECT另一个表的无序列的表的语句可能会导致主从不同步,因为从表中检索行的顺序可能在它们之间不同。此类陈述包括任何 INSERT ... SELECT, REPLACE ... SELECT, 或 CREATE TABLE ... SELECT陈述。此类语句现在被标记为对于基于语句的复制不安全,这会导致执行一个语句时抛出警告,并强制使用基于行的格式记录语句(如果日志记录格式为MIXED. (缺陷 #11758263,缺陷 #50440)

  • 复制: 在 Windows 复制从属主机上,STOP SLAVE当主服务器关闭时需要很长时间才能完成。(缺陷 #11752315,缺陷 #43460)

  • 复制: mysqlbinlog 在其输出中 包含二进制日志中的所有分配,即使二进制日志中 从未引用过数据库。这是因为 语句与二进制日志中的任何数据库都没有关联。现在在这种情况下,会跟​​踪当前数据库,以便只有 在数据库表更改的上下文中进行的分配 才会实际打印在 mysqlbinlog输出中。(错误#11746146,错误#23894)--database=dbnameSET INSERT_ID=ndbnameCOMMITSET INSERT_IDdbname

    参考资料:另请参阅:Bug #23890、Bug #46998、Bug #11761686、Bug #54201、Bug #11754117、Bug #45670。

  • Microsoft Windows: 在 Windows 上,由于上​​一次运行的清理不充分或未能找到正确的服务器可执行文件,源代码分发中的重建无法创建初始数据库。(漏洞 #13431251)

  • Microsoft Windows:INSTALL PLUGIN在 Windows 上,服务器错误地为和 构造了插件二进制文件的完整路径名CREATE FUNCTION ... SONAME。(错误#45549,错误#11754014)

  • mysqldump尝试将 SET 语句执行为SET OPTION,但在针对 5.6 或更高版本的服务器使用时失败,因为不推荐使用的 OPTION关键字已从 SET 语法中删除。(漏洞 #13813473)

  • 优化器不对视图执行持续传播,因此包含视图的查询导致执行计划的效率低于仅使用基表的相应查询。(漏洞 #13783777)

  • GROUP BY包含在外部列上 使用的子查询的查询可能会发生内存泄漏。(漏洞 #13724099)

  • 使用ALTER TABLE 语句更改表的KEY_BLOCK_SIZE 属性后InnoDB,例如从未压缩表切换到压缩表时,随后的服务器重新启动可能会失败,并显示如下消息:

    InnoDB: Error: data file path/ibdata2 uses page size 1024,
    InnoDB: but the only supported page size in this release is=16384

    此问题是 MySQL 5.5.20 中引入的回归。(缺陷 #13698765,缺陷 #64160)

  • 在调试版本中,调试同步超时警告被视为错误,导致引发断言。(漏洞 #13688248)

  • _mi_print_key()有一点时重复了一次太多NULL,导致 Valgrind 警告。(漏洞 #13686970)

  • 下推到InnoDB调用存储函数的索引条件导致服务器崩溃。这种情况已经不推了。(漏洞 #13655397)

  • 来自返回空结果的子查询的 ASELECT本身可能无法按预期返回空结果。(错误#13651009,错误#13650418)

  • 对于调试版本,未检测到具有零整数部分和非零小数部分(例如 -0.1111)的负值,因此负小数部分后来被转换为一个大的无符号数并引发断言。(漏洞 #13616434)

  • SIGHUP如果在服务器启动期间在完全服务器初始化之前捕获到 诸如 之类的信号 ,则服务器可能会崩溃。这是由于信号处理程序线程和执行服务器初始化的主线程之间存在竞争条件。为了防止这种情况发生,信号处理现在暂停,直到所有服务器子系统的完全初始化成功完成。(缺陷 #13608371,缺陷 #62311)

  • 的共享版本libmysqlclient没有导出这些函数以供客户端程序链接 :get_tty_password()、、 handle_options()my_print_help()(漏洞 #13604121)

  • MIN()类型为or 的聚合表达式MAX()应该返回NULL ,但如果查询被隐式分组并且没有HAVING 计算为 的子句,则可以返回空集FALSE。(漏洞 #13599013)

  • 左连接查询可能会错误地转换为内部连接并返回错误的结果集。(漏洞 #13595212)

  • 日期处理代码可能会引发断言,试图计算自纪元以来的秒数。(漏洞 #13545236)

  • 对于使用连接类型 的查询, ref_or_null优化器可能会跳过文件排序操作并错误地对结果进行排序。(漏洞 #13531865)

  • 对于某些查询,即使结果只包含一行且不需要排序,也会执行文件排序操作。(漏洞 #13529048)

  • 在某些情况下,当查询不包含显式LIMIT 子句时,优化器可能会返回不正确的选择限制。(漏洞 #13528826)

  • 在某些情况下,优化器未能在可能的情况下使用覆盖索引,而是读取数据行。(漏洞 #13514959)

  • SELECTEXAMPLE存储引擎的语句失败 。(漏洞 #13511529)

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

  • 阶段的 Performance Schema 工具没有完全遵循表ENABLED中的列 schema.setup_instruments。(漏洞 #13509513)

  • 将以小数点(例如 '1.')结尾的字符串转换为浮点数会引发数据截断警告。(漏洞 #13500371)

  • 使用未初始化的TABLE_SHARE成员可能会导致服务器崩溃。(漏洞 #13489996)

  • 某些将视图用作内部表的外部联接未正确评估条件。(漏洞 #13464334)

  • CHAR在子句中引用的列 上使用索引的查询 BETWEEN可能会返回无效结果。(错误#13463488,错误#63437)

  • BIGINT将列与任何非整数常量进行 比较的表达式是 使用整数而不是小数或浮点值执行的,结果常量可能会被截断。这可能导致使用 <, >, <=, >=, =, !=/ <>, 的任何此类比较IN,或 BETWEEN产生假阳性或阴性结果。(错误#13463415、错误#11758543、错误#63502、错误#50756)

  • 如果链接的应用程序尝试在未指定用户名的情况下进行连接,则它libmysqld可能会在调试模式下崩溃并出现错误。stack smashing detected(漏洞 #13460909)

  • 为结果为空的查询实例化派生表会导致服务器崩溃。(漏洞 #13457552)

  • 当优化器 DECIMAL在评估范围条件时执行值转换时,它可能会产生不正确的结果。(漏洞 #13453382)

  • 使用表隐式分组查询const但没有匹配的行可能会返回不正确的结果。(漏洞 #13430588)

  • 对于调试版本,启用 optimizer_trace可能会引发断言。(漏洞 #13430443)

  • 启用索引条件下推可能会导致性能下降。(漏洞 #13430436)

  • 当一个固定宽度的行插入 MyISAM临时表时,记录缓冲区的全部内容都被写入表,包括 VARCHAR列中包含的任何尾随空间,问题是这个尾随空间可能未初始化。这个问题已经通过确保VARCHAR在这种情况下只复制和插入实际用于存储(没有额外的)的字节来解决。(错误#13389854,错误#79028,错误#22123583)

  • UNION ALL 对于某些查询 ,小数秒部分丢失了 。(漏洞 #13375823)

  • 当合并有效导致完整索引扫描的范围时,优化器不会丢弃不需要的范围谓词。(漏洞 #13354910)

  • 执行时EXPLAIN,假定只有默认的多范围读取实现才能产生有序的结果;这意味着当对使用存储引擎提供自己的排序 MRR 的表进行查询时,它会被忽略,因此即使使用多范围读取也EXPLAIN无法报告。Using MRR(漏洞 #13330645)

  • 一些多表更新可能会更新一行两次。(漏洞 #13095459)

  • Performance Schemaidle事件计时未标准化为与等待计时相同的单位。(漏洞 #13018537)

  • 在 MySQL 5.6.3 中,许多状态变量被更改为 longlong类型,以便它们可以在更晚的时候滚动。但是, mysqladmin status用于打印Queries per second值的格式字符串并未反映这一点,导致此类值被误报。(漏洞 #12990746)

    参考资料:另请参阅:Bug #42698。此问题是 Bug #11751727 的回归。

  • 对于调试版本,可能会为 UPDATE语句错误地提出两个断言。(漏洞 #12912171)

  • 当返回非整数类型的存储函数的结果被评估时NULL,会生成错误类型警告(警告 1292截断不正确的整数值),尽管NULL的此类测试应该适用于任何类型。这可能会导致未正确处理警告的存储例程失败。

    这个问题可以通过将结果包装在一个表达式中来解决,使用诸如 CONCAT(). (缺陷 #12872824,缺陷 #62125)

  • 当同时使用 和 选项 运行mysqldump时,日志的刷新执行隐式 (请参阅 导致隐式提交的语句),导致使用多个事务,从而破坏一致性。(缺陷 #12809202,缺陷 #61854)--single-transaction--flush-logsCOMMIT

  • 在子句 中使用诸如 MAX()or MIN()of index with 之类的聚合函数的查询 可能无法匹配行,从而返回无效结果。(缺陷 #12773464,缺陷 #61925)NOT BETWEENWHERE

  • 启用 SQL 模式后,未在ONLY_FULL_GROUP_BY选择列表中聚合或未在 aGROUP BY中命名的列在ORDER BY. (漏洞 #12626418)

  • 从属服务器上存储过程中的 SQL 模式处理不当 NO_BACKSLASH_ESCAPES可能会导致复制失败。(漏洞 #12601974)

  • 如果变量值在查询执行期间更改,将用户变量作为参数传递 GROUP_CONCAT()可能会导致服务器退出。(漏洞 #12408412)

  • LOAD INDEX INTO CACHE如果索引缓存太小,可能会导致服务器退出。(漏洞 #12361113)

  • ONLY_FULL_GROUP_BY启用 SQL 模式后,如果查询在视图中,则在子句中使用 从子GROUP BY查询派生的列的查询会FROM失败并出现错误。column isn't in GROUP BY(漏洞 #11923239)

  • 尝试在具有底层临时表的临时表上执行会使该 ALTER TABLE 表不可用,除非 指定了一个新的底层表列表。(错误#11764786,错误#57657)MERGEMERGEALTER TABLE

  • 在连续失败的情况下, mysqld_safe可能会足够快地重新启动以消耗过多的 CPU。现在,在支持sleepdate系统实用程序的系统上,mysqld_safe检查它是否在当前秒内重新启动超过 5 次,如果是,则等待 1 秒再尝试重新启动。(缺陷 #11761530,缺陷 #54035)

  • 使用or 的查询中 的HAVING子句 有时会被忽略。(缺陷 #11760517,缺陷 #52935)MIN()MAX()

    参考资料:另请参阅:Bug #11758970、Bug #51242、Bug #11759718、Bug #52051。

  • 当与该--xml 选项一起使用时,mysqldump --routines无法转储任何存储的例程、触发器或事件。(错误#11760384,错误#52792)

  • 如果启动语句的尝试失败,则无法将问题报告给客户端,因为它不准备在执行任何语句之前接收任何错误消息。由于用户无法执行任何查询,他们只是在没有提供明确错误的情况下断开连接。

    修复此问题后,客户端会在尝试启动语句时立即为错误做好准备,以便在断开用户连接之前报告错误。(缺陷 #11755281,缺陷 #47032)

  • 以前,.OLD文件不包括在删除的文件中DROP DATABASE。具有此扩展名的文件现在也被该语句删除。(缺陷 #11751736,缺陷 #42708)

  • 使用其定义在准备和执行之间更改的视图的准备语句继续使用旧定义,这可能导致准备语句返回不正确的结果。(缺陷 #11748352,缺陷 #36002)

  • 一些调试信息在刷新后写入缓冲区,导致信息直到下一次刷新才出现。(漏洞 #64048,漏洞 #13608112)

  • 函数实例的区域设置信息FORMAT() 在视图定义中丢失。(缺陷 #63020,缺陷 #13344643)

  • 包含视图的数据库的mysqlhotcopy失败。(错误#62472、错误#13006947、错误#12992993)

  • VIO 描述字符串甚至对于不需要它的连接也进行了初始化。(缺陷 #62285,缺陷 #12951586)

  • 在 Windows 上,将多行输入(包括最后一行的 CRLF 终止符)粘贴到mysql 客户端中会导致最后一行的第一个字符被更改,从而导致错误的语句。粘贴输入中的换行符处理也不正确。(错误#60901、错误#12589167、错误#64104、错误#13639107)

  • shared和 RPM 包 的内容shared-compat在 5.5.6 和 5.6.1 版本中已更改,以避免它们传统上存在的重叠(并且在 MySQL 5.0 和 5.1 中仍然存在)。然而,RPM 元信息并没有相应地改变,因此 RPM 仍然假设 sharedshared-compat RPM 包之间存在冲突。这已得到修复。(缺陷 #60855,缺陷 #12368215)

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

  • SUBSTRING_INDEX() 用作转换函数(如 LOWER(). (缺陷 #60166,缺陷 #11829861)

  • UPDATE IGNORE当多表更新中存在重复键冲突时,返回更新行数的错误计数。(错误#59715,错误#11766576)

  • STRAIGHT_JOIN嵌套连接使用 的优化器处理不当;例如,不按指定顺序评估表。(错误#59487、错误#11766384、错误#43368、错误#11752239、错误#60080、错误#11766858)

  • 需要字符集转换的比较中涉及的子查询导致错误,导致服务器崩溃。(错误#59185,错误#11766143)

  • 嵌入式服务器在argc = 0. (错误#57931,错误#12561297)

  • LOCK TABLES ... READ如果表在另一个会话中 被锁定 ,则SET GLOBAL read_only = 1无法完成。(错误#57612,错误#11764747)

  • cmp_item_sort_string::store_value()当尝试引用可由其他函数更改或删除的临时值时,可能 会发生无效内存读取 。(缺陷 #57510,缺陷 #11764651)

  • DISTINCT当外部查询包含and 时,将子查询的结果分配给用户变量会引发断言 GROUP BY。(错误#57196,错误#11764371)

  • 对于包含超出范围的常量的比较,优化器允许警告泄漏到客户端,即使它在内部解决了范围问题。(错误#56962,错误#11764155)

  • 一个令人困惑的CREATE TABLE错误消息得到改善。(错误#54963,错误#11762377)

  • 由于调用不安全的函数, mysqld中 的handle_segfault()信号处理程序代码 本身可能会崩溃。(错误#54082,错误#11761576)

  • 使用myisamchk和 sort recover 方法来修复具有固定宽度行格式的表可能会导致行指针大小减小,从而有效地导致最大数据文件大小更小。(错误#48848,错误#11756869)

  • 启用myisam_use_mmap可能会导致服务器崩溃。(错误#48726,错误#11756764)

  • 对于MEMORY表,如果索引位于列的前缀上,则扫描 列HASH上的索引 VARCHAR可能无法找到某些行。(缺陷 #47704,缺陷 #11755870)

  • myisam_sort_buffer_size在 64 位系统上不能设置大于 4GB。(缺陷 #45702,缺陷 #11754145)

  • 存储的例程缓存会出现小的内存泄漏,随着时间的推移或使用许多例程可能会导致内存不足错误。

    此问题的修复还引入了一个新的全局服务器系统变量 stored_program_cache,可用于控制存储例程缓存的大小。(错误#44585,错误#11753187)

  • 在某些情况下,结果 SUBSTRING_INDEX()错误地依赖于前一行的内容。(错误#42404,错误#11751514)

  • 将事件设置为DISABLED状态和ON COMPLETION NOT PRESERVE属性会导致它在下次服务器重新启动时被删除。(错误#37666,错误#11748899)

  • 由于不正确的锁定,在对表进行修复和检查操作的同时并发插入 ARCHIVE表会导致表损坏。(错误#37280,错误#11748748)

  • 存储函数可能会产生一条错误消息, ORDER BY即使函数中的违规语句没有这样的子句,也会引用该错误消息。(漏洞 #35410,漏洞 #11748187)