Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.37 的变化(2022-01-18,全面上市)

MySQL 5.7.37 的变化(2022-01-18,全面上市)

审核日志说明

  • 以前,MySQL Enterprise Audit 记录的每个事件都包含 SQL 语句文本。为了提供替代方案(因为语句可能包含敏感信息),审计日志过滤语言现在支持记录语句的摘要而不是其文字文本。例如,而不是记录此语句:

    SELECT * FROM orders WHERE some_sensitive_column=1234567

    审计日志插件可以记录这个摘要:

    SELECT * FROM `orders` WHERE `some_sensitive_column` = ?

    这类似于已为准备好的语句记录的内容,其中出现参数标记而不是实际数据值。

    要执行摘要日志记录,请使用审计过滤器定义,将语句文字文本替换为相应的摘要,如 事件字段值的替换中所述

    因为文本替换发生在早期审计阶段(在过滤期间),所以无论稍后写入的日志格式如何(即审计日志插件是否生成 XML 或 JSON 输出),都可以选择是记录语句文字文本还是摘要值。(缺陷号 31482609)

  • 新的audit_log_disable 系统变量允许禁用所有连接和已连接会话的审计日志记录。请参阅 禁用审核日志记录

编译笔记

  • 包含 curl 而不是链接到系统 curl 库的二进制包已升级为使用 curl 7.80.0。(缺陷号 33576431)

SQL 函数和运算符注释

  • 使用该 MBRContains()函数的查询并未使用所有可用的空间索引。(缺陷号 32975221)

    参考资料:此问题是 Bug #29770705 的回归。

  • FORMAT()当指定 es_ES 或 es_MX 语言环境时, 该函数返回一个格式化数字,但不显示千位分隔符和分隔符之间的分组。(缺陷号 31374305)

包装说明

  • 用于签署 MySQL 可下载包的 GnuPG 构建密钥已更新。之前的 GnuPG 构建密钥设置为在 2022-02-16 到期。有关使用 GnuPG 签名检查验证 MySQL 可下载包的完整性和真实性的信息,或获取我们的公共 GnuPG 构建密钥的副本,请参阅使用 GnuPG 进行签名检查

    由于 GnuPG 密钥更新,配置为使用的系统 repo.mysql.com在升级到 MySQL 5.7.37 及更高版本或使用apt或 升级到 MySQL 8.0.28 及更高版本时可能会报告签名验证错误yum。使用以下方法之一解决此问题:

    1. 从https://mysql.net.cn/downloads/ 手动重新安装 MySQL APT 或 YUM 存储库设置包 。

    2. 下载 MySQL GnuPG 公钥并将其添加到您的系统 GPG 密钥环中。

    (缺陷号 33587308)

修正错误

  • InnoDB:优化了源代码中 的buf_validate()函数 InnoDB,提高了调试构建的性能。

    感谢 Hobert Lu 的贡献。(错误#33417058,错误#104967)

  • 分区: 在生成的列表达式中创建一个具有不确定函数的表应该是不可能的,但这并不是在所有情况下都强制执行的;可以使用一系列一个或多个 ALTER TABLE语句来得到一个分区表,其中包含一个或多个此类生成的列。当试图执行 CREATE TABLE运行而获得的语句SHOW CREATE TABLE 时,MySQL 拒绝了该语句,并带有一条误导性错误消息,该错误消息指的是分区表达式而不是有问题的列,尽管分区表达式本身是合法的。

    这是由于检查为生成的列定义的任何不安全表达式(在内部变量中thd->safe_to_cache_query)的结果,后来在解析分区表达式时再次检查而没有被清除,即使分区表达式没有被清除也会导致错误请参考有问题的生成列表达式。thd->safe_to_cache_query现在在这种情况下,我们在解析分区函数之前 重置 。

    允许在生成的列中使用某些非确定性函数 ( AES_ENCRYPT(), AES_DECRYPT(), RANDOM_BYTES()) 的问题是单独处理的。(缺陷号 29268656)

    参考资料:另请参阅:Bug #32592320。

  • 分区: 使用索引而非分区表主键的查询有时会导致 CPU 负载过大。(错误#104576,错误#33238010)

  • 复制: 当在PAD_CHAR_TO_FULL_LENGTH副本服务器上启用 SQL 模式时,可以将尾随空格添加到复制元数据存储库表中的复制通道名称,从而导致识别使用该数据的通道的复制操作出错。该问题现已在 MySQL 8.0 中通过对字符列使用 VARCHAR 得到解决,在 MySQL 5.7 中通过在从这些表中读取时禁用 SQL 模式得到解决。感谢 Brian Yue 的贡献。(缺陷号 33213841)

  • MySQL 5.7 没有 thread_stack以与 MySQL 5.6 或 MySQL 8.0 相同的方式处理变量。(缺陷号 33362907)

  • 在某些情况下可以创建类型为 的生成列SERIAL,这是不允许的。

    有关详细信息,请参阅数字数据类型语法CREATE TABLE 和生成的列(缺陷号 33141966)

  • 在触发器或存储函数中不允许隐式或显式提交事务的语句。CREATE TRIGGER在这种情况下,和 都 CREATE FUNCTION应该报错 ( ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG) ,但没有正确处理 DROP TABLESPACE. (缺陷号 33141958)

  • 用于在线密钥环迁移的 MySQL 会话在迁移完成后没有正常关闭,导致错误日志中打印了一条Aborted connection注释。(缺陷号 32989716)

  • 如果要将 aCR_UNKNOWN_ERROR发送给客户端,则可能会发生异常。(缺陷号 31933415)

  • SHOW PROCESSLIST在访问属于正在删除准备好的语句的连接的查询字符串时,可以读取释放的内存。(漏洞 #28142052)

  • 未正确检查权限 ALTER USER ... IDENTIFIED WITH ... BY。(错误#27923149,错误#29882299)