Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.15 的变化(2016-09-06,正式发布)

MySQL 5.7.15 的变化(2016-09-06,正式发布)

安全说明

  • validate_password插件现在支持拒绝与当前会话用户名匹配的密码的功能,无论是正向还是反向。为了启用对此功能的控制,插件公开了一个 validate_password_check_user_name 系统变量。默认情况下,该变量是禁用的;默认值将在 MySQL 8.0 中更改为启用。有关详细信息,请参阅 密码验证插件选项和变量

测试套件说明

  • mysql-test-run.pl中,并行测试的 worker 数量限制为 50,这在 CPU 超过 50 个的系统上会导致唯一线程 ID 耗尽。ID 耗尽问题已得到纠正,并且取消了 50 名工人的限制。感谢 Daniel Black 提供此更改所基于的补丁。此外,还进行了以下更改:

    • 为了避免空闲工人,现在并行工人的数量限制为测试数量。

    • 以前,如果--parallel=auto给出并且MTR_MAX_PARALLEL未设置环境变量,则会对并行工作者的数量施加 8 的限制。此限制已取消。

    (错误#22342399,错误#79585)

添加或更改的功能

  • InnoDB: 一个新的动态配置选项, innodb_deadlock_detect可用于禁用死锁检测。在高并发系统上,当大量线程等待同一个锁时,死锁检测会导致速度减慢。innodb_lock_wait_timeout 有时,禁用死锁检测并依赖发生死锁时事务回滚的设置可能更有效 (漏洞#23477773)

  • 单元文件 ( ) 的 systemd 支持脚本mysqld_pre_systemd现在仅在其位置与模式 /var/log/mysql*.log 匹配时才协助创建错误日志文件。在其他情况下,错误日志目录必须是可写的,或者错误日志必须存在并且对于运行mysqld 进程的用户是可写的。此外,mysqld_pre_systemd现在避免创建不安全的临时文件。(漏洞 #24516262)

  • 添加了CMake WITH_LZ4选项以控制在编译期间使用哪个 LZ4 库。默认 WITH_LZ4设置为 bundled,因此使用 MySQL 提供的库。设置WITH_LZ4system使用操作系统中的 LZ4 库。(漏洞 #23607230)

修正错误

  • InnoDB:ALTER TABLE ... ENCRYPTION='Y', ALGORITHM=COPY对驻留在系统表空间中的表 的(漏洞#24381804)

  • InnoDB:innodb_flush_method在设置为 的 Fusion-io 磁盘上创建加密表 O_DIRECT导致致命错误。(漏洞 #24329079,漏洞 #82073)

  • InnoDB: 删除并创建全文搜索表的操作引发了断言。(漏洞 #24315031)

  • InnoDB: 在删除索引表时访问全文搜索辅助表引发断言。(漏洞 #24009272)

  • InnoDB: 对具有索引列的表进行的在线 DDL 操作 BLOB在记录表修改期间引发断言。(缺陷号 23760086)

  • InnoDB: 在某些情况下,定位与给定指针对应的缓冲池块的代码返回了错误的块。感谢 Alexey Kopytov 提供的补丁。(错误#23631471,错误#79378)

  • InnoDB: 全局计数器 (ut_rnd_ulint_counter) 已更改为线程本地计数器,以使其在多核系统上可扩展。(漏洞 #22733635,漏洞 #80354)

  • 复制:选项 的添加 transaction-write-set-extraction=XXH64 使用来自 liblz4 的 xxHash 符号。虽然 xxHash 符号由 liblz4 导出,但头文件不是 API 的一部分,因此使用 WITH_LZ4=system. 该修复程序确保 xxHash 与 liblz4 分开构建,以便在使用系统库和捆绑的 LZ4 库时都可用。(缺陷 #82426,缺陷 #24399819)

    参考资料:另请参阅:错误 #23607230。

  • 复制: mysqlbinlog --read-from-remote-server log1 log2正在打开一个新连接, log2但没有释放用于 的连接 log1。感谢 Laurynas Biveinis 的贡献。(缺陷 #81675,缺陷 #23540182)

  • 复制: MTR 二进制日志测试套件无法清理复制的文件。感谢 Daniel Black 的贡献。(缺陷 #80881,缺陷 #23016254)

  • 复制: 使用binlog_row_image=FULL,在更新单个表时不必要地使用临时表。该修复确保单表更新遵循与多表更新相同的模式。(错误#79867,错误#22510353)

  • Solaris: 客户端库无法使用该 Cstd库在 Solaris 上构建。(漏洞 #24353920,漏洞 #82347)

  • mysqld_safe试图读取 my.cnf数据目录,尽管那不再是标准的选项文件位置。(漏洞#24482156)

  • 对于mysqld_safe--malloc-libnow 的参数必须是目录/usr/lib/usr/lib64/usr/lib/i386-linux-gnu或 之一/usr/lib/x86_64-linux-gnu。此外, --mysqld--mysqld-version选项仅在命令行中被接受,在选项文件中不被接受。(缺陷号 24464380)

    参考资料:另请参阅:Bug #24619033、Bug #82920。

  • 可以编写以 .ini或结尾的日志文件.cnf,以后可以将其解析为选项文件。一般查询日志和慢查询日志不能再写入以 .ini或结尾的文件.cnf。(缺陷号 24388753)

  • 通过利用 REPAIR TABLE使用临时文件的方式可以提升权限。(漏洞#24388746)

  • 如果basedir系统变量是在服务器启动时从命令行或选项文件设置的,则该值未规范化(在 Windows 上,/未替换为\)。(缺陷 #23747899,缺陷 #82125)

  • 修改了 kevent 语句计时器子系统取消初始化以避免mysqld在 OS X 10.12 关机期间挂起。(漏洞 #23744004,漏洞 #82097)

  • 对于 GRANT应用了多个语句的帐户, mysqlpump可能无法将它们全部转储。(漏洞#23721446)

  • MYSQL_ADD_PLUGIN宏有拼写错误,导致 无法MYSQL_SERVER定义。(漏洞 #23508762,漏洞 #81666)

  • 单独执行时不会导致表重建的就地ALTER TABLE操作在合并到单个语句中时可能会导致表重建。(缺陷 #23475211,缺陷 #81587)

  • 对于密钥环插件,数据访问层现在仅在必要时创建,而不是每次操作一次,这提高了密钥环性能。(缺陷号 23337926)

  • 语句中的空白服务器名称会CREATE SERVER导致服务器退出而不是错误。(缺陷号 23295288)

  • 优化器未能检查面积计算的函数返回值,导致服务器退出。(缺陷号 23280059)

  • 服务器可能无法释放分配给执行使用生成列的查询的内存。(漏洞 #23205454)

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

  • 触发器主体中包含多个语句的触发器的mysqlpump输出无法正确加载。(漏洞 #23072245)

  • 满足以下条件的查询可能会返回与 MySQL 5.6 不同的结果: 1) 子查询出现在选择列表中;2) 子查询包含 WHERE引用外部查询中的值的条件;3) 外部查询包含一个GROUP BY需要创建临时表的查询。(漏洞 #23049975)

  • validate_password插件拒绝的密码由服务器以明文形式写入错误日志。(漏洞 #22922023)

  • 在作为联接一部分的派生表的选择列表中使用参数的准备好的语句可能会导致服务器退出。(错误#22392374,错误#24380263)

  • MEDIUMINT在具有长整数值的操作中使用的列可能会导致缓冲区溢出。(漏洞#19984392)

  • ER_NO_SUCH_TABLE 尝试执行 CREATE TABLE ... SELECT在子句中使用临时表FROM并调用存储函数的准备好的语句时,可能会发生 虚假错误。如果在重新执行过程时在存储过程中使用该语句的非准备版本,则可能会出现相同的错误。(错误#16672723,错误#68972)

  • EINTR客户端库中的处理已得到修复,以便重试中断的读取和写入调用。以前,EINTR被忽略了。(漏洞 #82019,漏洞 #23703570)