这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
-
性能: 服务器现在为二进制日志实现组提交:多个提交在内存中分组,然后作为一个组而不是单独写入并刷新到磁盘。这减少了写入和刷新的次数,提高了二进制日志记录的性能。组提交适用于所有存储引擎。
InnoDB
实施一些优化以利用组提交功能。这些系统变量是与组提交一起添加的:
binlog_order_commits
:是按照事务写入二进制日志的相同顺序提交事务,还是允许它们并行提交。binlog_max_flush_queue_time
:在继续进行组提交之前,以微秒为单位保持从刷新队列中读取事务的时间。innodb_flush_log_at_timeout
:每秒写入和刷新日志N
。
-
此 MySQL 版本对多个服务器参数的默认值进行了更改。这些更改的动机是提供更好的开箱即用性能并减少数据库管理员手动更改设置的需要。当我们获得反馈时,这些更改将在未来的版本中进行修订。(请参阅更改服务器默认设置。)
在某些情况下,参数具有不同的固定默认值。在其他情况下,服务器会在启动时使用基于其他相关参数或服务器主机配置的公式自动调整参数大小,而不是使用固定值。例如, 的设置
back_log
是其先前的默认值 50,向上调整的量与 的值成比例max_connections
。自动调整大小背后的想法是,当服务器有可用信息来决定可能优于固定默认值的参数设置时,它会这样做。下表总结了对默认值的更改。对于自动调整大小的变量,主要变量描述提供了有关调整大小算法的更多详细信息。请参阅 服务器系统变量和 InnoDB 启动选项和系统变量。这些默认设置中的任何一个都可以通过在服务器启动时指定一个显式值来覆盖。
关于与以前版本的兼容性,最重要的变化是:
innodb_file_per_table
启用(以前禁用)innodb_checksum_algorithm
是CRC32
(以前INNODB
)binlog_checksum
是CRC32
(以前NONE
)
因此,如果您正在升级现有的 MySQL 安装,尚未更改这些参数的先前默认值,并且考虑向后兼容性,您可能希望将这些参数显式设置为其先前的默认值。例如,将这些行放在服务器选项文件中:
[mysqld] innodb_file_per_table=0 innodb_checksum_algorithm=INNODB binlog_checksum=NONE
这些设置保持兼容性如下:
使用新的默认
innodb_file_per_table
启用,ALTER TABLE
升级后的操作会将InnoDB
系统表空间中的表移动到单个.ibd
文件。使用innodb_file_per_table=0
将防止这种情况发生。设置
innodb_checksum_algorithm=INNODB
允许升级到此版本后二进制降级。如果设置为CRC32
,InnoDB 将使用旧版 MySQL 无法使用的校验和。使用
binlog_checksum=NONE
,服务器可以用作复制主服务器,而不会导致不理解二进制日志校验和的旧从服务器发生故障。
重要更改:
INSERT DELAYED
现已弃用,并将在未来的版本中删除。使用INSERT
(withoutDELAYED
) 代替。(漏洞 #13985071)该
YEAR(2)
数据类型现已弃用,因为它存在问题。YEAR(2)
现有表中的列与以前一样处理,但YEAR(2)
在新的或更改的表中将转换为YEAR(4)
.YEAR(2)
在未来的 MySQL 版本中将完全删除对的支持。有关详细信息,请参阅 2 位 YEAR(2) 限制和迁移到 4 位 YEAR。
-
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 USER
GRANT
PASSWORD()
old_passwords
笔记以前,
old_passwords
允许值OFF
orON
作为 0 或 1 的同义词。这不再适用。 SHA-256 密码哈希 (
old_passwords=2
) 使用随机盐值,这使得结果具有不PASSWORD()
确定性。因此,使用此函数的语句对于基于语句的复制不再安全,并且不能存储在查询缓存中。如果MySQL是用OpenSSL搭建的,在客户端连接过程中可以使用RSA加密来传输密码。和 系统变量允许在服务器端命名私钥文件
sha256_password_private_key_path
和sha256_password_public_key_path
公钥文件。状态变量显示Rsa_public_key
公钥值。mysql和 mysqltest客户端支持一个 选项,--server-public-key
允许在连接到服务器时明确指定公钥文件。(这个选项是通过一个新的MYSQL_SERVER_PUBLIC_KEY
mysql_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 现在有检查密码安全性的规定:
在分配作为明文值提供的密码的语句中,根据当前密码策略检查该值,如果它很弱则拒绝(该语句返回
ER_NOT_VALID_PASSWORD
错误)。这会影响CREATE USER
、GRANT
和SET PASSWORD
语句。PASSWORD()
作为和 函数的参数给出的密码OLD_PASSWORD()
也会被检查。可以使用新的
VALIDATE_PASSWORD_STRENGTH()
SQL 函数评估潜在密码的强度,该函数采用密码参数并返回 0(弱)到 100(强)之间的整数。
这两种功能都由
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_SSL
CMake 选项,no
不再是允许值或默认值。默认为现在bundled
。因此,MySQL 现在始终支持 SSL。
-
不兼容的更改: 现在明确不允许将值分配
DEFAULT
给存储过程或函数参数或存储程序局部变量(例如使用 语句)。这以前不受支持,也未按允许记录,但被标记为不兼容的更改,以防现有代码无意中使用此构造。仍然允许像以前一样分配给系统变量,但 现在分配给参数或局部变量会导致语法错误。SET
var_name
= DEFAULTDEFAULT
DEFAULT
升级到 MySQL 5.6.6 或更高版本后,使用此构造的现有存储程序在调用时会产生语法错误。如果将 5.6.5 或更早版本的mysqldump文件加载到 5.6.6 或更高版本,加载操作将失败,并且必须更改受影响的存储程序定义。
不兼容 的更改:
--safe-mode
服务器选项已被删除。重要变更;分区: MySQL 现在支持分区锁修剪,它允许许多针对分区表的 DDL 和 DML 语句使用
MyISAM
(或使用表级锁定的其他存储引擎)仅锁定那些直接受语句影响的分区。这些陈述包括(但不限于)许多SELECT
、SELECT ... PARTITION
、UPDATE
、REPLACE
、INSERT
和其他陈述。当与具有许多(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
属性或显式DEFAULT
或ON UPDATE
属性声明,则自动分配DEFAULT CURRENT_TIMESTAMP
和ON 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
将按如下方式处理:TIMESTAMP
NULL
如果未使用属性显式声明,则列允许 值NOT NULL
。设置此类列以NULL
将其设置为NULL
,而不是当前时间戳。不会自动为任何
TIMESTAMP
列分配DEFAULT CURRENT_TIMESTAMP
或ON UPDATE CURRENT_TIMESTAMP
属性。必须明确指定这些属性。TIMESTAMP
声明为NOT NULL
和没有显式DEFAULT
属性的列被视为没有默认值。对于没有为此类列指定显式值的插入行,结果取决于 SQL 模式。如果启用严格 SQL 模式,则会发生错误。如果未启用严格 SQL 模式,则会为该列分配隐式默认值'0000-00-00 00:00:00'
并出现警告。这类似于 MySQL 处理其他时间类型的方式,例如DATETIME
.
要升级用于复制的服务器,请先升级从服务器,然后再升级主服务器。主从之间的复制应该可以工作,前提是它们都使用相同的值
explicit_defaults_for_timestamp
:-
关闭从站,升级它们,使用所需的值配置它们
explicit_defaults_for_timestamp
,然后将它们重新启动。从属节点将从主节点接收到的二进制日志格式中识别出主节点较旧(早于引入
explicit_defaults_for_timestamp
),并且对TIMESTAMP
来自主节点的列的操作使用旧TIMESTAMP
行为。 关闭主服务器,升级它,并
explicit_defaults_for_timestamp
使用在从服务器上使用的相同值配置它,然后将其重新启动。
(错误#63034、错误#13344629、错误#55131、错误#11762529)
-
表现; InnoDB:现在可以 在线执行 许多对表的DDL操作 ,而不会使表无法用于查询。一些操作,例如创建或删除索引,甚至允许在操作进行时在表上, , 单个在线 DDL 操作也可以代替一系列语句,例如几条 语句, 然后是几条 语句。有关完整详细信息,请参阅 InnoDB 和在线 DDL。
InnoDB
INSERT
UPDATE
DELETE
DROP INDEX
ALTER TABLE ... ADD COLUMN
CREATE INDEX
ALTER TABLE
对于尝试从在另一个会话 中更改的表中重新读取数据的一致读取事务,此更改会产生额外的影响。事务不会收到空集,而是会收到错误(ER_TABLE_DEF_CHANGED
“ 表定义已更改,请重试事务”)。(错误#58368、错误#11765404、错误#11872643、错误#12325508、错误#11765266、错误#60689) 表现; InnoDB:表 的持久统计功能
InnoDB
现在默认启用,并且可以在单个表的级别进行控制。此功能涉及配置选项innodb_stats_persistent
、innodb_stats_auto_recalc
和 and 的innodb_stats_persistent_sample_pages
子句STATS_PERSISTENT
、STATS_AUTO_RECALC
和 。有关使用详细信息,请参阅 配置持久性优化器统计参数。STATS_SAMPLE_PAGES
CREATE TABLE
ALTER TABLE
-
表现; InnoDB: MySQL 服务器现在包括广泛使用的 memcached内存缓存系统,以及一个允许通过memcached协议以 NoSQL 方式快速访问
InnoDB
表 这种访问方式避免了 SQL 解析和构建查询优化计划的开销。您可以将基础数据存储在单个 表中,或将其分布在多个表中。和SQL都可以读写数据 例如,您可以通过memcached调用进行快速单键查找,并通过 SQL 对所有数据进行统计报告。InnoDB
memcached
get
多个配置选项可让您微调该系统,特别是在原始性能与数据的持久性和一致性之间取得平衡。主要的新配置选项是
daemon_memcached_option
、daemon_memcached_r_batch_size
、daemon_memcached_w_batch_size
、innodb_api_trx_level
、innodb_api_enable_mdl
和innodb_api_enable_binlog
。有关完整详细信息,请参阅InnoDB memcached 插件。
InnoDB: 对于具有持续繁重 工作负载或波动很大的工作负载的系统,几个新的配置选项可让您微调表的刷新 行为
InnoDB
:innodb_adaptive_flushing_lwm
,,innodb_max_dirty_pages_pct_lwm
(innodb_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 TABLESPACE
andIMPORT 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_ADD
mysql_options4()
session_connect_attrs
session_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_hits
并Table_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_neighbors
SSD 硬件通常不需要。)(错误 #13798956)表现; InnoDB: 此修复程序通过删除缓冲池扫描以删除自适应哈希索引的条目来
DROP TABLE
提高。 这种改进在具有非常大的缓冲池和启用该选项的系统上最为明显 (缺陷 #13704145,缺陷 #64284)InnoDB
innodb_adaptive_hash_index
-
表现; 复制: 作为给定事务的一部分所做的所有更改都被缓存;当事务被提交时,这个缓存的内容被写入二进制日志。使用全局事务标识符时,标识此事务的 GTID 必须是缓存中属于该事务的所有事件中的第一个事件。
以前,缓存的一部分在事务开始时被预先分配为缓冲区;提交后,它已使用有效的 GTID 完成。但是,由于无法在缓存中执行查找,因此必须将其刷新到一个临时文件中,然后在该文件中查找。当缓存缓冲区不足以容纳包含给定事务的所有更改时,它会将数据交换到磁盘,然后重新初始化缓存以使缓冲区再次正确填充正确的数据。每次写入 GTID 事件时,缓冲区实际上被刷新并重新初始化缓存,即使在构成给定事务的所有事件都适合缓存缓冲区的情况下,也是如此,
现在只有在实际需要时才重新初始化缓存——换句话说,只有当缓存实际上被交换到磁盘时才重新初始化。
此外,此问题的修复解决了当服务器无法写入空事务组时缺少解锁操作的问题,并减少了在将缓存刷新到磁盘之前将 GTID 添加到缓存内容所需的代码量。(漏洞#13877432)
参考资料:另请参阅:Bug #13738296。
性能: 在存储程序中,即使未启用相应的日志,也会产生使语句日志友好的开销。(漏洞 #12884336)
性能: 和
MD5()
函数SHA1()
对于短字符串有过多的开销。(错误#49491、错误#11757443、错误#60227、错误#14134662)创新数据库;复制: 当二进制日志语句在从属服务器上重放时
Com_insert
,Com_update
、 和Com_delete
计数器由BEGIN
启动影响InnoDB
表的事务的语句递增,但不会由COMMIT
结束此类事务的语句递增。这会影响这些语句,无论它们是复制的还是使用 mysqlbinlog运行的。(漏洞 #12662190)InnoDB:如果表是在启用设置的情况下创建的,则 删除
InnoDB
临时表可能会留下.ibd
文件innodb_file_per_table
。在 Windows 系统上,这可能会导致另一个问题:重复尝试删除文件 2000 秒。除了解决用于删除文件的不正确路径名之外,此修复还将重试循环限制为 10 秒,例如,如果文件由于被备份进程锁定而无法删除。(漏洞 #14169459)-
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_metrics
innodb_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
隔离级别的事务中,表的UPDATE
orDELETE
语句InnoDB
有时会忽略其他事务最近提交的行。如 一致非锁定读取中所述,事务中的 DML 语句REPEATABLE READ
适用于其他事务提交的行,即使查询看不到这些行。(缺陷 #14007649,缺陷 #65111)InnoDB: 在表的
ANALYZE TABLE
语句InnoDB
,服务器可能挂起(在非调试版本中),或者可能发生断言错误,表明递归获取锁(在调试版本中)。(漏洞 #14007109)InnoDB: 如果 在删除
InnoDB
数据库时将表移动到不同 。(漏洞 #13982017)ALTER TABLE ... RENAME
DROP 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_increment
innodb_autoinc_lock_mode=1
INSERT
Duplicate entry 'value' for key 'PRIMARY'
解决方法是设置
auto_increment_offset=1
或innodb_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 TABLE
中,InnoDB
部分列特征可能设置不正确,导致后续查询出错。不正确的数据可能是列前缀的最大长度或NOT NULL
标志的状态。在 MySQL 5.1 中,此修复适用于 InnoDB 插件,但不适用于内置的 InnoDB 存储引擎。(漏洞 #13641275)
InnoDB:删除一个索引并创建另一个索引的表 的
ALTER TABLE
语句InnoDB
可能会失败,错误代码为 1280,并在消息中显示错误的索引名称。(缺陷 #13029445,缺陷 #62544)InnoDB: 如果
innodb_undo_tablespaces
和innodb_undo_logs
配置选项被指定为引用单独 的撤消表空间,并且关联的表空间不存在,则在启动期间未正确检测到该错误情况。(漏洞 #13016100)InnoDB: 改进了错误处理和消息,以尝试创建一个 带有引用自身的列的外键。该消息表明 数据字典存在潜在问题,而实际上并不存在此类问题。(漏洞 #12902967)
InnoDB: 对于
InnoDB
有触发器的表,在设置下innodb_autoinc_lock_mode=1
,有时自动增量值可能会在两个会话并发插入表时交错。自动增量值的顺序可能会因时间而异,从而导致使用复制的系统中的数据不一致。(缺陷 #12752572,缺陷 #61579)InnoDB: 如果
ALTER TABLE
同时使用IGNORE
andADD 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 的定义t2
与t1
. 发生这种情况是因为对表定义中的显式ROW_FORMAT
设置进行了检查,如果已设置,则操作将被拒绝。现在在这种情况下,明确检查每个表实际使用的行格式,
EXCHANGE PARTITION
如果两个行格式相同,则允许执行操作。(漏洞 #11894100) -
分区:表 的
PARTITION_COMMENT
列INFORMATION_SCHEMA.PARTITIONS
截断分区注释,只显示前80个字符。作为此问题修复的一部分,分区注释的最大长度现在设置为 1024 个字符,并且此宽度受
INFORMATION_SCHEMA.PARTITIONS.PARTITION_COMMENT
. (错误#11748924,错误#37728) 复制: 当一个完整的全局事务跨越中继日志,以至于只有它的 GTID 出现在给定的中继日志中,而事务的主体(包括
BEGIN
和COMMIT
语句)出现在下一个中继日志中时,GTID 被错误地解释为属于一个空组. (漏洞 #14136654)复制: 在某些情况下,在提交或回滚正在进行的事务之前使用半同步复制进行日志轮换是可能的。(漏洞 #14123372)
-
复制: 如果在服务器停止后删除了中继日志,而没有先停止复制,则服务器无法正常启动。(缺陷 #14029212,缺陷 #65152)
参考资料:另请参阅:Bug #13971348。
复制:mysqld 的
--bootstrap
选项 由 mysql_install_db在初始化系统表时使用。现在,无论何时使用此选项,GTID(请参阅 使用全局事务标识符进行复制)和复制都会自动禁用。(漏洞 #13992602)复制: 理论上并发执行多个实例
SHOW BINLOG EVENTS
可能导致 MySQL 服务器崩溃。(漏洞 #13979418)复制: 如果在尝试初始化
mysql.slave_master_info
或mysql.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_info
slave_worker_info
MyISAM
InnoDB
ALTER TABLE
InnoDB
复制: 当从站设置为 using 选项等于大于零的任何允许值,然后停止使用
CHANGE MASTER TO
,指向当前中继日志位置(如 SHOW SLAVE STATUS 所示),并再次启动,失败并出现错误Could不初始化主信息结构。(漏洞 #12995174)MASTER_DELAY
STOP SLAVE
START 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_INCREMENT
、LAST_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 TABLESPACEInnoDB
ALTER 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=DYNAMIC
innodb_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()
orIFNULL()
可能会导致服务器崩溃。(错误#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
变量有时不包括在64
64 位系统上编译的服务器二进制文件的值。(漏洞 #13859866)启用子查询具体化后,子句中包含子查询的某些查询会
HAVING
导致服务器崩溃。(漏洞 #13848789)当
InnoDB
启用持久统计功能时,带有删除标记记录ALTER TABLE
的表上的语句InnoDB
可能会导致崩溃(非调试构建)或断言错误(调试构建)。(错误#13838962,错误#13867915)在引导程序模式下,如果服务器提前中止,服务器信号处理程序线程不会关闭。(漏洞 #13837221)
MySQL 5.6 中的一些错误与 MySQL 5.5 中的编号不同。(漏洞 #13833438)
如果
KILL QUERY
中断 anINSERT
或UPDATE
具有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)
c
d
NULL
对于有效导致完整索引扫描的开放范围,优化器不会丢弃不需要的范围谓词。(漏洞 #13731380)
根据操作数的顺序,范围优化器有时不会对等价表达式进行相同处理。例如,它可以区别对待
a <= b
andb >= a
。(漏洞 #13701206)启用半连接优化后,会针对表数大于搜索深度的查询提出断言。(漏洞 #13685026)
截断表分区不会使使用该表的查询缓存中的查询无效。(漏洞 #13485448)
设置
max_sort_length
为较小的值可能会导致服务器崩溃。(漏洞 #13485416)在子句中使用文字值执行的查询
WHERE
返回的结果可能不同于为使用 子句SELECT
中的语句 从单独的表中选择相同文字值而编写的相同查询WHERE
。(漏洞 #13468414)条件处理程序代码可以假设在处理程序执行后,控制将向上传递一个级别给父级,有时会导致服务器崩溃。(漏洞 #13431226)
如果
GROUP_CONCAT()
结果是使用中间结果计算的(例如,如果存在ORDER BY
或DISTINCT
存在),则每个中间结果都会被截断为最大值 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)-
SAVEPOINT
XA 事务中错误地禁止语句。(错误#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 地址,则服务器无法启动。例如,withbind_address=localhost
,如果localhost
同时解析为127.0.0.1
和::1
,则启动失败。现在服务器在这种情况下更喜欢 IPv4 地址。(缺陷 #61713,缺陷 #12762885)SHOW TABLES
除非所需信息已经在磁盘缓存中,否则速度非常慢。(缺陷 #60961,缺陷 #12427262)在 Windows 上,mysql客户端在使用其完整路径名调用时崩溃。(缺陷 #60858,缺陷 #12402882)
在执行、、 和 的组合时
SELECT
, 会话可能最终陷入僵局 。(缺陷 #60682,缺陷 #12636001)DROP TABLE
KILL
SHOW 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_log
和slow_query_log
表,因为它们无法被锁定。如果该文件包含数据库的DROP DATABASE
语句,则在重新加载转储文件后会导致问题mysql
:数据库不再包含日志表,并且尝试记录到它们失败。现在mysqldump 包括重新创建general_log
和slow_query_log
表的语句,以便它们在加载转储文件后存在。日志表内容仍未转储。(错误#45740,错误#11754178)当查询被终止时,错误代码并不总是通过服务器代码正确传播。(错误#43353,错误#11752226)
与未引用的数字相比,优化器可以为使用引用的数字的条件选择更差的执行计划。(错误#43319,错误#11752201)
使用的查询针对 进行了优化 ,但未针对 或 进行了优化。(错误#43187,错误#11752097)
WHERE (
col1
,col2
) IN ((const
,const
))SELECT
DELETE
UPDATE
对于
ALTER TABLE
withIGNORE
关键字,IGNORE
现在是提供给存储引擎的一部分信息。在就地或复制算法之间选择更改表时是否使用它取决于存储引擎。对于InnoDB
索引操作,IGNORE
如果索引唯一则不使用,所以使用复制算法。(错误#40344,错误#11750045)LEFT JOIN
在派生表上非常慢。现在通过使用子查询具体化解决了这个问题。(错误#34364,错误#11747876)MySQL 在为和 语句的列定义中的默认值 强制执行
NO_ZERO_DATE
和 SQL 模式 时过于激进 。以前,启用这些 SQL 模式时无效的默认日期会产生错误,即使未启用严格模式也是如此。现在启用 或启用,如果未启用严格 SQL 模式,则无效的默认日期会产生警告,如果启用严格模式,则会产生错误。(缺陷 #34280,缺陷 #11747847)NO_ZERO_IN_DATE
CREATE TABLE
ALTER TABLE
NO_ZERO_DATE
NO_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)