从 MySQL Server 5.7.12 开始,我们引入了快速插件的概念。开箱即用的 5.7.12 遵循与我们当前发布过程相同的稳定性承诺,但它还允许非常轻松地安装具有附加功能的插件。遵循此概念随 MySQL Server 5.7.12 一起发布的第一个插件是新的 X 插件,它公开了一个称为 X 协议的新通信协议。
X 协议的扩展功能使我们能够在我们的 MySQL 连接器和客户端应用程序中提供新的 X DevAPI,例如新的MySQL Shell。X DevAPI的目标 是支持称为文档集合的新模式对象类型以及关系和组合文档存储/关系功能。现在,开发人员、设计人员和 DBA 可以部署 MySQL 数据库来实现文档存储、关系或混合文档/关系模型。有关如何开始使用 MySQL 作为文档存储的文档,请参阅 使用 MySQL 作为文档存储。
-
不兼容的更改: 要加载密钥环插件,
--early-plugin-load
使用该选项。以前,默认--early-plugin-load
选项值是keyring_file
插件库文件的名称。现在默认值为空。重要的InnoDB
静态数据加密要求在 初始化keyring_file
之前加载插件 ,因此默认 值的这种更改导致从 5.7.11 升级到 5.7.12 或更高版本时不兼容。拥有加密 表空间的管理员必须采取明确的措施来确保插件的持续加载 :使用命名插件库文件的选项启动服务器。例如,在插件库文件后缀为 的平台上, 在服务器文件中使用这些行 :InnoDB
--early-plugin-load
InnoDB
keyring_file
--early-plugin-load
.so
my.cnf
[mysqld] early-plugin-load=keyring_file.so
在其他平台上,根据需要调整文件名后缀。有关详细信息,请参阅MySQL 密钥环。
(缺陷 #80413,缺陷 #22748738)
MySQL 企业版现在包含一个
keyring_okv
插件,该插件使用 Oracle Key Vault 作为密钥环存储的后端。有关详细信息,请参阅 MySQL 密钥环。
InnoDB:静态 数据
InnoDB
加密功能现在支持 Oracle Key Vault 进行加密密钥管理。Oracle Key Vault 支持依赖keyring_okv
于 MySQL 企业版中提供的插件。安全可靠的加密密钥管理解决方案(如 OKV)对于安全性和符合各种安全标准至关重要。有关更多信息,请参阅InnoDB 静态数据加密。-
用于 MySQL Commercial Server 的链接 OpenSSL 库已更新至版本 1.0.1s。有关此版本中修复的问题的说明,请参阅 http://www.openssl.org/news/vulnerabilities.html。
此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(错误#22685885,错误#22923458)
对于具有许多
OR
条件的查询,优化器现在的内存效率更高,并且不太可能超过range_optimizer_max_mem_size
系统变量施加的内存限制。此外,该变量的默认值已从 1536000 提高到 8388608。(Bug #79450,Bug #22283790)
-
创新数据库;分区:
INSERT
针对具有生成列的分区表的SELECT
语句InnoDB
并不总是得到正确处理。(漏洞 #22444530)参考资料:另请参阅:Bug #21776494、Bug #21824564、Bug #21864838。
InnoDB: 当复制从属试图访问加密表时,启动时返回错误。用于组成主密钥名称的服务器 UUID 未持久保存到表空间数据文件中,导致使用了不正确的主密钥。(漏洞 #22912582)
InnoDB: 在调试版本中,不必要的
buf_block_align()
调用可能会导致违反锁定顺序。由于同一buf_block_align()
调用,DML 操作导致页面不匹配断言。(错误#22709463,错误#21321238)InnoDB:
ALTER TABLE ... ADD COLUMN
对具有虚拟列的表 的(漏洞 #22650296)InnoDB: 表空间加密代码中不必要的比较导致编译器警告。(缺陷号 22645816)
InnoDB:
INNODB_SYS_TABLESPACES
可能会报告在数据目录之外创建的通用表空间的不正确ALLOCATED_SIZE
和FILE_SIZE
值。该i_s_dict_fill_sys_tablespaces()
函数生成了不正确的远程文件路径。(漏洞 #22590095,漏洞 #80070)InnoDB: 在调试版本中,对具有虚拟列的表的更新操作引发断言。(漏洞#22572997)
InnoDB: 对代码进行了修改,以
InnoDB
在使用 Microsoft Visual Studio 2015 进行编译时处理警告。(Bug #22542547,Bug #79964)InnoDB:在多个连接上 运行
REPLACE
操作导致挂起。(缺陷 #22530768,缺陷 #79185)InnoDB: 与表空间加密相关的操作导致 FreeBSD 挂起。(漏洞 #22520464,漏洞 #79901)
InnoDB:
InnoDB
MySQL 在同步 全文索引缓存 时停止(错误#22516559、错误#16510576、错误#73816)-
InnoDB: 操作
CREATE TABLE ... DATA DIRECTORY
创建表失败而innodb_flush_method
设置为O_DIRECT
。(缺陷 #22180006,缺陷 #79200)参考:这个问题是 Bug #21113036 的回归。
InnoDB: 在调试版本中,缓冲池大小调整操作导致分段违规。
buf_pool_resizing
变量未受保护。(缺陷号 22179317)InnoDB: 该
innodb_open_files
设置可能超过打开的文件限制。(漏洞 #22111472)InnoDB:
InnoDB
尝试crc32
校验和验证而不是innodb
在crc32
校验和验证失败之后,导致重复crc32
校验和验证尝试。校验和验证顺序现在动态优化。感谢 Daniel Black 提供的补丁。(错误#79725,错误#22452597)复制: 当没有二进制日志的从站连接到组复制主站时,它失败并显示Error running query
SHOW SLAVE STATUS
,但是从表的输出或表中 没有关于失败的信息replication_applier_status_by_worker
。(缺陷号 22699395)复制:由于未初始化存储库, 设置
relay_log_recovery=1
在恢复期间生成错误。(漏洞 #22523554)-
复制: 发出
STOP SLAVE
导致从服务器读取数据包的虚假消息写入错误日志期间丢失与 MySQL 服务器的连接。通过此修复,当与主站的连接丢失时,将abort_slave
检查标志并仅在未设置标志时打印错误消息。(缺陷 #22305605,缺陷 #79504)参考资料:另请参阅:Bug #12977988、Bug #22290309。
-
Replication: 当二进制日志被禁用时,
gtid_next
当提交一个BEGIN
语句导致的空事务时指定的GTID被保存在gtid_executed
不应该的时候。启用二进制日志时不会发生这种情况。现在,
gtid_next
为当前会话设置when 时, 无论是否启用二进制日志记录,都会在任何事务中BEGIN
引发 错误,因为此语句会导致隐式提交。ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET
在这种情况下,由 指定的 GTIDgtid_next
不会保存在gtid_executed
. (缺陷号 22130929) 复制: 当复制被配置但没有在从服务器上启动时,变量
currently_executing_gtid
没有正确初始化,但是如果replication_applier_status_by_worker
查询性能模式表会使用它,导致断言失败和指针问题。通过此修复,该变量现在可以在Relay_log_info
对象构造时正确初始化。(缺陷 #21953132,缺陷 #78722)复制:
RESET SLAVE ALL
即使在 等待事务被应用master_pos_wait
也wait_until_sql_thread_after_gtid
当函数尝试访问已删除的通道时,这可能会导致 MySQL 服务器退出。现在,添加了一个通道引用计数器,如果在函数运行时不应删除通道,则该计数器会增加。RESET SLAVE ALL
将等待没有引用,然后它将删除频道。(缺陷 #21842399,缺陷 #78445)复制: 当 时
relay_log_recovery=1
,从属服务器在其初始化时仍尝试扫描中继日志文件以更新Retrieved_Gtid_Set
事务解析器状态,这是不必要的资源浪费,因为从属 I/O 线程将被初始化为SQL 线程在新中继日志文件中的位置。通过此修复,从属服务器在relay_log_recovery=1
. (缺陷 #21798355,缺陷 #78352)-
复制:
--gtid-mode=ON
当二进制日志被禁用时, XA 事务处理不正确 这是因为在主从服务器上,有时不会保存 GTID 状态,有时也不会清理 GTID 所有权。此修复可确保现在正确执行这些步骤。(缺陷号 21618727)参考资料:另请参阅:Bug #22165138、Bug #77740、Bug #21452916。
复制: 当一个多线程slave因错误停止时,同样的错误信息被打印了3次。现在,SQL 线程的 kill acceptance 状态被保存下来,并且只打印一次。(缺陷 #21198611,缺陷 #77237)
复制: 当使用
relay_log_info_repository
设置为TABLE
,从属应用程序线程无法将 XA 事务写入工作配置。(缺陷号 20988291)复制: mysqlbinlog --verbose将BINARY和 VARBINARY数据显示 为普通字符串,导致数据中的任何单引号( “ ' ”)或反斜杠( “ \ ”)被打印出来,这让用户感到困惑,并且在反斜杠的情况下,导致跳过下一个字符。此修复使mysqlbinlog打印字符的十六进制值(单引号为 “ \x27 ” ,反斜杠为“ \x5c ”)。(缺陷号 20836250)
复制:当变量 设置为“ ”时 测试用例
main.merge
失败, 因为服务器试图在子表打开之前获取用于创建表的信息。通过此修复,服务器将跳过获取表中情况的信息。(缺陷 #20574550,缺陷 #75976)binlog_format
ROW,
复制: 当服务器运行
relay_log_info_repository=TABLE
并启用该--super-read-only
选项时,导致更新从属信息表的语句(例如STOP SLAVE
orCHANGE MASTER TO
)导致“STOP SLAVE”失败:1290:MySQL 服务器正在运行错误,阻止该语句被执行。该修复确保无论 和 的设置如何,都允许复制read_only
操作super_read_only
。(错误#78963,错误#22097534)复制:mysqlbinlog 的 Valgrind 测试揭示了一些内存泄漏。(错误#78223、错误#21697461、错误#78966)
-
复制: 如果对主服务器的查询产生错误并且部分结果被写入二进制日志,例如由于
DROP TABLE IF EXISTS
应用于多个表的语句会破坏外键约束,当配置了复制过滤器的从服务器遇到查询时,它可以被错误地二进制记录。这导致了错误,例如:Last_SQL_Error:查询在主从上导致了不同的错误。master 上的错误:消息(格式)='无法删除或更新父行:外键约束失败'错误代码=1217;从站错误:实际消息='无错误',错误代码=0。默认数据库:'db1'。Query: 'DROP TABLE IF EXISTS `table1` /* 由服务器生成 */'
此错误需要两个修复程序。
如果
DROP TABLE
用于删除单个表的语句失败,为避免导致此错误的部分结果,查询不会写入二进制日志。如果DROP TABLE
用于删除表列表的语句失败,则它生成的任何部分结果都会写入二进制日志并显示错误。当从站接收到按预期生成错误的查询但由于复制过滤器而被跳过时,从站错误地检查了错误。错误 #76493 的修复确保不会发生这种来自主站的预期错误与来自从站的实际错误的比较。
(错误#77684,错误#21435502)
参考资料:另请参阅:Bug #20797764、Bug #76493。
JSON:由错误数据 引发
JSON_KEYS()
并JSON_EXTRACT()
包含错误数据的错误消息。(错误#78699,错误#22026278)-
RTRIM()
在大字符串上可能会非常慢。(缺陷号 22884187)参考资料:此问题是 Bug #18315770、Bug #12368495 的回归。
客户端握手处理期间可能会发生整数溢出,从而导致服务器退出。(漏洞 #22722946)
查询计划构造函数中缺少初始值设定项导致 Valgrind 警告。(漏洞 #22573117)
当视图名称包含空格字符时, mysqlpump失败(语法错误)。现在引用视图名称。(漏洞 #22505474)
UNHEX()
使用无效参数可能会导致警告消息中出现垃圾字符。(缺陷号 22358933)X509 证书中不正确的主机名检查可能会导致中间人攻击。(错误#22295186,错误#22738607)
对于调试版本,当在插入重复键期间更新具有空字符串生成表达式的索引不可空生成列时,优化导致服务器无法找到重复索引,从而引发断言。(缺陷号 22195364)
布尔模式全文搜索导致分段错误。(漏洞 #22176795)
对使用的生成列的查询
WITH ROLLUP
可能会引发断言。(漏洞 #22131343)对于使用派生表的准备好的语句,在检查语句权限时可以在执行时引发断言。(漏洞 #22108567)
在杀死访问它的连接的同时选择和刷新
FEDERATED
表可能会导致服务器退出。(漏洞 #21918190)对于调试版本,当使用连接缓冲的查询和插入连接缓冲区的表之一通过对包含虚拟列的索引使用动态范围扫描进行访问时,将列写入连接缓冲区时会发生 Valgrind 错误。(缺陷号 21872184)
在反复卸载和安装
audit_log
插件后,服务器可能会挂起。(缺陷号 21796658)使用
LOCK TABLES
有效的语句,访问 Performance Schema 表可能会失败,SHOW STATUS
就像show_compatibility_56=OFF
. (缺陷号 21789221)GRANT PROXY
在更改系统表的定义后 执行语句mysql.user
可能会导致服务器退出。(缺陷号 21699037)某些错误消息包含生成它们的 SQL 语句的一部分,可能会暴露数据。(漏洞 #21682356)
尽管可以使用前缀创建非
#sql
临时表,但性能模式假定使用此前缀命名的表是临时的,可以忽略。Performance Schema 现在使用名称以外的表属性来标识临时表。(错误#21105475、错误#22532368、错误#79934)插件执行的帐户过滤
audit_log
错误地使用了USER()
函数命名的帐户,而不是CURRENT_USER()
函数(后者是用于身份验证的帐户)。(错误#19509471、错误#22454245、错误#77553)NAME_CONST()
如果给出不正确的参数,可以返回 null。在某些情况下,这没有得到处理,可能会导致服务器退出。(错误#19143243,错误#26361149)NULL
对参数到准备好的语句的 字符集转换操作可能会导致服务器退出。(漏洞 #18823979)没有为具有相等条件的查询选择松散索引扫描。(漏洞 #18109609)
长的或复杂的 SQL 语句可能会导致解析器耗尽内存。新的
parser_max_mem_size
系统变量现在可以控制解析器可用的最大内存量。默认值对可用内存没有限制,但可以减小该值以防止出现内存不足的情况。(漏洞 #14744160)Valgrind 的警告
memory_free_noop()
被静音了。(缺陷 #80457,缺陷 #22782197)-m32
如果使用Solaris/Sparc 上 的选项构建,则 MySQL 服务器无法启动 ,因为init_delegates()
. (缺陷 #80445,缺陷 #22763880)头
plugin_keyring.h
文件拼错st_mysql_keyring
为st_mysql_keyring_file
. (缺陷 #80414,缺陷 #22748867)对于 Windows 上的共享内存连接,客户端库在互斥量上打开了一个句柄但没有关闭它。如果客户端仍然打开互斥锁句柄,则随后尝试在连接的另一端重新启动服务器会失败。(缺陷 #80234,缺陷 #22646779)
--early-plugin-load
指定选项时, mysqld尝试初始化使用该选项指定的插件--help
。(缺陷 #80077,缺陷 #22573767)ALTER USER IDENTIFIED WITH ...
使帐户密码过期,即使身份验证插件不支持密码过期。(错误#79999,错误#22551523)如果在服务器启动时未启用某些 Performance Schema 全局工具,则可能处于无法在运行时启用它们的状态。此限制已取消。受影响的工具包括
mutex
、rwlock
、cond
和socket
实例。感谢张英强提供补丁。(错误#79784、错误#22517278、错误#66515、错误#14532176)在服务器启动时设置
super_read_only
系统变量没有效果。(错误#79328,错误#22233503)-
这些
audit_log
插件问题已得到纠正:my_message()
从 处理程序 调用MYSQL_AUDIT_GENERAL_CLASS
导致无限递归。MYSQL_AUDIT_GENERAL_CLASS
针对处理程序返回非零 值的情况改进了诊断消息 。my_message()
从 处理程序 调用MYSQL_AUDIT_SERVER_STARTUP_CLASS
并没有像它应该的那样中止服务器启动。SHOW GLOBAL VARIABLES
为启用和禁用 的null_audit_abort_value
系统变量产生不同的输出 。show_compatibility_56
(错误#79079、错误#22136709、错误#79091、错误#22142166、错误#79092、错误#22142209、错误#21783798)
-
对于导致违反约束的操作,
INSERT
在 使用关键字时会报告错误而不是警告 。(缺陷 #78853,缺陷 #22037930)UPDATE
FOREIGN KEY
IGNORE
参考资料:另请参阅:Bug #23135731。
使用服务器会话服务,从没有 VIO 上下文的线程执行 SQL 语句可以引发断言。(错误#78734,错误#21959409)
CREATE VIEW
使用TIMESTAMPDIFF()
函数 withMICROSECOND
作为单位的语句导致不正确的视图定义。(错误#78506,错误#21877062)对于现有用户,
CREATE USER IF NOT EXISTS
产生错误而不是警告。同样,对于不存在的用户,ALTER USER IF EXISTS
产生错误而不是警告。(错误#78374,错误#21807286)对于某些查询,当范围扫描的成本相同或更低时,会在范围扫描上选择索引合并访问计划。(错误#77209,错误#21178196)
UNHEX()
可以尝试左移一个负数。(错误#73964,错误#19642015)EXPLAIN
forSELECT ... FOR UPDATE
语句获取锁。(错误#72858,错误#18899860)Processlist 状态信息未正确更新,
LOAD DATA
并且可能显示与 不同的状态executing
。(缺陷 #69375,缺陷 #16912362)