Microsoft Windows: Windows Vista、Windows Server 2008 和更新版本支持使用mklink命令进行本机符号链接。这使得 MySQL 服务器使用
.sym
文件冗余实现数据库符号链接,因此该机制现已弃用,并将在未来的 MySQL 版本中删除。请参阅在 Windows 上使用数据库的符号链接。
-
不相容的变化;复制: 一些与基于 GTID 的复制相关的变量和其他名称已更改,目的是使这些名称更合适和有意义。不再支持旧名称。
如此重命名的功能如下表所示:
系统
disable_gtid_unsafe_statements
变量已重命名enforce_gtid_consistency
。-
gtid_done
服务器系统变量已重 命名gtid_executed
。gtid_lost
服务器系统变量已重 命名gtid_purged
;此外,此变量不再是只读的。 该
SQL_THREAD_WAIT_AFTER_GTIDS()
函数已重命名WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
。
有关详细信息,请参阅使用全局事务标识符进行复制和全局事务 ID 选项和变量。(漏洞 #14775984)
-
对于因客户端帐户密码过期而被服务器限制的客户端连接,服务器现在
SET PASSWORD
仅在语句中指定的帐户与客户端使用的帐户匹配时才允许。(漏洞 #14807074)参考资料:另请参阅:Bug #14698309。
-
服务器现在提供线程信息(for
SHOW PROCESSLIST
)来指示就地ALTER TABLE
操作的进度:-
preparing for alter table
服务器正准备执行就地
ALTER TABLE
. -
altering table
服务器正在执行就地
ALTER TABLE
. -
committing alter table to storage engine
服务器已就地完成
ALTER TABLE
并正在提交结果。
(漏洞 #14790408)
-
-
InnoDB
通过将主键列附加到它来自动扩展每个二级索引。以前,优化器在确定如何以及是否使用该索引时不会考虑扩展二级索引的主键列。现在优化器将主键列考虑在内,这可以产生更高效的查询执行计划和更好的性能。优化器可以使用扩展辅助键进行
ref
、range
和index_merge
索引访问、松散索引扫描、连接和排序优化以及MIN()
/MAX()
优化。系统变量的新
use_index_extensions
标志允许控制优化器在确定如何使用表的二级索引optimizer_switch
时是否考虑主键列。InnoDB
默认情况下,use_index_extensions
启用。要检查禁用索引扩展是否会提高性能,请使用以下语句:SET optimizer_switch = 'use_index_extensions=off';
有关详细信息,请参阅索引扩展的使用。(错误#62025、错误#12814559、错误#56714、错误#11763940)
mysqld
YYYY-MM-DD hh:mm:ss
现在以 ISO ( ) 格式将日期写入错误日志它还包括其在日期之后的进程 ID。感谢 Davi Arnaut 提供补丁。(错误#56240,错误#11763523)
-
不兼容的更改:
THREAD_ID
Performance Schema 表中 的INT
到BIGINT
以容纳 64 位值。笔记作为此更改的结果,该 表的
PROCESSLIST_ID
列threads
现在NULL
用于后台线程。以前,后台线程的值为 0。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将此更改合并到
performance_schema
数据库中。(漏洞 #14664453) -
不兼容的更改: 不适用于大于最大有符号值的 值。现在接受了这样的论点,对与以前版本的兼容性产生了一些影响:
LAST_INSERT_ID(
expr
)expr
BIGINT
LAST_INSERT_ID()
现在返回一个BIGINT UNSIGNED
值,而不是一个BIGINT
(有符号的)值。LAST_INSERT_ID(
现在返回一个无符号整数值,而不是一个有符号整数值。expr
)对于
AUTO_INCREMENT
列,不再支持负值。
(错误#20964,错误#11745891)
-
Incompatible Change: 连接 ID(线程 ID)值大于 32 位可能会出现在某些系统(例如繁忙或长时间运行的 64 位系统)上,导致这些问题:
写入一般查询日志和慢查询日志的连接 ID 不正确。这对于记录到文件和表都是如此。
CONNECTION_ID()
对于大于 32 位的值, 该函数可能会返回一个数据类型太小的值。mysql_thread_id()
和mysql_kill()
C API 函数不处理大于 32 位的 ID 值 。这可能导致杀死错误的线程;例如,如果您调用了mysql_kill(mysql_thread_id())
.
当服务器支持它们时(当使用 64 位数据类型构建时),现在允许连接 ID 为 64 位值,这具有以下效果:
-
连接 ID 已正确记录到一般查询日志和慢速查询日志中。
笔记此更改涉及对日志表的修改,因此升级到此版本后,您必须运行 mysql_upgrade 并重新启动服务器。
CONNECTION_ID()
返回适用于大于 32 位的值的数据类型。-
mysql_thread_id()
不变;客户端/服务器协议的 ID 值只有 4 个字节。对于大于 32 位的连接 ID,此函数返回不正确(截断的)值,应避免使用。mysql_kill()
仍然无法处理大于 32 位的值,但为了防止杀死错误的线程现在在这些情况下返回错误:如果给定的 ID 大于 32 位,则
mysql_kill()
返回CR_INVALID_CONN_HANDLE
错误。服务器的内部线程 ID 计数器达到大于 32 位的值后,它会
ER_DATA_OUT_OF_RANGE
为任何mysql_kill()
调用返回错误并mysql_kill()
失败。
为避免 和 出现问题
mysql_thread_id()
,mysql_kill()
请勿使用它们。要获取连接 ID,请执行SELECT CONNECTION_ID()
查询并检索结果。要杀死线程,请执行一条KILL
语句。
(错误#19806、错误#11745768、错误#65715、错误#14236124、错误#44728、错误#11753308)
重要变更;InnoDB:使用索引合并访问方法 的DML语句可以锁定表中的许多行,即使这些行不是最终结果集的一部分。此修复通过释放不匹配行的锁来减少过度 锁定。此优化仅影响隔离级别等于或低于严格的事务
READ COMMITTED
;它不适用于事务使用REPEATABLE READ
或SERIALIZABLE
隔离级别。(漏洞 #14226171)-
重要变更;复制: 涉及性能模式表的语句不应写入二进制日志,因为这些表的内容仅适用于给定的 MySQL 服务器实例,并且在复制拓扑中的不同服务器之间可能会有很大差异。数据库管理员应该能够在不影响其他服务器的情况下在单个服务器上
INSERT
,UPDATE
, 或DELETE
) 或刷新 (TRUNCATE TABLE
但是,在启用 GTID 的情况下使用复制时(请参阅 使用全局事务标识符进行复制),有关更新性能模式表的不安全语句的警告被提升为错误,从而阻止了performance_schema
和 GTID 一起使用。启用 GTID 时,复制和系统日志记录表也遇到了类似的问题。
此修复引入了 非复制表或 本地表的概念。现在,当 MySQL 复制遇到一个标记为本地的表时,对该表的更新将被忽略。
此修复将以下表定义为本地表,不再复制:
performance_schema
数据库 中的所有表mysql.general_log
mysql.slow_log
mysql.slave_relay_log_info
mysql.slave_master_info
mysql.slave_worker_info
在此修复之前,使用
performance_schema
刚刚列出的表和其他表的语句被标记为复制不安全,这会在执行期间引起警告;不管日志记录格式如何,这些语句仍然被写入二进制日志。INFORMATION_SCHEMA
此修复不会更改数据库 中表的现有复制行为 。有关详细信息,请参阅MySQL 性能架构。另请参阅MySQL 服务器日志和 复制元数据存储库。有关一般和慢速查询日志表的信息,请参阅 选择一般查询日志和慢速查询日志输出目标。(漏洞 #14741537)
重要变更;复制: 由于在启用 GTID 的情况下运行服务器会阻止对非事务表的更改,因此 mysql_upgrade和 mysql_install_db等程序无法对使用 MyISAM 存储引擎的系统表进行操作,因此无法正常运行。现在,当使用
--enforce-gtid-consistency
(无论何时都需要--gtid-mode=ON
)运行时,服务器允许在非事务表上使用单个语句。(漏洞 #14722659)重要变更;复制: 以前, 每当 SQL 线程或 I/O 线程停止时
Seconds_Behind_Master
,输出中列SHOW SLAVE STATUS
总是设置为NULL
现在,此列设置为NULL
仅当 SQL 线程未运行时,或者如果 I/O 线程未在检查以确定 SQL 线程是否已处理所有中继日志后未运行。(如果 SQL 线程已完成处理并且 I/O 线程正在运行,Seconds_Behind_Master
则为 0。)(缺陷 #12946333)表现; InnoDB:调整了 低级
InnoDB
读取操作的计时值,以便在快速存储设备(例如SSD )中获得更好的性能。此增强功能主要影响压缩表BLOB
列的 读取操作 (缺陷 #13702112,缺陷 #64258)创新数据库;Partitioning: 以前,当试图优化一个分区表的一个或多个分区时,使用了不支持分区级的存储引擎
OPTIMIZE
,例如InnoDB
,MySQL报告 Table does not support optimize,改为recreate + analyze,然后重新创建整个表,但实际上并没有分析它。现在在这种情况下,警告消息是,表不支持分区优化。将重建和分析所有分区。此外,整个表在第一次重建后进行分析。(缺陷 #11751825,缺陷 #42822)-
InnoDB: 当两种操作同时发生时,服务器可能会因错误而停止:
ROLLBACK
包含页外列的插入行的 。涉及重建表的
ROW_FORMAT=DYNAMIC
or 表ROW_FORMAT=COMPRESSED
(即使用Barracuda文件格式)的在线DDL操作。例如,ADD/DROP COLUMN
,ADD PRIMARY KEY
改变ROW_FORMAT
。
(漏洞 #14842014)
-
InnoDB: 如果在将行插入到具有
FULLTEXT
索引的表中但在提交事务之前服务器崩溃,则在下一次启动期间可能会发生错误:InnoDB: Assertion failure in thread thread_num in file dict0dict.cc line 1019
(漏洞 #14826779)
InnoDB:当通过语句
InnoDB
包含FULLTEXT
索引 的表时,服务器可能会因错误而停止HANDLER
(漏洞 #14788710)InnoDB:由于文件系统中保留了临时表空间文件,在or
ALTER TABLE
语句 时,Windows 系统上可能会发生超时错误 (漏洞 #14776799)DISCARD TABLESPACE
IMPORT TABLESPACE
InnoDB:
InnoDB
带有FULLTEXT
索引的表可以为从未释放的线程句柄分配内存,这可能导致 Windows 系统上的资源问题。(漏洞 #14759163)-
InnoDB: 服务器可能会因操作的断言错误而停止
ANALYZE TABLE
,具体取决于表及其索引的结构:InnoDB: Assertion failure in thread thread_num in file dict0dict.ic line 447 InnoDB: Failing assertion: pos < table->n_def
(漏洞 #14755452)
InnoDB: 在 复制表 的在线 DDL操作期间,表的二级索引可能会损坏。(漏洞 #14753701)
InnoDB:当使用索引前缀为唯一索引报告重复键错误时,表 的在线 DDL 操作
InnoDB
错误地报告了空值 (''
) 而不是正确的键值。(漏洞 #14729221)-
InnoDB: 如果在线 DDL
CREATE INDEX
操作后服务器崩溃,则在下次启动时回滚未完成的事务时可能会出错:InnoDB: error in sec index entry del undo in ... InnoDB: Assertion failure in thread thread_num in file row0umod.cc line 559
(漏洞 #14707452)
InnoDB:
ALTER TABLE
此修复改进了操作添加的列超出表允许的最大数量 时的错误处理InnoDB
。它还将表的最大列数InnoDB
从 1000 增加到 1020。(缺陷 #14705287)InnoDB: 此修复使 MySQL
KILL QUERY
在查询访问InnoDB
表时对语句的响应更快。(漏洞 #14704286)InnoDB:如果服务器在为
ALTER TABLE
重建聚集索引的操作 期间的某个精确时刻崩溃InnoDB
,则之后可能无法访问原始表。此类操作的一个示例是ALTER TABLE ... ADD PRIMARY KEY
如果服务器在此操作期间停止,修复将保留原始表。您可能仍然需要.ibd
手动重命名文件以恢复原始表内容:在 MySQL 5.6 及更高版本中, 在数据库目录 到 在 MySQL 5.6 之前,要重命名的临时文件是 or 。(漏洞#14669848)#sql-ib$
new_table_id
.ibdtable_name
.ibdtable_name
#1#2
InnoDB: 在 重建表的在线 DDL
CHECK TABLE
操作期间,一条语句可能会报告所有二级索引的计数不匹配。(漏洞 #14606472)InnoDB: 在
FULLTEXT
创建索引并从InnoDB
表中删除索引后,进一步ALTER TABLE
的添加、删除和重命名列的操作可能会导致严重错误。bug #13972248 的回归。(漏洞 #14504337)InnoDB: 如果
ALTER TABLE
在尝试为表创建FULLTEXT
索引InnoDB
,则服务器可能会在删除不完整索引时因断言错误而停止。(漏洞 #14504174)-
InnoDB: 在关闭期间,
innodb_purge_threads
配置选项设置大于 1,服务器可能会因以下错误而过早停止:mysqld got signal 11
解决方法是增加
innodb_log_file_size
并设置innodb_purge_threads=1
. 该修复程序已反向移植到 MySQL 5.5 和 5.1,尽管这些版本没有innodb_purge_threads
配置选项,因此不太可能发生错误。(漏洞 #14234028) -
InnoDB: 在某些并发操作组合下,服务器可能会因错误而停止:
InnoDB: unknown error code 20
此问题起源于 5.6 开发周期。它只影响使用
READ COMMITTED
和READ UNCOMMITTED
隔离级别的事务。(错误#13641662,错误#12424846) -
InnoDB:此修复改进了无法创建外键约束 时的错误消息 该消息没有提及无法使用自动生成的名称创建表,而是明确指出了错误:
ERROR 1215 (HY000): Cannot add foreign key constraint
发出后续
SHOW WARNINGS
语句会提供有关所需的任何二级索引的更多详细信息。(错误#11745444,错误#15324) 复制: 如果要复制的表有
FULLTEXT
索引,则在选择用于查找下一行的扫描类型时不排除该索引,即使它不能用于查找正确的行。行应用程序随后尝试使用索引扫描失败,导致复制失败。FULLTEXT
现在在这种情况下,在确定是否为此目的使用表、索引或散列扫描时,不考虑不提供顺序访问的索引(例如 (漏洞 #14843764)复制: 给定调用函数的存储例程:一旦
R
在 返回 ,在客户端会话的其余部分,每次在内部它都会继续返回(漏洞 #14838575)GTID_SUBTRACT()
GTID_SUBTRACT()
NULL
R
NULL
R
复制: 当使用 GTID-aware master-slave 协议时,slave I/O 线程使用了错误的位置。使用 GTID 时,通常不会使用该位置,但作为一种特殊情况,当从属重新连接到同一主控时,除了 GTID 之外还使用了该位置(即使这不是必需的)。通过使 GTID 感知主从协议不再使用位置来解决此问题。(漏洞 #14828028)
-
复制: MySQL Enterprise Backup、 mysqldump和 mysqlhotcopy无法与启用 GTID 的 MySQL 服务器一起使用,因为它们无法恢复服务器的 GTID 状态,因此无法从二进制日志中除开头以外的任何点恢复。
作为此问题修复的一部分,
gtid_purged
系统变量(以前名为gtid_lost
)不再是只读的;现在可以在gtid_executed
(以前gtid_done
)为空时向其添加 GTID。(漏洞 #14787808) 复制: 在清除第一个二进制日志文件后重新启动复制导致错误Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but master has purged binary logs containing从站需要的 GTID。这导致基于 GTID 的复制失败。(漏洞 #14756691)
Solaris: 使用 Solaris 软件包安装 在升级操作期间运行mysql_install_db (这应该只发生在新安装中)。(错误#14747671,错误#16534721)
mysql_install_db未能遵守该
--user
选项。(漏洞 #15866735)优化器在确定子查询执行策略时可能分配的内存不足,导致服务器退出。(漏洞 #14846866)
优化器可以在根据条件评估范围测试时提出断言
IS NOT NULL
。(漏洞 #14843705)init_io_cache()
用于memset()
清除互斥量但传递了错误的互斥量大小。(漏洞 #14838882)如果表名包含非字母数字字符,则使用索引创建
InnoDB
表FULLTEXT
可能会遇到严重错误。(错误#14835178,错误#16036699)越界读取可能发生在
filename_to_tablename()
. (漏洞 #14834378)-
在启用了全局事务 ID (GTID) 的服务器上使用mysqldump进行备份时,转储文件不包含任何 GTID 信息。这最终会导致在使用备份启动从属时从历史开始复制事务。
为了能够控制写入转储文件的 GTID 信息,mysqldump现在有一个
--set-gtid-purged
选项指示是否向 输出添加语句。SET
@@GLOBAL.
gtid_purged
下表显示了允许的选项值。默认值为
AUTO
。价值 意义 OFF
SET
不向输出添加语句。ON
在输出中添加 SET
语句。如果服务器上未启用 GTID,则会发生错误。AUTO
SET
如果在服务器上启用了 GTID,则在输出中添加一条语句。(漏洞 #14832472)
LOCK TABLES
实际上, 可以CREATE TABLE IF NOT EXISTS ... LIKE
提出断言。(漏洞 #14788976)断言可以在执行
INSERT
,UPDATE
, 或DELETE
隐式启动READ ONLY
事务LOCK TABLES
模式后引发。(漏洞 #14788540)带有联合和连接的查询可能会使解析器崩溃。(错误#14786792,错误#16076289)
尝试读取
utf16
带有LOAD DATA
引发断言的文件。(漏洞 #14786470)派生表处理的自动键生成部分未正确处理指定为
VALUES()
子句一部分的列,并导致引发断言。(漏洞 #14786324)对于从零长度表名中选择的查询,可能会发生无效的内存读取。(漏洞 #14780820)
SHOW PROCESSLIST
输出未按顺序排序Id
。(漏洞 #14771006)尝试在具有类型属性的表 中创建 自动增量列可能会导致严重错误。(漏洞 #14758479)
InnoDB
NULL
尝试使用 tiny、medium、long或 列
ALTER TABLE
设置默认值 时发生内存泄漏。(漏洞 #14756206)BLOB
TEXT
如果
ALTER TABLE
用于将列重命名为与现有列相同的名称,同时还使用AFTER
or对重命名的列重新排序,则会引发断言FIRST
。(漏洞 #14756089)NOT IN
如果使用半连接物化来评估子查询 ,则可以提出断言。(漏洞 #14751858)发出后
ALTER TABLE ... DISCARD TABLESPACE
,同一表的联机 DDL 操作可能会在 Windows 系统上失败并出现错误:Got error 11 from storage engine
。ALTER TABLE
带有该 子句的语句ALGORITHM=INPLACE
还可以创建一个空的.ibd 文件,使表空间不再“被丢弃”。(漏洞 #14735917)对于某些延续处理程序嵌套,延续可能发生在错误的位置。(漏洞 #14724836)
启动服务器
bind_address
然后设置host_cache_size
为 0 可能会导致服务器停止某些类型的客户端连接。(漏洞 #14689561)对于
UPDATE
语句,EXPLAIN
在列中显示总密钥长度,key_len
而不是使用的密钥部分的长度。(漏洞 #14682438)启用索引条件下推后,优化器可能会为派生表生成不正确的结果。(漏洞 #14640176)
SHOW PROFILE
可用于导致过多的服务器内存消耗。(漏洞 #14629232)优化器可能会错误地使用非空间索引来优化空间操作,从而导致引发断言。(漏洞 #14600994)
-
修复 了mysql_config_editor的 几个问题:
没有关于配置文件写入错误的错误消息。
--all
该命令不支持该选项 ,remove
但没有针对尝试使用 的警告消息remove --all
。--all
该命令不支持该选项 ,set
但没有针对尝试使用 的警告消息set --all
。
此外,命令现在支持
--user
、--password
和选项。如果存在,该命令仅从登录路径中删除请求的值。如果没有给出,则删除整个 登录路径。例如,此命令仅删除登录路径中的值 而不是整个 登录路径:--host
remove
remove
remove
client
user
client
client
mysql_config_editor remove --login-path=client --user
(错误#14505672、错误#14545989、错误#14545999)
LIKE
具有太多'%'
通配符 的模式可能会导致分段错误。(漏洞 #14303860)-
以前,
events_statements_summary_by_digest
Performance Schema 表是DIGEST
单独按列分组的摘要。现在此表包含一SCHEMA_NAME
列,摘要摘要按SCHEMA_NAME
和DIGEST
列分组。如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将此更改合并到
performance_schema
数据库中。(漏洞 #14075527) 即使没有启用任何关联的日志,查询重写以清除日志记录的密码也是如此。此外,
CREATE SERVER
现在ALTER SERVER
根据需要重写。(漏洞 #14073554)CREATE TABLE ... SELECT
可以创建一个包含 type 列的表,NULL
访问该列时会导致服务器退出。(错误#14021323,错误#23280699)CHECK TABLE
如果表有损坏的键 ( ) 文件,REPAIR TABLE
则可能会崩溃 。现在服务器产生错误。(漏洞 #13556441)MyISAM
.MYI
CHECK TABLE
如果表有损坏的键 ( ) 文件,REPAIR TABLE
则可能会崩溃 。现在服务器产生错误。(错误#13556107,错误#13556000)MyISAM
.MYI
-
来自myisamchk命令 的“缓冲区太小”错误消息 引用了 配置选项,而它本应引用 .
myisam_sort_buffer_size
sort_buffer_size
myisamchk现在有一个
myisam_sort_buffer_size
变量可用作sort_buffer_size
.myisam_sort_buffer_size
更可取,sort_buffer_size
因为它的名称对应于myisam_sort_buffer_size
具有相似含义的服务器系统变量。sort_buffer_size
应被视为弃用。(错误#11754894,错误#46578) Performance Schema表
host_cache
多次显示某些行。这不是主机缓存本身的问题,只是提供有关缓存内容信息的表的问题。(缺陷 #67236,缺陷 #14764890)在 OS X 上,重新初始化查询缓存可能会导致服务器退出。感谢 Davi Arnaut 提供补丁。(漏洞 #67156,漏洞 #14741880)
服务器无法将查询缓存用于其中数据库或表名包含特殊字符且表存储引擎为 的查询
InnoDB
。(漏洞 #64821,漏洞 #13919851)mysqld_safe忽略了
UMASK
环境变量的值,导致在创建文件的访问模式方面与mysqld不同的行为。现在 mysqld_safe(和 mysqld_multi)试图接近与mysqld相同的行为。(错误#57406,错误#11764559)对于
mysql
数据库 的转储,除非给出选项,否则mysqldump会跳过该event
表 。--events
这不再发生。event
如果需要 跳过该表,请改用该--ignore-table
选项(Bug #55587,Bug #11762933)对于
MEMORY
有HASH
索引的表,DELETE
有时无法删除所有适用的行。(错误#51763,错误#11759445)在 OS X 上,
KILL
有时可能不可靠。(缺陷 #37780,缺陷 #11748945)