Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.36 的变化(2017-04-10,全面上市)

MySQL 5.6.36 的变化(2017-04-10,全面上市)

编译笔记

  • Windows 构建现在使用默认运行时库(构建使用/MD标志)。(漏洞#25611609)

  • CMake添加了对使用 Developer Studio 12.6 进行编译的支持。(缺陷号 25384295)

配置注意事项

  • 如果同时给出了-DENABLE_DEBUG_SYNC=OFFAND ,则 MySQL 无法编译 。-DWITH_DEBUG=ONENABLE_DEBUG_SYNC选项已被删除并启用WITH_DEBUG调试同步。(漏洞 #18374703)

包装说明

  • Microsoft Windows: 提醒: MySQL 5.6 需要 Microsoft Visual C++ 2010 Redistributable Package 才能在 Windows 平台上运行。用户在启动服务器之前应确保该软件包已经安装在系统上。该包可从 Microsoft 下载中心获得。

  • RPM 包结构的更改需要删除更多的包才能干净地安装 MySQL 服务器。(漏洞 #25603087)

  • 为了避免潜在的竞争条件,Debian 软件包现在使用 GNU安装实用程序,而不是mkdirtouchchown的组合。(缺陷号 25258829)

  • CMake为 Debian/Ubuntu 软件包生成的包装进行了重构,以提高可维护性。此更改包括用于正确替换 Debian 和 Ubuntu 中的本机分发包的更新逻辑。(错误#25126961、错误#25251872、错误#84198)

安全说明

  • MySQL Commercial Server 的链接 OpenSSL 库已更新至版本 1.0.2k。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(错误#25768671,错误#25615451)

  • mysql_options()C API 函数现在支持一个 选项MYSQL_OPT_SSL_MODE 。唯一允许的选项值是 SSL_MODE_REQUIRED, 以要求与服务器的加密连接。mysql_real_connect()如果无法获得加密连接,它会导致 失败,而不会回退到未加密的连接。因此, mysql_real_connect()如果服务器不支持 SSL 或客户端未配置为使用 SSL,则返回错误。如果服务器指示它不支持 SSL,则客户端/服务器交换在收到初始服务器数据包后立即终止。

    要在 MySQL 8.0 中要求加密连接, 如果 指定了命令行选项,则标准 MySQL 客户端程序会调用mysql_options()set 。必须能够要求加密连接的第三方应用程序可以使用相同的技术。有关详细信息,请参阅mysql_ssl_set()MYSQL_OPT_SSL_MODE--ssl-mode=REQUIRED

    此更改未增加次要 C API 版本号。为 MySQL 8.0 编译的应用程序 MYSQL_OPT_SSL_MODE如果动态加载器提供了一个没有MYSQL_OPT_SSL_MODE. 必须编写此类应用程序以通过检查mysql_options()调用是成功还是失败来处理这种可能性。(漏洞 #25575605)

线程池注释

  • 为了提高thread_pool插件性能,连接身份验证和初始化已从接受器线程移动到处理客户端连接的线程池工作线程。这使接受器线程能够以更高的速率处理新连接,同时减少延迟。该INFORMATION_SCHEMA TP_THREAD_GROUP_STATE表现在包含一个CONNECT_THREAD_COUNT列,指示正在处理或等待处理连接初始化和身份验证的线程数。每个线程组最多可以有四个连接线程;这些线程在一段时间不活动后过期。(漏洞 #17159742)

添加或更改的功能

  • 复制: 当向 提供负超时参数或小数超时参数时 WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(),服务器会以意想不到的方式运行。有了这个修复:

    • 小数超时值按原样读取,没有舍入。

    • 如果服务器处于严格 SQL 模式,则负超时值将被拒绝并报错;如果服务器不在严格的 SQL 模式下,该值使函数立即返回 NULL,无需等待,然后发出警告。

    (错误#24976304,错误#83537)

  • UTF-8 二进制排序规则的性能得到改进。(错误#24788778、错误#83247、错误#25076862)

  • Debian/Ubuntu 打包维护脚本的一致性和可维护性得到改进。(漏洞#23588977)

  • mysql_secure_installation对其认为有效的是和否响应更加严格。(缺陷 #13344753,缺陷 #62925)

修正错误

  • InnoDB: 删除了要求第一个撤消表空间使用空间 ID 1 的限制。现在可以为第一个撤消表空间分配一个空间 ID,而不是 1。撤消表空间的空间 ID 值仍然按连续顺序分配。(漏洞 #25551311)

  • InnoDB: 在没有 Performance Schema 的情况下编译服务器导致构建失败。(缺陷号 25348787)

  • InnoDB:InnoDB文件 I/O 性能模式检测 的文件句柄类型名称os_pfs_file_tpfs_os_file_t. (漏洞 #25220118)

  • InnoDB: 服务器在重启时退出是由于 结构my_thread_init()my_thread_exit()函数st_my_thread_var(缺陷号 25167032)

  • InnoDB:具有非默认读取批量大小配置 的memcached读取操作导致服务器退出。(缺陷号 25147515)

  • InnoDB: 与表统计相关的代码中的错误在dict0stats.cc源文件中引发了断言。(漏洞#24585978)

  • InnoDB:InnoDB 在 Windows 上禁用了文件 I/O 的 性能模式检测(漏洞 #14025581)

  • InnoDB:row_search_mvcc()函数不必要地遍历整个表进行范围查询,这发生在记录不在事务读取视图中时。(错误#84202、错误#23481444、错误#25251375)

  • 复制: 当使用多线程从站(slave_parallel_workers大于 0)Seconds_Behind_Master 时,旋转中继日志时的值不正确。(缺陷号 23532304)

  • Ubuntu 12.04 LTS:这是 MySQL 8.0 系列中最后一个支持 Ubuntu 12.04 LTS 的版本。根据 MySQL 支持生命周期政策关于终止对过时或已达到生命周期结束的操作系统版本的支持,我们计划在未来的版本中停止为 Linux 发行版构建二进制文件。(缺陷号 25828475)

  • Oracle Linux 5、Red Hat Enterprise Linux 5 和 CentOS 5:这是 MySQL 8.0 系列中支持 Oracle Linux 5、Red Hat Enterprise Linux 5 和 CentOS 5 的最后一个版本。根据有关终止支持的 MySQL 支持生命周期政策对于过时或生命周期结束的操作系统版本,我们计划在未来的版本中停止为这些 Linux 发行版构建二进制文件。此外,我们计划使用 glibc 2.12 为 Oracle Linux 6 的下一个版本构建通用 Linux tarball。(缺陷号 25828375)

  • mysqldump未能在写入转储输出的 SQL 语句中正确引用某些标识符。(缺陷号 25717383)

  • 服务器的客户端预授权缺少对长度编码字符串的长度检查。(漏洞#25714674)

  • 对于 Debian/Ubuntu 软件包,用户定义的归类文件可能会在 MySQL 升级期间被覆盖。字符集文件现在标记为配置文件,以便用户自定义在升级期间生成是否覆盖它们的提示。(漏洞 #25525628,漏洞 #84761)

  • 对于CREATE TABLE使用数据库限定符指定表名并包含DATA DIRECTORYorINDEX DIRECTORY选项的语句,如果没有默认数据库,则会发生错误。(漏洞 #25514146,漏洞 #84861)

  • 启动服务器 performance_schema_digests_size=1 导致异常退出。(缺陷 #25492129,缺陷 #84786)

  • mysqld_safe不检查--basedir选项命名的目录是否存在。(漏洞#25365194)

  • 如果选项命名的错误日志文件--log-error是 FIFO ,则mysqld_safe失败。(漏洞 #25356221,漏洞 #84427)

  • 如果 --datadir选项值以 /字符结尾, mysqld_safe可能会失败。(漏洞 #25319457)

  • 最近对mysqld_safe的更改导致 mysql.server脚本无法启动它,如果基目录被指定为绝对路径,这与编译时的默认绝对路径不同。(漏洞 #25319392,漏洞 #84263)

  • Bug #78777 的修复有不同的效果,具体取决于是否启用了 Performance Schema。(漏洞 #25309017,漏洞 #84305)

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

  • 如果性能模式被禁用,CONNECTION_CONTROL插件将无法编译。(漏洞 #25308357,漏洞 #84304)

  • 对于 RPM 的 System V 初始化脚本, [mysqld]某些选项的选项文件部分被忽略,例如pid-file. (漏洞 #25287707,漏洞 #84172)

  • 如果使用非默认基目录,则 初始化脚本无法启动mysqld_safe 。(漏洞 #25261472,漏洞 #84219)

  • mysqld_safe --no-defaults不起作用(早期错误修复的无意结果)。(错误#25244898,错误#84173)

  • 语句内或语句之间的分号 ( ;) 字符可能会导致从相同的语句生成不同的摘要。(漏洞 #25244533,漏洞 #83253)

  • 对于链接到 的客户端libmysqlclient,在使用准备好的语句期间可能会发生无效的内存访问。(缺陷号 25164932)

  • Bug #25088048 的修复导致 mysqld_safe用于启动 MySQL 服务器的命令不再包含mysqld路径。(缺陷号 25144379)

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

  • 执行包含访问视图的查询的存储过程可能会分配直到会话结束才释放的内存。(缺陷号 25053286)

  • 如果 WHERE子句包含依赖子查询,表在选择列表中的列上有二级索引,后跟子查询中的列,和GROUP BY/或DISTINCT允许查询使用松散索引扫描,查询可能会产生不正确的结果。(漏洞 #24671968,漏洞 #83005)

  • MyISAM如果查询中的键长度大于最大键长度,则在查询处理期间 创建临时表可能会失败MyISAM,从而导致服务器退出。(漏洞 #24659861)

  • 和单元测试没有在 Aarch64 平台上正确处理除零测试DebugPrintTestDebugPrintDeathTest感谢 Alexey Kopytov 提供的补丁。(缺陷 #24624555,缺陷 #82889)

  • 在最近的 MySQL 版本中 对mysqld_safe 所做的更改需要在命令行上指定--ledir, --mysqld, 选项;--mysqld-version它们不能再在选项文件中指定。这可能导致调用mysqld_safe的初始化脚本失败。此类脚本现在将MYSQLD_OPTS 环境变量的值作为第一个命令行参数传递给 mysqld_safe ,并将该值设置为可能需要的仅命令行mysqld_safe选项值。在使用 systemd 的平台上, 可以使用如下一行 MYSQLD_OPTS设置该值 :/etc/sysconfig/mysqld

    MYSQLD_OPTS=" --ledir=/mysqld_ledir --mysqld=my_wrapper "

    的值MYSQLD_OPTS还可以包括 mysqld_safe传递给 mysqld的mysqld选项 。(漏洞 #24619033,漏洞 #82920)

    参考:此问题是以下问题的回归:Bug #24464380、Bug #24483092、Bug #25088048、Bug #25378439、Bug #25378565。

  • 对于LOAD DATA用于将数据插入到可更新视图中,缺少用于验证列是否实际可更新的检查。(缺陷号 24595937)

  • 在 Debian/Ubuntu 平台上,MySQL 的 systemd 启动脚本忽略datadir/etc/mysql/my.cnf. (漏洞 #24517024,漏洞 #82709)

  • 由于内存分配失败或整数溢出,将正则表达式模式匹配到大字符串可能会导致服务器退出。(漏洞 #24449076,漏洞 #24449090)

  • 表选项CREATE TABLE的值较大的语句 报告了不正确的错误。CONNECTION该值现在限制为 1024 字节。(漏洞#24437124)

  • MySQL 现在使用readdir()而不是 readdir_r(). 后者自glibc2.24 以来已被弃用,并导致 MySQL 的调试构建和使用 GCC 6.1 的构建失败。

    此外,导致 GCC 6.1 编译器警告的几个问题已得到纠正。(错误#23708395、错误#24437737、错误#82515、错误#24459890、错误#82583、错误#25103242)

  • CMake选项 在最近版本的库中失败。(错误#23708332、错误#25391997、错误#84501)-DWITH_EDITLINE=system editline

  • 结构不正确的授权表可能会导致用户管理操作出现问题。作为此修复的结果,对于修改授权表的任何操作,服务器现在检查表是否具有预期的结构,如果没有则产生错误。必须运行mysql_upgrade以将表更新为预期的结构。(错误#23295423、错误#25095876、错误#25448037)

  • QUOTE()函数可能会分配过多的内存。max_allowed_packet现在施加了字节限制, 并NULL在尝试分配更多字节时返回警告。(漏洞 #23195404)

  • 当试图定位数据目录时, mysqld_safe被错误地认为 $MY_BASEDIR_VERSION/var是可能的位置之一。(漏洞 #23013510,漏洞 #80866)

  • main.log_tables-big测试用例在高负载主机上可能不稳定 。感谢 Laurynas Biveinis 提供补丁。(缺陷 #22874167,缺陷 #80607)

  • 使用聚合函数的查询 DISTINCT可能会产生不正确的结果。(漏洞 #22686994,漏洞 #80310)

  • 禁用系统变量 的use_index_extensions 标志后,某些查询可能会返回不正确的结果。(缺陷 #21749123,缺陷 #78244)optimizer_switchSELECT DISTINCT

  • Debian 软件包缺少与 AppArmor 相关的包含文件,并且错误地标记为依赖于 AppArmor(因此无法通过卸载来禁用 AppArmor)。(缺陷号 20768958)

  • 在复制环境中,SET PASSWORD或者ALTER USER 由于未能正确解析哈希字符串而无法在从站上执行。(缺陷号 20228478)

  • 在非 Linux Unix 系统上,mysql.server 启动脚本使用 Linux 命令pidof 而不是pgrep。(漏洞 #13788154,漏洞 #64342)

  • 在服务器异常退出后 启动多个mysqld_safe实例可能会导致一个mysqld_safe实例杀死另一个实例。由于错误修复,该 mysqld_safe.pid文件不再使用。(缺陷 #11751149,缺陷 #41908)

  • mysqld_safe--help消息 已更正为提到 、 和 选项(如果给定)必须是第一个参数。(缺陷 #11745176,缺陷 #11192)--no-defaults--defaults-file--defaults-extra-file

  • 每个级别(具有固定深度)的 XML 解析器位置堆栈的边界检查使用数组的大小作为上限,因此偏离了一个。这是通过将允许的深度减少一个来解决的,这实际上与位置堆栈中的最大元素数相匹配。(缺陷 #83871,缺陷 #25111907)

    参考资料:另请参阅:Bug #14040071、Bug #15948580。

  • 服务器端准备好的语句的时间戳可以写入二进制日志,最多比相应的非准备语句的时间戳晚一秒,导致主从服务器之间的时间值差异。(错误#74550、错误#19894382、错误#25187670)