Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.13 的变化(2016-06-02,全面上市)

MySQL 5.7.13 的变化(2016-06-02,全面上市)

账户管理注意事项

  • 在 MySQL 5.7.8 中,MySQL 用户名的最大长度从 16 个字符增加到 32 个字符,但是忽略了这种增加的一些适用上下文。现在已应用最大用户名长度的其他更改:

    • 这些mysql系统表列的大小增加了:

      • 和 表 的definereventproc

      • 和 表 的grantorprocs_privtables_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_multimysqld_multi.server没有安装,因为它们是不必要的。(缺陷 #81093,缺陷 #23134620)

钥匙圈笔记

  • MySQL Server 现在包括一个用于密钥环密钥管理的 SQL 接口,实现为一组可加载函数,这些函数访问内部密钥环服务提供的函数。有关详细信息,请参阅 通用密钥环密钥管理函数。有关函数调用的密钥环服务函数的信息,请参阅密钥环服务。有关一般密钥环信息,请参阅MySQL 密钥环

包装说明

  • support-files/MacOSX/ReadMe.txt不再包含在 MySQL 发行版中。(缺陷 #81038,缺陷 #23088916)

安全说明

  • 用于 MySQL Commercial Server 的链接 OpenSSL 库已更新至版本 1.0.1t。有关此版本中修复的问题的说明,请参阅 http://www.openssl.org/news/vulnerabilities.html

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(缺陷号 23229564)

X 插件说明

  • 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)

  • 配置aMysqlx_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(JSON_EXTRACT())允许 的SQL 语句中使用。这包括(但不限于) SELECT列表、条款和WHERE条款 。 HAVINGORDER BYGROUP 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 TABLEDEFAULT()

修正错误

  • 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_IDFTS_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将表行格式从 更改COMPACTCOMPRESSED引发断言 的操作中涉及的函数传递了不正确的页面大小信息。(漏洞 #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 failed DROP USER或 partially failed DROP VIEW分别使用相关的 GTID 并将其保存到 @@GLOBAL.GTID_EXECUTEDmysql.gtid_executed表中,当禁用二进制日志记录时。(缺陷号 21686749)

  • 复制: 在级联或循环复制设置中使用基于行的复制时,主服务器复制到服务器 1,然后复制到服务器 2,合并表未正确应用到服务器 2。这可能会导致意外停止服务器 2 而服务器 1 不受影响。(漏洞 #17018343)

  • 复制:测试 中报告间歇性 ASan 错误 rpl.rpl_checksum_cache。报告的错误与二进制日志发送方在给定内存地址上执行堆释放后使用有关。(错误#78995,错误#22109863)

  • 复制: mysqldump已更新,使其与多源复制兼容。现在,当找到默认通道以外的复制通道时, mysqldump --dump-slaveCHANGE 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 UPDATEREPLACE 在定义了外键约束的表上失败,出现不正确的重复输入错误,而不是违反外键约束的错误。(漏洞 #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_tagNULL可能导致服务器退出。(缺陷号 22834781)

    参考:这个问题是 Bug #22180046 的回归。

  • 如果索引生成列的表达式包含 ANDor OR运算符,优化器可能会过于频繁地选择该索引并创建产生不正确结果的执行计划。(缺陷号 22810883)

  • CREATE TABLEmysqlpump输出中的语句 可能缺少 KEY子句并且不会加载。(缺陷号 22726732)

  • 在创建和删除企业加密函数后尝试使用它们可能会导致服务器退出。(错误号 22669012)

  • 设置sort_buffer_size为非常大的值可能会导致某些操作失败并导致服务器退出。(缺陷号 22594514)

  • 对于InnoDB包含生成列的表,在连接中使用该表可能会由于不正确的错误检查而导致服务器退出。(漏洞 #22561845)

  • REPLACE如果索引前缀长度计算不正确,在具有索引生成列的表上可能会导致服务器退出。(缺陷号 22445211)

  • UPDATE影响虚拟生成列 的操作BLOB可能导致服务器退出。(漏洞 #22444212)

  • 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)

  • yumzypper存储库安装 MySQL 导致 /var/log/mysqld.log使用不正确的用户和组权限创建。(错误#21879694,错误#78512)

  • With show_compatibility_56=OFF, SHOW VARIABLESand SHOW 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.hservices.h文件拼错 mysql_keyring_service_stmysql_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)

  • 在这些情况下,查询可能会返回不正确的结果:包含默认值的列NULLSELECT DISTINCT或者使用了GROUP BY子句并且包含该 NULL值的列是选择列表的一部分;InnoDB查询处理期间使用了 临时表。(错误#79591,错误#22343910)

  • 在存储过程名称验证期间可能会发生解析器结构的空指针取消引用。(错误#79396,错误#22286421)

  • 使用 Ubuntu 15.10 软件包安装期间数据库初始化失败。(错误#79377,错误#22252900)

  • mysql_upgrade无法将系统表中的 UserProxied_usermysql.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)