系统
timed_mutexes
变量没有效果,已弃用。(漏洞#18277305)mysqlhotcopy实用程序现已弃用 ,并将在未来的 MySQL 版本中删除。这样做的原因包括:它只适用于
MyISAM
和ARCHIVE
存储引擎;它适用于 Unix 但不适用于 Windows。备选方案包括mysqldump 和 MySQL Enterprise Backup。
MySQL 现在包括对 Oracle Linux 6 或更高版本和 UEK 内核的 DTrace 支持。如果存在 DTrace,服务器构建将检测到它而无需特殊的CMake选项。有关在 MySQL 上使用 DTrace 的信息,请参阅 使用 DTrace 跟踪 mysqld。
-
重要变化: 对大型外部存储
BLOB
字段的重做日志写入可能会覆盖最近的检查点。5.6.20 补丁将重做日志BLOB
写入的大小限制为重做日志文件大小的 10%。5.7.5 补丁在不施加限制的情况下解决了该错误。对于 MySQL 5.5,该错误仍然是一个已知限制。由于
BLOB
MySQL 5.6 引入了重做日志写入限制,该innodb_log_file_size
设置应比BLOB
表行中的最大数据大小加上其他可变长度字段( 、 和类型字段)的长度VARCHAR
大VARBINARY
10TEXT
倍。如果您的innodb_log_file_size
设置已经足够大或您的表不包含任何BLOB
数据,则无需执行任何操作。笔记在 MySQL 5.6.22 中,重做日志
BLOB
写入限制放宽到重做日志总大小 (innodb_log_file_size
*innodb_log_files_in_group
) 的 10%。(错误#16963396、错误#19030353、错误#69477)
-
MySQL 企业版中包含的审计日志插件现在可以根据用户帐户和事件状态过滤审计事件。几个新的系统变量为 DBA 提供了过滤控制。此外,通过添加多个状态变量,审核日志插件报告功能得到了改进。
不兼容的配置更改:
audit_log_policy
可以在服务器启动时设置(和以前一样),但在运行时现在是只读变量。这是由于引入了两个新的系统变量audit_log_connection_policy
和audit_log_statement_policy
,它们可以更好地控制日志记录策略,并且可以在启动时或运行时进行设置。如果您在启动时继续使用audit_log_policy
而不是其他两个变量,服务器将使用它的值来设置这些变量。有关详细信息,请参阅 配置审计日志记录特征和 审计日志插件状态变量。
-
MySQL 5.6 Commercial Server 的链接 OpenSSL 库已从版本 1.0.1g 更新到版本 1.0.1h。据报道,1.0.1g 之前(包括 1.0.1g)的 OpenSSL 版本容易受到 CVE-2014-0224 的攻击。
此更改不影响 Oracle 生成的 MySQL Server 5.6 的 MySQL Community 版本,它使用 yaSSL 库。(漏洞#18917858)
复制: 新的系统变量
binlogging_impossible_mode
控制如果服务器无法写入二进制日志时发生的情况,例如,由于文件错误。为了向后兼容,默认为binlogging_impossible_mode
,IGNORE_ERROR
这意味着服务器记录错误、停止记录并继续更新数据库。将此变量设置为ABORT_SERVER
使服务器停止记录并在无法写入二进制日志时关闭。(错误#51014,错误#11758766)5.6.17 引入的新 Debian7、Ubuntu12.04 和 Ubuntu14.04 发行版支持现在带有特定于平台的打包源,位于
packaging
目录下,在deb-precise
、deb-wheezy
和deb-trusty
目录中。(漏洞 #19020385)CMake支持已更新以处理 CMake版本 3。(缺陷 #19001781)
已从源代码中删除对 LinuxThreads 的支持。LinuxThreads 在 Linux 2.6 中被 NPTL 取代。(错误#17007529、错误#72888、错误#18913935)
默认情况下,mysql_install_db
my.cnf
使用模板在安装基目录中创建一个 文件。这对于某些部署来说可能是不受欢迎的。为了抑制这种行为, mysql_install_db现在支持--keep-my-cnf
保留任何现有my.cnf
文件而不创建新my.cnf
文件的选项。(错误#71600,错误#18205019)
-
重要变更;复制: 如果一条
DROP TABLE
语句包含常规(非临时)表和临时表,或者如果它包含同时使用事务和非事务存储引擎的临时表,则在将其发送到二进制日志之前可能会被分成多条语句。现在,当使用 GTID 时,DROP TABLE
不再允许影响这些表组合的语句,除非gtid_next
系统变量的值为AUTOMATIC
. 这是因为,在服务器上启用DROP TABLE
GTID 的情况下,在刚才描述的情况下发出一个,而每个语句只有一个 GTID 关联(SQL 线程执行以下操作SET
gtid_next='
) 当没有足够的 GTID 分配给原始 . 之后的所有结果语句时,会导致问题uuid
:number
'DROP TABLE
。由于
DROP TABLE
语句相对于当前事务的行为因表特征而异,因此语句可能会被拆分,如下所示:DROP TABLE
立即提交常规(非临时)表DROP TABLE
使用事务存储引擎的临时表的一部分与当前事务一起提交(以下COMMIT
)DROP TABLE
立即提交使用非事务性存储引擎的临时表
在单个语句中命名所有这三种类型的表 会导致 MySQL 服务器在二进制日志
DROP TABLE
中将原始语句分成三个单独 的语句。DROP TABLE
如果启用了 GTID 但 的值gtid_next
不是AUTOMATIC
,则发出DROP TABLE
混合前面描述的任何表类型的语句会导致服务器没有足够数量的 GTID 将所有结果语句写入二进制日志。此外,DROP TABLE IF EXISTS
总是为语句中指定的所有表写入二进制日志,即使某些或所有表不存在。因为临时表的处理方式
DROP TABLE
取决于它们是使用事务性存储引擎还是非事务性存储引擎,所以任何由DROP TEMPORARY TABLE
不存在的语句命名的表都被假定为事务性的。这意味着,如果DROP TEMPORARY TABLE
在 master 上发布了一个具有两个非事务性临时表的表,它只会写入一个DROP TABLE
语句命名两个表。如果其中一个临时表不再存在于slave上,那么当SQL线程执行该语句时,由于它影响了一个非事务性(但存在的)临时表和一个不存在的事务性临时表,它试图将其分成多个语句;这会导致问题,因为 SQL 线程只有一个 GTID 用于原始语句,但必须在二进制日志中DROP TABLE
写入两个语句。DROP TABLE
此外,当从服务器检测到主服务器已重新启动后删除临时表时,它会
DROP TABLE
为每个伪线程和每个数据库记录一个语句,但在单个DROP TABLE
语句中使用事务和非事务存储引擎组合临时表。现在,如果
gtid_next
设置为uuid
:number
值,我们会在客户端会话中抛出一个错误,并DROP TABLE
发出一条混合了前面描述的任何表类型的语句。此外,我们现在将不存在的临时表分组,并假设它们只有在语句删除至少一个事务性临时表时才是事务性的。如果没有事务性临时表被删除,任何不存在的临时表都被假定为非事务性临时表。
如果主服务器重新启动,从服务器现在还可以正确处理临时表的删除。(漏洞 #17620053)
InnoDB: 打开具有数千个子表的父表可能会导致信号灯等待时间过长。(漏洞 #18806829)
InnoDB: 在mysqld
innodb_data_file_path
启动时,使用该选项指定多个数据文件 在数据写入第二个文件后返回fsp 标头错误中的 Space id 。(漏洞#18767811)InnoDB: 对于单项全文搜索,已删除的文档包含在逆向文档频率 (IDF) 计算中。(错误#18711306,错误#72548)
-
InnoDB:
DELETE
对具有全文搜索索引的表 的(漏洞 #18683832)参考资料:另请参阅:Bug #14639605。
InnoDB: 当
InnoDB
构建为共享库时,尝试加载InnoDB
全文搜索 (FTS)INFORMATION_SCHEMA
插件将失败,并出现无法打开共享库 'ha_innodb.so'错误。(缺陷 #18655281,缺陷 #70178)InnoDB: 调用memcached
flush_all
命令时,InnoDB
尝试初始化连接和事务。如果事务处于TRX_STATE_NOT_STARTED
状态,InnoDB
未能设置CONN_DATA->CRSR_TRX
为 NULL,导致严重错误。(漏洞#18652854)InnoDB: MySQL 5.6.5 中引入的回归会导致在系统表空间(空间 0)中创建全文搜索索引表,即使
innodb_file_per_table
已启用。(漏洞#18635485)InnoDB:
InnoDB
memcached 插件将 在plugin_del
不获取lock_plugin
互斥锁的情况下调用。此错误修复还解决了ib_cursor_delete_row
. (漏洞 #18409840)-
InnoDB: Bug#16418661 的修复 启动代码
buf_flush_list()
的逻辑InnoDB
(错误#17798076,错误#70899)参考资料:此问题是 Bug #16418661 的回归。
-
InnoDB: 竞争条件
fts_get_next_doc_id
导致Duplicate FTS_DOC_ID和 Cannot find index FTS_DOC_ID_INDEX in InnoDB index translation table错误。(错误#17447086,错误#70311)参考资料:另请参阅:Bug #16469399。
InnoDB: 由于不同处理器类型的内存顺序不同,一些互斥锁和读写锁标志的读取不一致。(缺陷 #11755438,缺陷 #47213)
分区: 从主键中有多个列并按 分区的表中进行选择,主 键定义中列出的最后一个(最右边的)列返回了不正确的结果。(缺陷 #17909699,缺陷 #71095)
LIST COLUMNS(
R
)R
复制: mysqlbinlog
--raw
没有检查由失败的写入引起的错误,这可能导致二进制日志的静默损坏。现在在这种情况下它会因错误而停止。(错误#18742916,错误#72597)复制: 当一个从属工作线程试图执行一个太大的语句时,产生的错误导致崩溃。现在在这种情况下,错误会被截断以适应缓冲区的大小。(漏洞#18563480)
复制: 当使用基于行的复制时,更新或删除主服务器上不存在的行会导致从服务器在尝试处理更改时失败。
InnoDB
缺少主键的表会出现此问题(错误#18432495,错误#72085)复制:
LOAD DATA
当写入二进制日志时, 引号并不总是被正确处理 (缺陷 #18207212,缺陷 #71603)复制: 从 MySQL 5.6.20 开始,当用户指定的
AUTO_INCREMENT
值超出当前值与当前AUTO_INCREMENT
值和影响行数的总和之间的范围时,它会被正确复制。在以前的版本中,即使用户指定的AUTO_INCREMENT
值超出范围,从站也会生成错误。(错误#17588419,错误#70583)复制: 在 Windows 上,如果错误日志文件已从活动的 MySQL 服务器中删除(丢失) ,则mysqldump会失败。(漏洞 #17076131)
-
复制: 客户端应用程序应该能够
BINLOG_DUMP_NON_BLOCK
在初始握手数据包 (COM_BINLOG_DUMP
) 中设置标志。当服务器发送二进制日志中的最后一个事件时,连接到发出COM_BINLOG_DUMP
未设置标志的服务器的客户端不会收到 EOF,这会导致连接阻塞。这个标志在 MySQL 5.6.5 中被错误地删除,现在在当前版本中恢复了。作为此修复的一部分, 向mysqlbinlog
--connection-server-id
添加了一个新选项。客户端可以使用此选项来测试 MySQL 服务器是否存在此问题。(错误#71178,错误#18000079) 复制: 在半同步复制处于活动状态时卸载并重新安装半同步复制插件会导致复制失败。如果半同步复制处于活动状态,插件现在会检查它们是否可以卸载并产生错误。要卸载主端插件,必须没有半同步从属。要卸载从端插件,必须没有运行的半同步 I/O 线程。(错误#70391,错误#17638477)
复制:由于类型不兼容,来自不同 MySQL 版本 的包含时间类型字段(例如 、 和 )的表的
TIMESTAMP
复制DATETIME
失败。MySQL 5.6.4 中添加的小数格式未正确转换。您现在可以根据 变量以任一格式正确复制 a。(错误#70124,错误#17532932)TIME
TIMESTAMP
TIMESTAMP
TIMESTAMP
slave_type_conversions
-
复制: 当发生以下事件时,一组参与获取锁的线程可能会死锁:
转储线程从 slave 重新连接;在 master 上,一个新的转储线程试图杀死僵尸转储线程;获得了线程的
LOCK_thd_data
,它即将获得LOCK_log
。正在执行的应用程序线程显示二进制日志,已获取
LOCK_log
和即将获取LOCK_index
。应用程序线程正在执行
PURGE BINARY LOGS
;已经获得LOCK_index
,即将获得LOCK_thread_count
。应用程序线程正在执行
SHOW PROCESSLIST
(或SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
)、已获取LOCK_thread_count
和即将获取僵尸转储线程的LOCK_thd_data
.
这导致 4 个线程按照与此处列出的线程相同的顺序死锁。
出现这个问题是因为有 和 的排序规则,还有 和
LOCK_log
的排序规则, 但是没有跨越这两组锁的排序规则。这是因为在函数的整个生命周期内调用的内部函数以及获取和释放每个线程 的 . 现在这个函数从全局线程列表中获取线程的副本并对它们执行遍历,并且仅在释放之后 。在此遍历期间,从全局线程列表中删除被阻止使用LOCK_index
LOCK_thread_count
LOCK_thd_data
mysqld_list_processes()
SHOW PROCESSLIST
LOCK_thread_count
LOCK_thd_data
LOCK_thread_count
LOCK_thd_remove
这样,否则会因删除而被销毁的副本在遍历期间仍然有效。此处显示了此修复后的锁定顺序:LOCK_thd_remove -> LOCK_thd_data -> LOCK_log -> LOCK_index -> LOCK_thread_count
(漏洞 #69954,漏洞 #17283409)
参考资料:另请参阅:Bug #73475、Bug #19364731、Bug #19365180。
-
当 a在其列表
SELECT
中的联接中包含派生表并且列表包含 时, 即使基础结果集为空,也会返回 1。(漏洞#18853696)FROM
SELECT
COUNT(DISTINCT)
COUNT()
参考资料:这个问题是 Bug #11760197 的回归。
启用优化器跟踪可能会导致服务器退出子句中带有子查询的查询
HAVING
。(漏洞 #18791851)SHA 和 MD5 函数对使用内部
filename
字符集的操作失败,并可能导致服务器退出。(漏洞#18786138)传递给mysqldump的大参数可能导致缓冲区溢出和程序退出。(漏洞#18779944)
元数据更改后,重新准备的触发器可能会导致服务器退出或修剪不正确的分区。(漏洞 #18684393)
ALTER TABLE
在分区表上可能会导致将错误的存储引擎写入表的.frm
文件并以SHOW CREATE TABLE
. (漏洞 #18618561)编译器标志未传递给 DTrace,导致 32 位构建在 64 位平台上交叉编译时出现问题。(漏洞#18593044)
将
max_heap_table_size
系统变量设置为较大值 (20GB) 时,创建临时表或使用MEMORY
存储引擎创建表会导致服务器退出。(漏洞#18463911)如果 MySQL 是使用该
-DINSTALL_LIBDIR=lib64
选项 构建的,如果 MySQL 包被解压到具有不同安装前缀的位置,则mysql_config不起作用。此外,mysql_config不适用于某些 RPM 构建,因为它使用了不正确的安装前缀。(漏洞 #18382225)对于调试版本,
0x00
全文查询字符串中使用ujis_japanese_ci
、utf8mb4_turkish_ci
或eucjpms_bin
排序规则的字符可能引发断言。(漏洞#18277305)-
yaSSL 代码在证书解码中有一个差一错误,可能导致缓冲区溢出。
yaSSL 代码有一个
opendir()
没有相应的closedir()
. (错误#18178997,错误#17201924) mysqladmin 密码屏蔽了命令行上给出的旧密码,但没有屏蔽新密码。(漏洞 #18163964)
对于表的全文查询
InnoDB
,尝试访问已删除的文档 ID 可能会导致服务器退出。(漏洞 #18079671)MyISAM
临时文件可用于发起代码执行攻击。(漏洞 #18045646)对于从
events_statements_current
Performance Schema 表中选择的查询,添加ORDER BY
子句可能会产生不正确的结果。(漏洞 #17729044)如果查询同时具有
MIN()/MAX()
和
(例如,aggregate_function
(DISTINCT)SUM(DISTINCT)
)并且使用松散索引扫描执行,则结果值MIN()/MAX()
设置不正确。(漏洞 #17217128)对于
UNION
语句,行检查值计算错误。ROWS_EXAMINED
这表现为Performance Schema 语句表(例如 )列的 值过大events_statements_current
。(漏洞 #17059925)客户端可以根据连接错误信息的内容判断一个账号是否存在。(错误#16513435、错误#17357528、错误#19273967)
TINYBLOB
在列中的 a或GEOMETRY
列 的前缀上创建索引时可能会引发断言InnoDB
。(错误#16368875、错误#18776592、错误#17665767)使用非多字节算法跳过多字节字符串中的前导空格可能会导致服务器退出。(错误#12368495,错误#18315770)
MySQL.prefPane
OS X 10.8 及更高版本的二进制 MySQL 发行版现在将和 工具作为可配置选项 捆绑MySQLStartupItem.pkg
到主包中,而不是单独的包。(错误#74123,错误#19701502)-
新的CMake选项
SUNPRO_CXX_LIBRARY
启用链接libCstd
而不是stlport4
在 Solaris 10 或更高版本上。这仅适用于客户端代码,因为服务器依赖于 C++98。用法示例:cmake -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd
(错误#72352,错误#18605389)
当给选项一个空参数时, mysql_config_editor
--login-path
退出。(错误#71837、错误#18311024、错误#18830493)使用 RPM 包进行升级可能会更改安装目录的所有权。(错误#71715,错误#18281535)
如果代理用户密码已过期,代理用户将无法执行语句。(错误#71337,错误#18057562)
MySQL 未使用 Bison 3 进行编译。(Bug #71250、Bug #18017820、Bug #18978946)
INSTALL PLUGIN
如果三个线程同时执行,SHOW VARIABLES
, 和 , 可能会发生死锁mysql_change_user()
。(错误#71236、错误#18008907、错误#72870、错误#18903155)MIN()
如果or 引用的列上有一个谓词,MAX()
并且该谓词不存在于复合索引中早期关键部分的所有析取中,松散索引扫描将返回不正确的结果。(错误#71097,错误#17909656)-
客户端自动重新连接对链接到 的客户端不起作用
libmysqlclient
,即使 已MYSQL_OPT_RECONNECT
启用。此外,如果在过期
FEDERATED
后访问表 ,则会在没有尝试重新建立连接的情况下发生错误。(错误#70026、错误#17309863、错误#14874、错误#11745408)wait_timeout
Lost connection to MySQL server
多个测试和配置文件的文件权限和行尾更加一致,以避免来自包检查器的警告。(错误#68521、错误#16415173、错误#16395459、错误#68517、错误#16415032、错误#71112、错误#17919313、错误#71113、错误#17919422)
使用cmake -DWITHOUT_SERVER 配置以在没有服务器的情况下构建客户端对于源代码树之外的构建失败。(缺陷 #66000,缺陷 #14367046)
对于在 上定义的视图
UNION
,服务器可能会创建无效的视图定义。(错误#65388、错误#14117018、错误#72018、错误#18405221)-
big_tables
启用后,在非重复键上使用具有常量相等条件的简单连接的查询 返回COUNT(DISTINCT)
不正确的结果。(错误#52582,错误#11760197)参考资料:另请参阅:Bug #18853696。