这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
从 MySQL 5.6.5 开始,Oracle 不再为 OS X 10.5 提供二进制文件。这与 Apple 不再为此平台提供更新或支持一致。
以前,
TIMESTAMP
每个表最多一列可以自动初始化或更新为当前日期和时间。此限制已取消。任何TIMESTAMP
列定义都可以具有DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
子句的任意组合。此外,这些子句现在可以与DATETIME
列定义一起使用。有关详细信息,请参阅 TIMESTAMP 和 DATETIME 的自动初始化和更新。
-
重要变更;复制: 此版本为 MySQL 复制引入了全局事务标识符(GTID)。GTID 是在提交时分配给每个事务的唯一标识符;此标识符在事务发起的 MySQL 服务器上以及给定复制设置中的所有 MySQL 服务器上是唯一的。因为基于 GTID 的复制依赖于跟踪事务,所以它不能用于使用非事务性存储引擎的表,例如
MyISAM
;因此,目前仅支持InnoDB
表格。因为每个事务都是唯一标识的,所以在启动新从属服务器或故障转移到新主服务器时,没有必要使用 GTID 指定主服务器二进制日志中的位置。这反映在 为该语句添加一个新
MASTER_AUTO_POSITION
选项,该 选项在执行此语句以准备 MySQL 服务器充当复制从属服务器时 取代和 选项。CHANGE MASTER TO
MASTER_LOG_FILE
MASTER_LOG_POS
要在 MySQL 服务器上启用 GTID,必须使用选项启动服务器。无论服务器是作为复制主服务器还是作为复制从服务器,都需要这些选项;和 选项是此版本中的新选项。 一旦主服务器和从服务器都使用这些选项启动,只需在从服务器上发出一个 后跟的命令即可开始复制。
--gtid-mode=ON
--disable-gtid-unsafe-statements
--log-bin
--log-slave-updates
--gtid-mode
--disable-gtid-unsafe-statements
CHANGE MASTER TO ... MASTER_AUTO_POSITION=1
START 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 filesort
或Using temporary
在不应该被报告时被报告,反之亦然。对于包含索引提示、形式SELECT SQL_BIG_RESULT ... GROUP BY
为 、与 一起使用SQL_CALC_FOUND_ROWS
或LIMIT
使用GROUP BY
、ORDER BY
和 的语句,可能会发生这种情况LIMIT
。(错误#11744768,错误#1560)-
实施了这些查询优化器改进:
-
该
EXPLAIN
语句现在可以生成 JSON 格式的输出。要选择它,请使用 语法。对于,输出包括常规 信息,以及扩展和分区信息。EXPLAIN FORMAT = JSON
explainable_stmt
FORMAT = JSON
EXPLAIN
传统
EXPLAIN
输出也发生了变化,因此空列包含NULL
的是空字符串。此外,UNION RESULT
行在 列Using filesort
中,Extra
因为临时表用于缓冲UNION
结果。为了同时适用于优化器跟踪和 JSON 格式
EXPLAIN
输出,系统变量的end_marker
参数optimizer_trace
已移至单独的end_markers_in_json
系统变量。这是对optimizer_trace
变量的不兼容更改。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器。 -
优化器尝试通过从最有前途的表开始并递归地将剩余表中最有前途的表添加到计划中来找到最佳查询执行计划。比已找到的计划成本更高的部分执行计划被修剪。优化器现在尝试改进将表添加到计划中的顺序,从而减少考虑的部分计划的数量。
可能具有改进性能的查询是许多表的连接,其中大多数表使用
eq_ref
或ref
连接类型(如EXPLAIN
输出所示)。一个新的状态变量,
Last_query_partial_plans
计算优化器在执行计划构造中为先前的查询所做的迭代次数。 -
优化器使用半连接和物化策略来优化子查询执行。请参阅 使用半连接转换优化子查询和 使用物化优化子查询。此外,用于内部联接和外部联接操作的批量密钥访问 (BKA) 联接和块嵌套循环 (BNL) 联接算法已扩展为支持半联接操作。有关详细信息,请参阅 阻止嵌套循环和批量密钥访问联接。
几个标志已添加到
optimizer_switch
系统变量以启用对半连接和子查询实现策略的控制。该semijoin
标志控制是否使用半连接。如果它设置为on
,则firstmatch
和loosescan
标志可以更好地控制允许的半连接策略。该materialization
标志控制是否使用子查询实现。如果semijoin
和materialization
都是on
,则半连接也会在适用的情况下使用具体化。这些标志是on
默认的。请参阅可切换优化。 对于诸如 将列与值列表进行比较的表达式,优化器先前使用索引潜水对列表中的每个值进行行估计。随着值的数量变大,这变得低效。优化器现在可以使用索引统计信息对此类表达式进行行估计,这不太准确,但对于大量值来说速度更快。优化器从索引潜水切换到索引统计的点可以使用新的 系统变量进行配置。有关详细信息,请参阅 多值比较的相等范围优化。
col_name
IN(values
)eq_range_index_dive_limit
-
-
Performance Schema 添加了以下内容:
Performance Schema 现在有一个
host_cache
表,可以公开主机缓存的内容,以便可以使用SELECT
语句对其进行检查。请参阅此变更日志中其他地方的主机缓存说明。-
性能模式现在维护语句摘要信息。这对具有相同“签名”的语句进行规范化和分组,并允许回答有关服务器正在执行的语句类型以及它们发生的频率的问题。
表中的
statement_digest
消费者setup_consumers
控制性能模式是否维护摘要信息。语句事件表(
events_statements_current
、events_statements_history
和events_statements_history_long
)具有包含摘要 MD5 值和相应规范化语句文本字符串的列DIGEST
。DIGEST_TEXT
一个
events_statements_summary_by_digest
表提供聚合的语句摘要信息。
有关详细信息,请参阅 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-compat
RPM 包使 Red Hat 提供 的mysql-*-5.1
RPM 包的用户能够迁移到 Oracle 提供的MySQL-*-5.5
包。 现在通过替换 后一个包的文件来MySQL-shared-compat
替换 Red Hat 包,从而满足其他包对 . 此更改仅影响 Red Hat(或与 Red Hat 兼容)RPM 包的用户。Oracle RPM 包的用户没有什么不同。(漏洞 #13867506)mysql-libs
libmysqlclient.so
mysql-libs
如果查询的临时表包含足够大的列,则它们
INFORMATION_SCHEMA
现在使用动态行格式,从而节省空间。(漏洞 #13627632)MyISAM
VARCHAR
从 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_ci
和ucs2_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 TRANSACTION
andSTART 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=DYNAMIC
或ROW_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_HOST
和MASTER_USER
。此外,当服务器重新启动时,包含某些字符的值被修剪,导致其原始值丢失。现在这些值已经过验证,如果值包含无效字符,包括换行 (\n
或0x0A
) 字符,语句将失败并显示错误 (ER_MASTER_INFO
)。(缺陷 #11758581,缺陷 #50801)-
重要变更;复制: 将二进制日志文件、中继日志文件或这两个文件移动到新位置,然后使用 、 或两者的新值重新启动服务器
--log-bin
,--relay-log
导致服务器在启动时中止。这是因为索引文件中的条目覆盖了新位置。此外,路径是相对于 datadir(而不是--log-bin
or--relay-log
值)计算的。此问题的修复意味着,当服务器从索引文件中读取条目时,它现在会检查该条目是否包含相对路径。如果是,则路径的相对部分将替换为使用
--log-bin
or--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 及更高版本中是默认设置。错误日志中的条目如下所示:$TMPDIR
tmpfs
innodb_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_stats
和innodb_table_stats
表的内容区分大小写,以正确区分名称仅在字母大小写上不同的表的统计信息。修复了在检索持久统计信息时可能为索引选择了错误名称的其他情况。(漏洞 #13432465) InnoDB:从 源代码和
HAVE_purify
的 引用 它们仅用于为 Valgrind 检测的调试版本。它们被对宏的调用所取代。(漏洞 #13418934)UNIV_INIT_MEM_TO_ZERO
UNIV_SET_MEM_TO_ZERO
InnoDB
UNIV_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 TABLE
orCREATE INDEX
语句包含表的数据库,则索引可能已损坏,从而在重启后访问表时导致错误消息:InnoDB
DROP DATABASE
InnoDB
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 中不太可能发生,因为增加
InnoDB
undo 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 TABLE
对InnoDB
表的操作可能会失败。.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
.frm
DROP 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 PARTITION
HASH
KEY
-
复制:使用 选项 执行mysqlbinlog ,其中等于 0 或大于转储文件长度的值,导致它崩溃。
--start-position=
N
N
此问题是在 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 packets。FEDERATED
不需要复制这些(缺陷 #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=
dbname
SET INSERT_ID=
n
dbname
COMMIT
SET INSERT_ID
dbname
参考资料:另请参阅: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)来自返回空结果的子查询的 A
SELECT
本身可能无法按预期返回空结果。(错误#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)
-
SELECT
EXAMPLE
存储引擎的语句失败 。(漏洞 #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 Schema
idle
事件计时未标准化为与等待计时相同的单位。(漏洞 #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-logs
COMMIT
在子句 中使用诸如
MAX()
orMIN()
of index with 之类的聚合函数的查询 可能无法匹配行,从而返回无效结果。(缺陷 #12773464,缺陷 #61925)NOT BETWEEN
WHERE
启用 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)MERGE
MERGE
ALTER TABLE
在连续失败的情况下, mysqld_safe可能会足够快地重新启动以消耗过多的 CPU。现在,在支持sleep和date系统实用程序的系统上,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 仍然假设shared
和shared-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)