-
在 MySQL 5.7.8 中,MySQL 用户名的最大长度从 16 个字符增加到 32 个字符,但是忽略了这种增加的一些适用上下文。现在已应用最大用户名长度的其他更改:
-
这些
mysql
系统表列的大小增加了:和 表 的
definer
列event
proc
和 表 的
grantor
列procs_priv
tables_priv
在每种情况下,该列之前都定义为
CHAR(77)
,其中选择 77 以允许 包含最多 16 个字符的用户名、一个 字符和最多 60 个字符的主机名的字符串。现在每列都定义为 ,反映允许的用户名长度从 16 个字符增加到 32 个字符。user_name
@host_name
@
CHAR(93)
CHAR(77)
从到 的类似更改CHAR(93)
适用于DEFINER
这些INFORMATION_SCHEMA
表的列:EVENTS
,ROUTINES
,TRIGGERS
,VIEWS
。随着对INFORMATION_SCHEMA
表的更改,任何相应SHOW
语句的输出现在DEFINER
最多显示 93 个字符的值。受影响语句的示例:SHOW EVENTS
,SHOW TRIGGERS
,SHOW PROCEDURE STATUS
。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将更改合并到
mysql
系统数据库中。来自 MySQL 5.7.13 或更高版本且未运行mysql_upgrade的服务器继续允许前面提到的系统表中最多 77 个字符,并且 在那些 长度为 78 到 93 个字符ER_USER_COLUMN_OLD_LENGTH
的系统表上下文中会发生错误 给出。user_name
@host_name
-
-
构成 MySQL Enterprise Audit 基础的
audit_log
插件现在支持事件的细粒度过滤。这可以减少写入审计日志文件的日志条目数量,由于日志记录期间的写入操作较少,从而提高了整体性能。它还在可读性和处理时间方面简化了后续审计日志处理。细粒度审计日志过滤是基于规则的,使用存储过滤器定义的表和一组启用过滤器操作的可加载函数来实现。为了简化与
audit_log
插件一起安装表和函数,现在提供了一个安装脚本。有关详细信息,请参阅 安装或卸载 MySQL Enterprise Audit和 审计日志过滤。默认情况下,审核日志过滤现在不记录任何用户的可审核事件。这与遗留审计日志行为(MySQL 5.7.13 之前)不同,后者记录所有用户的所有可审计事件;要产生日志一切行为,请参阅安装说明。
参考资料:另请参阅:Bug #21464781、Bug #71855。
在安装了 systemd 支持的平台上,systemd 具有管理多个 MySQL 实例的能力。有关详细信息,请参阅使用 systemd 管理 MySQL 服务器。因此, mysqld_multi和 mysqld_multi.server没有安装,因为它们是不必要的。(缺陷 #81093,缺陷 #23134620)
MySQL Server 现在包括一个用于密钥环密钥管理的 SQL 接口,实现为一组可加载函数,这些函数访问内部密钥环服务提供的函数。有关详细信息,请参阅 通用密钥环密钥管理函数。有关函数调用的密钥环服务函数的信息,请参阅密钥环服务。有关一般密钥环信息,请参阅MySQL 密钥环。
-
用于 MySQL Commercial Server 的链接 OpenSSL 库已更新至版本 1.0.1t。有关此版本中修复的问题的说明,请参阅 http://www.openssl.org/news/vulnerabilities.html。
此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(缺陷号 23229564)
X 插件工作线程的最小数量下降到低于配置的线程数量
mysqlx_min_worker_threads
。(漏洞 #23074173)在安装 X Plugin 的
DROP USER
过程中,内部用户的语句被添加到二进制日志中,而匹配的CREATE USER
语句则没有。这导致复制错误,因为内部用户在从站上不存在。该修复程序可确保该DROP USER
语句不会添加到二进制日志中。(缺陷号 22989849)例如,使用方法链接对结果进行分组时发生错误
Crud.Find({ name:$.name, count:count(*) }).GroupBy($.name);
。(缺陷号 22950240)X 插件线程在性能模式表中注册为
thread/sql/daemon_plugin
. 这已更改为thread/mysqlx/worker
。(漏洞 #22901644)配置a
Mysqlx_idle_worker_thread_timeout
时,一旦超时完成,工作线程在它们本应空闲时消耗 100% 的 CPU。(漏洞 #81236,漏洞 #23204368)客户端断开连接记录为
EOF
. 日志消息已改进为Peer disconnection
. (漏洞 #81199,漏洞 #23178878)
-
JSON: 此版本添加了一个不加引号的提取运算符
->>
,有时也称为内联路径运算符,用于JSON
存储在 MySQL 中的文档。new 运算符与 operator 类似->
,但也会对值执行 JSON 取消引用。对于一个 JSON 列mycol
和 JSON 路径表达式mypath
,下面三个表达式是等价的:JSON_UNQUOTE(mycol
->
"$.mypath")
mycol->>"$.mypath"
->>
运算符可以在任何JSON_UNQUOTE(JSON_EXTRACT())
允许 的SQL 语句中使用。这包括(但不限于)SELECT
列表、条款和WHERE
条款 。HAVING
ORDER BY
GROUP BY
有关详细信息,请参阅 搜索 JSON 值的函数和 JSON 路径语法。(错误#78736,错误#21980346)
为了更好地将输出与多个语句分开, 现在当输出目标不是文件时
mysqltest
刷新发送到 的输出。stdout
以前,刷新仅发生在文件输出中。(漏洞 #21435906)MySQL 发行版中
tcmalloc
包含的库版本非常旧。它已被删除,不再包含在 MySQL 中。(缺陷 #80994,缺陷 #23068660)C 客户端库中的
my_make_scrambled_password()
函数在 MySQL 5.7 早期受到限制(不导出到客户端程序)。该函数再次对客户端程序可见。(错误#80974,错误#23061746)可以使用
ALTER TABLE
来更改列的默认值col_name
,这可能会更改引用该列的生成列表达式的值 。因此, 如果任何生成的列表达式使用 ,更改列定义的操作现在会导致表重建 。(缺陷 #80299,缺陷 #22680839)DEFAULT(
col_name
)ALTER TABLE
DEFAULT()
-
InnoDB: 回滚操作与涉及虚拟生成列的操作同时运行导致服务器退出。(漏洞 #23313102)
参考:这个问题是 Bug #21869656 的回归。
InnoDB:针对
InnoDB
memcached插件 纠正了潜在的缓冲区溢出问题 (缺陷号 23187607)InnoDB:在具有虚拟列的表上
ALTER TABLE
添加 的AUTO_INCREMENT
(漏洞 #23052231)InnoDB: 在被更高优先级事务异步回滚的事务中执行的语句导致死锁错误和随后的复制失败。(错误#23021168,错误#80898)
InnoDB:
ALTER TABLE
试图添加虚拟生成列和全文索引的操作引发了断言 。(漏洞 #23014521)InnoDB: 在后台索引缓存同步期间释放了全文索引缓存。(缺陷号 22996488)
InnoDB: 全文索引操作引发断言。(漏洞 #22963169)
InnoDB: 内存被不必要地分配给 I/O 插槽,导致明显的内存泄漏。(缺陷 #22956469,缺陷 #80772)
InnoDB: 尝试
ALTER TABLE
创建包含生成列的键时,操作引发断言。(漏洞 #22951879)InnoDB: 由于无效选项导致的启动失败导致服务器在随后的重启后退出。
innobase_start_or_create_for_mysql
未检查函数返回的错误 (缺陷 #22939581,缺陷 #80761)InnoDB:
ALTER TABLE ... IMPORT TABLESPACE
在与先前操作不同的会话中运行时,对包含加密表的文件每表表空间的操作 失败ALTER TABLE ... DISCARD TABLESPACE
。(缺陷 #22918999,缺陷 #80708)InnoDB:
FLUSH TABLES
对具有废弃表空间的表 的(漏洞 #22899690,漏洞 #80669)InnoDB: 涉及具有虚拟列的表的 DML 操作引发了断言。(缺陷号 22899305)
InnoDB: 无效读取
innobase_get_computed_value()
引发了 Valgrind 错误。(漏洞 #22898168,漏洞 #80667)InnoDB:使用该属性
ALTER TABLE ... ADD INDEX
创建的表不允许 在线 DDL 操作ENCRYPTION
(缺陷号 22897921)InnoDB:
InnoDB
memcached代码假定该htonll()
函数在 OS X 上不存在,导致在 OS X 10.10 及更高版本上构建失败。(漏洞 #22865112)InnoDB: 当存在加密表时,以只读模式启动服务器失败。
fil_encryption_rotate()
当服务器以只读模式启动时,不会跳过对的调用 (漏洞#22723797)InnoDB: R 树清除操作引发断言。(缺陷 #22698076,缺陷 #80327)
InnoDB:
INSERT
对具有FULLTEXT
索引和 的FTS_DOC_ID
失败,因为插入的 值FTS_DOC_ID
之间允许的间隙为避免此问题,最大已用值和新FTS_DOC_ID
之间允许的差距 从 10000 提高到 65535。(缺陷 #22679185)FTS_DOC_ID
FTS_DOC_ID
InnoDB: 错误地允许透明页面压缩的验证代码
innodb_strict_mode=OFF
,这允许将COMPRESSION
属性应用于通用表空间。仅 file-per-table 表空间支持页面压缩。(漏洞 #22615096,漏洞 #80182)InnoDB: 与原子操作相关的内存顺序问题导致 ARM64 和 POWER 平台上的断言失败。(缺陷号 22608616)
InnoDB:
DROP TABLESPACE
如果缺少远程通用表空间数据文件,则返回错误。(缺陷 #22232892,缺陷 #79330)InnoDB:
ALTER TABLE
将表行格式从 更改COMPACT
为COMPRESSED
引发断言 的操作中涉及的函数传递了不正确的页面大小信息。(漏洞 #22046353)InnoDB: 使用
innodb_autoinc_lock_mode=0
,等待表级锁的多个线程导致意外死锁。(缺陷 #21983865,缺陷 #78761)InnoDB:
trx_kill_blocking()
提出断言 的竞争条件(漏洞 #21508537)InnoDB:
OPTIMIZE TABLE
对具有全文索引的表 的(缺陷号 21378944)InnoDB: 缓冲池加载操作导致无法分配 0 字节错误。(缺陷号 21371070)
InnoDB: 一个
FLUSH TABLES ... FOR EXPORT
操作似乎停止了。函数中的循环ibuf_contract_in_background
未能退出。(缺陷 #21133329,缺陷 #77011)InnoDB: 一个全文查询提出了一个断言。在某些情况下,DDL 操作
ALTER TABLE ... RENAME
会导致在服务器重启时删除全文辅助表。(漏洞 #13651665)复制: 使用
gtid_mode=ON
,在设置之前执行空查询gtid_next
会使后一个操作失败。这是因为只有不更改数据的语句才能成功更改gtid_next
,而空查询不被认为是那些“安全”语句之一。此修复允许在gtid_next
空查询之后设置。(漏洞 #22811150)-
复制: 运行 MySQL 5.7 的从服务器无法连接到 MySQL 5.5 主服务器
server_uuid
,因为检索 不是 MySQL 5.5 的一部分。这是由于检索server_uuid
. (缺陷号 22748612)参考:这个问题是 Bug #21455603 的回归。
复制: 在未启用半同步复制的情况下,在主服务器上设置某些半同步复制配置可能会导致服务器退出。此修复可防止在这种情况下发生意外退出。(漏洞 #22602324)
-
复制:在构造对象
explicit_defaults_ts
期间未初始化 变量Query_event
这导致 Valgrind 警告依赖于未初始化的变量。此修复确保变量已初始化。(缺陷 #22110916,缺陷 #78999)参考资料:此问题是 Bug #18885916、Bug #72794 的回归。
-
复制: 在该
next_event()
函数中,从服务器的 SQL 线程调用以从中继日志中读取下一个 even,当 SQL 线程relaylog.log_lock
遇到错误时(例如,由于中继日志关闭),它没有释放它获取的,导致所有其他等待获取中继日志锁的线程挂起。通过此修复,锁在 SQL 线程离开函数之前被释放。(缺陷号 21697821)参考资料:另请参阅:Bug #20492319。
复制: 禁用二进制日志记录时,部分失败的语句未正确使用自动生成或指定的 GTID。该修复程序确保 partially failed
DROP TABLE
、partially failedDROP USER
或 partially failedDROP VIEW
分别使用相关的 GTID 并将其保存到@@GLOBAL.GTID_EXECUTED
和mysql.gtid_executed
表中,当禁用二进制日志记录时。(缺陷号 21686749)复制: 在级联或循环复制设置中使用基于行的复制时,主服务器复制到服务器 1,然后复制到服务器 2,合并表未正确应用到服务器 2。这可能会导致意外停止服务器 2 而服务器 1 不受影响。(漏洞 #17018343)
复制:测试 中报告间歇性 ASan 错误
rpl.rpl_checksum_cache
。报告的错误与二进制日志发送方在给定内存地址上执行堆释放后使用有关。(错误#78995,错误#22109863)复制: mysqldump已更新,使其与多源复制兼容。现在,当找到默认通道以外的复制通道时, mysqldump --dump-slave
CHANGE MASTER TO
会为每个复制通道输出一条 (错误#78467,错误#21855705)复制: 如果运行的多线程复制从站
relay_log_recovery=1
意外停止,则在重新启动期间,中继日志恢复过程可能会失败。这是由于事务不一致未被填充,请参阅 处理副本的意外停止。在此修复之前,要从这种情况中恢复需要手动设置relay_log_recovery=0
,启动从属START SLAVE UNTIL SQL_AFTER_MTS_GAPS
以修复任何事务不一致,然后重新启动从属relay_log_recovery=1
。这个过程现在已经自动化,可以在自动重启时启用多线程从站的中继日志恢复。(错误#77496,错误#21507981)Fedora 构建现在配置
-DMYSQL_MAINTAINER_MODE=0
为静音 GCC 6 警告。(漏洞#23274249)分配大量 (2^20) 性能架构索引统计对象可能会导致服务器退出。(缺陷号 23188107)
如果
keyring_okv
缺少插件配置目录,尝试轮换InnoDB
主密钥可能会导致服务器退出。(缺陷号 23149683)-
INSERT
使用ON DUPLICATE KEY UPDATE
和REPLACE
在定义了外键约束的表上失败,出现不正确的重复输入错误,而不是违反外键约束的错误。(漏洞 #23135731)参考:此问题是 Bug #78853、Bug #22037930 的回归。
Performance Schema 互斥量检测创建和销毁中的争用已减少,因此频繁创建和销毁检测量的互斥量与很少创建和销毁检测量的互斥量在不同的页面中维护。(缺陷号 22965826)
对于某些构建选项,未初始化的变量
get_key_scans_params()
可能会产生编译错误。(漏洞 #22916059)向解析器添加新标记会导致查询摘要值发生变化。(漏洞 #22906606)
对于调试版本,
CONCAT_WS()
如果没有可追加的内容,则可以提出断言。(缺陷号 22888420)LEAST()
修复了评估 失败的 Valgrind 警告 。(缺陷号 22883278)-
INET_NTOA()
产生错误消息时可能导致服务器退出。(漏洞 #22881810)参考资料:此问题是 Bug #22042027 的回归。
-
my_write()
如果该调用尝试检查当前连接并且连接已被终止,则 该调用可能会导致服务器退出。(缺陷号 22867809)参考资料:此问题是 Bug #21688407 的回归。
同时在多个线程中调用企业加密功能可能会导致服务器退出。(缺陷号 22839278)
-
设置
log_syslog_tag
为NULL
可能导致服务器退出。(缺陷号 22834781)参考:这个问题是 Bug #22180046 的回归。
如果索引生成列的表达式包含
AND
orOR
运算符,优化器可能会过于频繁地选择该索引并创建产生不正确结果的执行计划。(缺陷号 22810883)CREATE TABLE
mysqlpump输出中的语句 可能缺少KEY
子句并且不会加载。(缺陷号 22726732)在创建和删除企业加密函数后尝试使用它们可能会导致服务器退出。(错误号 22669012)
设置
sort_buffer_size
为非常大的值可能会导致某些操作失败并导致服务器退出。(缺陷号 22594514)对于
InnoDB
包含生成列的表,在连接中使用该表可能会由于不正确的错误检查而导致服务器退出。(漏洞 #22561845)REPLACE
如果索引前缀长度计算不正确,在具有索引生成列的表上可能会导致服务器退出。(缺陷号 22445211)SHOW CREATE TABLE
对于包含生成列的表,可能会导致服务器退出或产生Illegal mix of collations
错误。(缺陷号 22392268)在从属服务器上,复制
UPDATE
更新表的索引BLOB
虚拟生成列的语句InnoDB
可能会导致服务器退出。(漏洞 #22241015)SELECT ... GROUP BY ... FOR UPDATE
当由于使用松散索引扫描执行 的查询而发生死锁时,可能会引发断言 。(缺陷号 22187476)mysqlpump可能由于转储线程中的错误条件处理不当而退出。(漏洞 #22017120)
纠正了几个潜在的缓冲区溢出问题。(错误#21977380、错误#23187436、错误#23202778、错误#23195370、错误#23202699)
如果提供给该
--ssl-ca
选项的 CA 证书具有无效路径,则 yaSSL 会返回一条与 OpenSSL 不同的错误消息。现在双双返回SSL connection error: SSL_CTX_set_default_verify_paths failed
。(缺陷号 21920657)从yum或
zypper
存储库安装 MySQL 导致/var/log/mysqld.log
使用不正确的用户和组权限创建。(错误#21879694,错误#78512)With
show_compatibility_56=OFF
,SHOW VARIABLES
andSHOW STATUS
带有WHERE
子句的语句不起作用。(漏洞 #21783883)当事件
audit_log
的插件处理程序告诉插件要中止当前操作时,插件未能中止当前操作 。MYSQL_AUDIT_PARSE_PREPARSE
(缺陷号 21457956)Valgrind 为 mysqlpump报告的内存泄漏已修复。(缺陷号 21237667)
一些字符串函数返回一个或多个参数的组合作为它们的结果。如果其中一个参数具有非 ASCII 字符集,则结果字符串具有相同的字符集,从而导致在需要 ASCII 字符串时出现不正确的行为。(漏洞#18740222)
在 Fedora 24 上,由于 MariaDB 软件包发生变化,使用社区 MySQL 服务器 RPM 升级无法替换已安装的 MariaDB Galera 服务器。(漏洞 #81390,漏洞 #23273818)
该
mysql_read_defaults_options()
函数缺少 break 语句,导致该选项的任何选项值--ssl-cipher
也应用于该--tls-version
选项,结果不可预测。(缺陷 #81139,缺陷 #23129821)如果在派生表中使用了其中一个连接表
DELETE
,则在子句中使用派生表的来自连接表的操作WHERE
失败。(缺陷 #81014,缺陷 #23074801)如果使用过时的路径
mysql.h
或未<mysql/mysql.>
设置包含路径,则使用 MySQL C API 的客户端的编译可能会失败。这是由于使用了符号而不是在已调整的内部 MySQL 头文件中。(缺陷 #80935,缺陷 #23047194)#include <
file_name
>#include "
file_name
"MySQL 未使用 Sun Studio 在 Solaris 12 下编译。为更正此问题,实例
__attribute__
已更改为MY_ATTRIBUTE
. (缺陷 #80748,缺陷 #22932576)和
service_mysql_keyring.h
头services.h
文件拼错mysql_keyring_service_st
为mysql_keyring_file_service_st
. (缺陷 #80688,缺陷 #22908232)-
Bug #79194 的修复未涵盖
eq_ref
访问方法,结果是左连接可能返回不正确的结果。笔记此错误修复具有非常小的负面性能影响,因此它无法缓存位于
eq_ref
外部联接内侧的 - 访问行。常规内部联接不受影响。(缺陷 #80526,缺陷 #22833364)
参考资料:此问题是 Bug #79194、Bug #22176604 的回归。
由于读取未初始化的缓冲区内容,
sanity()
宏中strings/decimal.c
产生了 Valgrind 警告。(错误#80461、错误#22782203、错误#22839915)如果在启动时也设置了系统变量,则 启动服务器
--initialize
失败 。keyring_file_data
为了处理这个问题,--initialize
服务器不再跳过注册加载--early-plugin-load
选项的插件。(缺陷 #80451,缺陷 #22777039)Rewriter
在没有数据库时 加载查询重写插件会query_rewrite
导致 Valgrind 警告。(缺陷 #80333,缺陷 #22710312)优化器将
EXISTS (SELECT * ...)
构造转换为EXISTS (SELECT 1 ...)
在解析内部子查询中的所有列之前,这可能会导致拒绝包含子查询中HAVING
没有的子句 的有效查询GROUP BY
。(缺陷 #80231,缺陷 #22655856)对于使用 编译的服务器
-DWITH_PERFSCHEMA_STORAGE_ENGINE=0
,在服务器启动期间使用的缓冲日志消息可能会发生内存泄漏。(漏洞 #80089,漏洞 #22578574)在这些情况下,查询可能会返回不正确的结果:包含默认值的列
NULL
;SELECT DISTINCT
或者使用了GROUP BY
子句并且包含该NULL
值的列是选择列表的一部分;InnoDB
查询处理期间使用了 临时表。(错误#79591,错误#22343910)在存储过程名称验证期间可能会发生解析器结构的空指针取消引用。(错误#79396,错误#22286421)
使用 Ubuntu 15.10 软件包安装期间数据库初始化失败。(错误#79377,错误#22252900)
mysql_upgrade无法将系统表中的
User
和Proxied_user
列mysql.proxies_priv
从 16 个字符扩展到 32 个字符。(错误#78254,错误#21762656)的失败
UNINSTALL PLUGIN
可能导致后续INSTALL PLUGIN
操作的错误或混淆错误。(错误#74977,错误#20085672)mysqld_multi在无法执行 my_print_defaults时显示误导性错误消息。(错误#74636,错误#19920049)
以前,使用 RPM 包升级服务器(包括使用yum安装)需要将客户端包升级到相同的 MySQL 版本,这对于某些安装来说可能是不可取的。此规则已放宽,因此升级到通用 (GA) 服务器版本只需要安装某些 GA 客户端版本,这不太可能需要客户端升级。(错误#72230,错误#18518216)
mysqldump在执行时遇到错误时无提示地失败,没有错误消息
FLUSH LOGS
。(错误#71783,错误#18284273)