Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.5 的变化(2014-09-25,里程碑 15)

MySQL 5.7.5 的变化(2014-09-25,里程碑 15)

笔记

这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)

编译笔记

  • 重要变更;Microsoft Windows: 使用 Visual Studio 在 Windows 上构建的 MySQL 现在需要 Visual Studio 2013 或更高版本。之前的要求是 Visual Studio 2010 或更高版本。(漏洞 #18404381​​)

  • 重要变化: 原子操作 API 被简化为仅使用现有的 GCC 内置实现或平台提供的实现(对于 Windows、Solaris),并删除了自定义的基于互斥锁的回退实现。保留的实现是那些能够使用 CPU 原生原子的实现。这简化了原子 API 和相关代码,并处理了回退实现导致的错误。

    作为这项工作的一部分, 删除 了(未记录的)WITH_ATOMIC_LOCKSMY_ATOMIC_MODE_RWLOCKS CMake选项。

    在支持本机原子的平台上,此更改不会引入任何问题。对于其他平台,以下是潜在的 MySQL 编译问题和解决方案:

    • 使用 GCC 4.1 的 32 位 Linux 变体将不再工作。这包括受支持的平台 Red Hat 5。这个问题的解决方案是使用新的 GCC 或设置 -march编译器选项。例如,使用 Red Hat 5 上可用的 GCC 4.4。有关指定编译器选项的信息,请参阅 编译器标志

    • 在不受支持的平台上可能会出现问题。例如,64 位 PowerPC、32 位 ARM 和 64 位 ARM 将无法使用较旧的编译器进行编译。这些情况的解决方案是使用 GCC 4.7 或更高版本。

  • CMake现在检查支持的编译器的最低版本: gcc 4.4(Linux、Solaris);Sun Studio 12u2(Solaris 客户端库);Clang 3.3(OS X,FreeBSD)。可以使用该 -DFORCE_UNSUPPORTED_COMPILER=ON 选项禁用此检查。(漏洞 #19187034)

  • FreeBSD 10 上嘈杂的编译器警告被静音。(漏洞#18790490)

  • 旧 OS X 和 XCode 版本的CMake解决方法已被删除。在 OS X 上,编译始终使用 Clang,即使对于 32 位构建也是如此。

    现在支持 OS X 10.8 及更高版本的 OS X 编译,使用 XCode 5 及更高版本。旧版本的编译可能有效,但不受支持。(漏洞 #18510941)

  • 以前, CMake选项在调试构建时默认打开,在发布构建时默认关闭,并 在使用 GCC 构建时启用。 这使得在某些情况下启用变得很麻烦,例如在使用 Clang 进行编译时。 MYSQL_MAINTAINER_MODE MYSQL_MAINTAINER_MODE-Werror-Werror

    现在,MYSQL_MAINTAINER_MODE在使用 GCC 编译调试版本时默认启用,并且 无论使用 GCC 还是 Clang 都MYSQL_MAINTAINER_MODE启用 。只需 在运行 CMake-Werror时明确设置即可启用Clang 。此外,修复了 Clang 3.4 报告的一些编译警告,使得使用. (漏洞 #18313717)-Werror-DMYSQL_MAINTAINER_MODE=1-Werror

  • 构建支持已修改,以便为 Clang 生成与gcc相同的警告。(漏洞#17959689)

  • 已完成清理源代码库的工作,包括: 删除不需要的CMake检查;从源文件中删除未使用的宏;重组头文件以减少依赖项的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等效函数替换本地编写的函数。

配置注意事项

  • 不兼容的更改: mysql_install_db已从 Perl 重写为 C++。这使得它可以作为可执行二进制文件提供,并消除了对安装 Perl 的依赖。

    新的实施还涉及其他几个差异。以下项目列出了一些最重要的变化。有关详细信息,请参阅 mysql_install_db — 初始化 MySQL 数据目录

    • 可执行二进制版本位于 bin安装目录中,而 Perl 版本位于scripts 安装目录中。对于旧版本 MySQL 的升级,您可能会 在两个目录中找到一个版本的mysql_install_db 。为避免混淆,请从 scripts目录中删除该版本。对于 MySQL 5.7.5 或更高版本的全新安装, mysql_install_db仅在该 bin目录中 找到,该目录scripts不再存在。希望在中找到 mysql_install_db的 应用程序scripts应该更新目录以在bin目录中查找。

    • 一些选项的处理方式不同。例如,该 --datadir选项是强制性的。

    • 有几个新选项。例如,有些选项可以明确控制创建的管理帐户。默认情况下,这是 'root'@'localhost',但您可以使用 --admin-user--admin-host更改帐户名的用户和主机部分。

    • 几个选项已被删除或替换。例如, --skip-random-passwords已被替换为--insecure.

    • mysql_install_db总是覆盖该 .mysql_secret文件,而不是附加到它(如果它存在)。假定在安装之后,您将立即使用文件内容连接到服务器并在继续进行其他部署之前重置管理密码。

    • mysql_install_db不再将无法识别的选项传递给mysqld。(但是你可以使用 --defaults-extra-file 指定一个选项文件来添加到 mysqld引导命令。)

    • mysql_install_db不再创建默认my.cnf文件。

弃用和移除说明

  • 不兼容的更改: 在 MySQL 5.6.6 中,YEAR(2)不推荐使用该数据类型。对 的支持 YEAR(2)现已删除。一旦升级到 MySQL 5.7.5 或更新版本,任何剩余的 YEAR(2)列都必须转换为YEAR(4)再次可用。有关转换策略,请参阅 2-Digit YEAR(2) Limitations 和 Migrating to 4-Digit YEAR。例如,升级后运行 mysql_upgrade

  • 不兼容的更改:InnoDB无法再禁用存储引擎。该 --skip-innodb 选项已弃用且无效,使用它会导致警告。它将在未来的 MySQL 版本中被删除。这也适用于它的同义词(--innodb=OFF--disable-innodb等等)。

    该选项的新innodb_lock_no_retry标志 --debug现在可用。 如果无法获取锁,--debug='d,innodb_lock_no_retry'则会导致 在启动期间立即失败,而不是在失败之前进行 100 次尝试。InnoDB这在测试或调试期间可能很有用,可以在InnoDB无法获取其锁时产生更快的服务器退出。

    禁用的原因之一InnoDB是启用使用与现有实例相同的数据目录启动服务器实例。(MyISAM允许,但 InnoDB没有。)因为 InnoDB不能再被禁用,解决方法是在启动另一个实例之前停止现有实例,以便一次只有一个活动实例使用数据目录。

  • 已弃用的timed_mutexes 系统变量已被删除。(漏洞#18277305)

  • 已弃用的mysqlhotcopy实用程序已从 MySQL 发行版中删除。备选方案包括 mysqldump和 MySQL Enterprise Backup。

  • 已弃用的mysqlbugmysql_waitpidmysql_zap实用程序已从 MySQL 发行版中删除。

  • 已弃用的storage_engine 系统变量已被删除。改用 default_storage_engine

数据跟踪支持

  • MySQL 现在包括对 Oracle Linux 6 或更高版本和 UEK 内核的 D​​Trace 支持。如果存在 DTrace,服务器构建将检测到它而无需特殊的CMake选项。有关在 MySQL 上使用 DTrace 的信息,请参阅 使用 DTrace 跟踪 mysqld

错误处理

  • IGNORE 服务器在处理指定关键字 的语句方面变得更加一致和有弹性。

    • 服务器未能报告INSERT IGNORE语句警告。

    • 服务器可能无法报告多表 DELETE IGNORE语句的警告。

    • UPDATEUPDATE IGNORE即使对于唯一索引导致更新被忽略的语句, 也会调用表的触发器。

    • 对于调试版本,可以针对DELETE IGNORE语句中发生的错误提出断言。

    • 对于调试版本,可以针对DELETE IGNORE语句导致的死锁提出断言。

    • 对于DELETE IGNORE在外键关系中的父表上执行,外键违规错误被视为警告(正确),但不会删除未产生外键违规的行。

    服务器在严格 SQL 模式下处理语句方面变得更加一致和有弹性。

    • 在严格 SQL 模式下,触发器可以允许在严格模式下不允许的操作。

    • 在严格 SQL 模式下,有关重复索引的弃用警告被错误地提升为错误。

    • 严格 SQL 模式未应用于多表 DELETE语句。

    有关严格 SQL 模式的更多信息IGNORE,请参阅IGNORE 关键字和严格 SQL 模式的比较。(错误#6196,错误#11744960,错误#43895,错误#11752648,错误#68726,错误#16522924,错误#16860715,错误#16860829,错误#14786621,错误#17550423,错误#42910,错误#189,Bug 18 #16976939,错误#18526888)

InnoDB 注释

  • 不兼容的更改: 新的日志记录类型 (MLOG_FILE_NAME) 用于标识自上次检查点以来已修改的 file-per-table 表空间。此增强功能简化了崩溃恢复期间的表空间发现,并消除了在重做日志应用程序之前对文件系统的扫描。有关此增强功能优势的更多信息,请参阅 崩溃恢复期间的表空间发现

    此增强功能更改了重做日志格式,要求在升级到 MySQL 5.7.5 或从 MySQL 5.7.5 降级之前彻底关闭 MySQL。

优化器注释

  • 优化器计算更准确的半连接实现成本。(漏洞 #18558561)

  • 部分中范围访问的优化器跟踪输出 considered_access_path已得到改进:不再总是打印"access_type": "ref"索引查找类型, "eq_ref"现在打印"ref", 或 。"fulltext"(漏洞 #18195373)

  • 在构建查询执行计划期间,优化器现在可以使用条件过滤来更好地使用表上的条件来估计要连接到下一个表的符合条件的行数。例如,尽管可能有一种基于索引的访问方法可用于从连接中的当前表中选择行,但在WHERE子句中可能还有其他表条件可以过滤(进一步限制)估计用于传递给下一个表的合格行。

    要控制优化器是否考虑额外的过滤条件,请使用 系统变量的condition_fanout_filter标志。optimizer_switch默认情况下启用此标志,但可以禁用以抑制条件过滤(例如,如果发现特定查询在没有它的情况下会产生更好的性能)。

    有关更多信息,请参阅条件过滤

  • 优化器现在使用更准确的索引统计信息。目前,改进后的值被 所使用InnoDB,具有以下效果:

    • 在许多情况下,更好的执行计划会针对之前选择了不太理想的连接索引或表连接顺序的查询产生。

    • 输出中的行估计EXPLAIN 更准确,在某些情况下过滤器值也是如此。

    • 显示的索引统计信息中的基数估计 对于表 SHOW INDEX来说更准确。InnoDB

  • 为了生成执行计划,优化器使用了一个成本模型,该模型基于对查询执行期间发生的各种操作的成本的估计。优化器有一组内置的默认成本常量,可用于做出有关执行计划的决策。

    优化器现在还有一个成本估算数据库,可在执行计划构建期间使用。这些估算存储在系统数据库的server_costengine_cost中, mysql并且可以随时配置:NULL存储在成本模型表中的任何非成本估算都会覆盖相应的编译默认估算。任何NULL估计都指示优化器使用编译的默认值。

    实施和测试正在进行中,以确保 DBA 可以安全地更改这些值。目前,更改它们应由您自己承担风险。

    还有一个新FLUSH 变体 ,FLUSH OPTIMIZER_COSTS它会导致服务器重新读取成本表并将任何更改的估计应用于新会话。

    有关详细信息,请参阅优化器成本模型

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到 mysql数据库中。

性能模式注释

  • 不兼容 的更改:性能模式现在提供了一个 user_variables_by_thread公开用户定义变量的表。有关详细信息,请参阅 性能模式用户定义的变量表

    由于此更改,服务器现在将用户定义的变量名称限制为最多 64 个字符,VARIABLE_NAME即表中列的长度。以前,服务器没有强制执行限制。新限制类似于 MYSQL 中许多其他标识符的长度限制(请参阅用户定义的变量)。使用很长的用户定义变量名称的查询必须重写为用户较短的名称。

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将此更改合并到 performance_schema数据库中。

  • 以前,对于等待事件表(例如 events_waits_current),该 NUMBER_OF_BYTESNULL用于表 I/O 等待;也就是说,对于wait/io/table/sql/handler仪器的事件。对于表 I/O 等待,此值现在表示已处理的行数。

    此外,对于批量 I/O 操作(例如表或索引扫描的行提取),Performance Schema 现在可以报告N行的单个事件,而不是报告单行事件N时间。此更改通过减少报告调用的次数显着降低了表批处理 I/O 的性能模式开销。权衡是事件计时的准确性较低。批处理 I/O 的计时包括连接缓冲、聚合和将行返回给客户端等操作所花费的时间,而不是像在每行报告中那样用于单个行操作的时间。

    有关批量 I/O 报告发生的条件的更多信息,请参阅 events_waits_current 表NUMBER_OF_BYTES中列 的描述。

  • Performance Schema 阶段事件表(events_stages_currentevents_stages_historyevents_stages_history_long)包含两个新列,它们一起为每一行提供阶段进度指示器:

    • WORK_COMPLETED:该阶段完成的工作单元数

    • WORK_ESTIMATED:阶段期望的工作单元数

    NULL如果没有为仪器提供进度信息,则 每一列都是。信息的解释(如果可用)完全取决于仪器的实施。最初,为了演示这个概念,stage/sql/copy to tmp table 仪器在启用时会提供进度信息。在这种情况下,列的解释单位是复制的行数。

    有关详细信息,请参阅 性能模式阶段事件表

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将此更改合并到 performance_schema数据库中。

安全说明

  • 不兼容的更改: MySQL 5.6 弃用了使用旧的 pre-4.1 密码哈希格式的密码。现在删除了对这些密码的支持,其中涉及以下更改。必须修改使用不再受支持的任何功能的应用程序。

    • 服务器端mysql_old_password 身份验证插件已删除。使用此插件的帐户在启动时被禁用,服务器 会在错误日志中写入一条未知插件”消息。有关升级使用此插件的帐户的说明,请参阅 Migrating Away from Pre-4.1 Password Hashing 和 mysql_old_password 插件

      客户端mysql_old_password 身份验证插件已从 C 客户端库中删除。

    • 服务器和客户端程序的--secure-auth选项是默认选项,但现在是空操作。它已被弃用,并将在未来的 MySQL 版本中删除。

    • --skip-secure-auth不再支持服务器和客户端程序 的选项,使用它会产生错误。

    • 系统secure_auth变量只允许值为 1;不再允许值为 0。

    • 对于old_passwords 系统变量,不再允许值为 1(生成 4.1 之前的哈希值)。

    • OLD_PASSWORD()功能已删除。

    • 删除 了mysqladmin命令。 old-password

  • MySQL 现在包含一个服务器端身份验证插件 mysql_no_login,用于设置不接受客户端连接的帐户。此插件使 DBA 能够实现以下用例:

    • 执行敏感或管理操作的存储程序和视图对象必须以提升的权限运行。权限较低的用户必须能够执行这些对象,但不能以具有权限的帐户直接登录。要实现这一点,请使用创建一个无登录帐户mysql_no_login,授予它所需的权限,使用 DEFINER该帐户定义对象,并将其包含 SQL SECURITY DEFINER在定义中。

    • 对代理帐户的访问必须始终通过通常的代理机制进行,绝不能由直接登录到代理帐户的用户进行。要实现这一点, mysql_no_login请在创建代理帐户时指定为身份验证插件。

    有关详细信息,请参阅 无登录可插入身份验证

  • MySQL 发行版现在尝试使用默认启用的 SSL 和 RSA 功能进行部署。

    为了更容易支持加密连接,使用 OpenSSL 编译的 MySQL 服务器现在可以在启动时自动生成 SSL 和 RSA 文件,如果它们丢失的话:

    • 如果启用了新系统变量,则服务器会自动在数据目录中生成服务器端和客户端 SSL 证书和密钥文件, 除指定auto_generate_certs之外 --ssl没有指定任何 SSL 选项,并且数据目录中缺少服务器端 SSL 文件。这些文件启用使用 SSL 的加密客户端连接。

    • sha256_password_auto_generate_rsa_keys 如果启用了新系统变量、未指定 RSA 选项并且数据目录中缺少 RSA 文件,则 服务器会自动在数据目录中生成 RSA 私钥/公钥对文件 。这些文件允许使用 RSA 通过未加密的连接为 sha256_password插件验证的帐户安全交换密码。

    服务器端--ssl选项值现在默认为所有服务器启用。对于使用 OpenSSL 编译的服务器,如果--ssl 启用并且未给出其他 SSL 选项以显式配置 SSL,则服务器会尝试在启动时自动启用 SSL:

    • 如果服务器在数据目录中找到名为 ca.pemserver-cert.pem和 的有效 SSL 文件server-key.pem,它会启用 SSL 以允许客户端进行 SSL 连接。(这些文件不需要自动生成;重要的是它们具有指定的名称并且有效。)

    • 如果服务器在数据目录中找不到有效的 SSL 文件,它会继续执行但不会启用 SSL。

    对于服务器自动找到并使用的任何 SSL 和 RSA 文件,它使用文件名来设置相应的系统变量(ssl_ca, ssl_cert, ssl_key, sha256_password_private_key_path, sha256_password_public_key_path)。

    有关详细信息,请参阅 配置 MySQL 以使用加密连接使用 MySQL 创建 SSL 和 RSA 证书和密钥

空间数据支持

  • InnoDB: SPATIAL索引现在可以用于 InnoDB表。InnoDB 支持空间数据类型的索引,包括 ALTER TABLE ... ALGORITHM=INPLACE用于在线操作 (ADD SPATIAL INDEX)。为了支持事务隔离属性,InnoDB使用谓词锁定。谓词锁锁定用于查询的最小边界矩形 (MBR),以便其他事务无法插入或修改与查询条件匹配的行。

    有关详细信息,请参阅 优化空间分析。和 空间索引的谓词锁。(漏洞#18674219)

  • 开放地理空间联盟指南记录了开放多边形(起点不等于终点的多边形)的使用,但 MySQL GIS 实现不支持它们。现在 MySQL 支持开放多边形:通过将起点附加到点序列,将开放多边形转换为封闭多边形。前:

    mysql> SELECT AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))'));
    +---------------------------------------------------------------+
    | AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')) |
    +---------------------------------------------------------------+
    | NULL                                                          |
    +---------------------------------------------------------------+

    后:

    mysql> SELECT AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))'));
    +---------------------------------------------------------------+
    | AsText(PolygonFromText('POLYGON((10 10,20 10,20 20,10 20))')) |
    +---------------------------------------------------------------+
    | POLYGON((10 10,20 10,20 20,10 20,10 10))                      |
    +---------------------------------------------------------------+

    (漏洞 #17168699)

  • GeometryCollection()NULL如果参数包含不受支持的几何图形,则返回 。现在 GeometryCollection()返回参数中包含的所有正确几何图形,即使存在不受支持的几何图形也是如此。(漏洞 #17168643)

  • 此 MySQL 版本增加了对 Boost.Geometry 库的使用,以提供更好的可靠性和增强的空间函数功能。结果,实现了几个以前未实现的函数,并且几个以前存在的函数现在接受更广泛的几何参数类型(或采用多个几何的函数的参数类型组合):

  • MySQL 现在包含用于在 GeoJSON 文档和空间值之间进行转换的函数: ST_AsGeoJSON()ST_GeomFromGeoJSON(). 有关详细信息,请参阅空间 GeoJSON 函数

  • MySQL 现在包括启用 geohash 值操作的函数,它为应用程序提供导入和导出 geohash 数据以及索引和搜索 geohash 值的功能:

SQL 模式注释

  • 不兼容的更改: 进行了这些 SQL 模式更改:

    • 事务存储引擎 ( STRICT_TRANS_TABLES) 的严格 SQL 模式现在默认启用。

    • SQL 模式的实现 ONLY_FULL_GROUP_BY变得更加复杂,不再拒绝以前被拒绝的确定性查询。

      • MySQL 现在可以识别非聚合的选定列何时在功能上依赖于(唯一确定的)GROUP BY列。

      • MySQL 对标准 SQL 进行了扩展,允许在HAVING子句中引用选择列表中的别名表达式。以前,启用 ONLY_FULL_GROUP_BY 会禁用此扩展,因此需要 HAVING使用无别名表达式编写子句。此限制已取消,因此HAVING无论是否 ONLY_FULL_GROUP_BY启用,该子句都可以引用别名。

      因此, ONLY_FULL_GROUP_BY现在默认启用,以禁止包含不能保证在组内唯一确定的表达式的非确定性查询。

    • 对默认 SQL 模式的更改会导致 sql_mode启用以下模式的默认系统变量值: ONLY_FULL_GROUP_BYSTRICT_TRANS_TABLESNO_ENGINE_SUBSTITUTION

    • ONLY_FULL_GROUP_BY 模式现在包含在 ANSISQL 模式所包含的模式中。

    • 一个新的功能,,ANY_VALUE()可用于强制 MySQL 接受它认为应该拒绝 ONLY_FULL_GROUP_BY 启用的查询。函数返回值和类型与其参数的返回值和类型相同,但不检查 ONLY_FULL_GROUP_BYSQL模式的函数结果。

    如果您发现 ONLY_FULL_GROUP_BY启用导致对现有应用程序的查询被拒绝,则这些操作中的任何一个都应该恢复操作:

    • 如果可以修改有问题的查询,请这样做,以便非确定性非聚合列在功能上依赖于GROUP BY 列,或者通过使用引用非聚合列 ANY_VALUE()

    • 如果无法修改有问题的查询(例如,如果它是由第三方应用程序生成的),请sql_mode在服务器启动时将系统变量设置为 not enable ONLY_FULL_GROUP_BY

    有关 SQL 模式和GROUP BY查询的更多信息,请参阅服务器 SQL 模式GROUP BY 的 MySQL 处理。(漏洞#18486310)

添加或更改的功能

  • 不兼容的更改:GET_LOCK()功能已使用元数据锁定 (MDL) 子系统重新实现,并且其功能已得到扩展:

    • 以前,GET_LOCK() 一次只允许获取一个命名锁,第二次GET_LOCK()调用会释放任何现有锁。现在 GET_LOCK()允许同时获取多个命名锁并且不释放现有锁。

      依赖 GET_LOCK()释放任何先前锁定行为的应用程序必须针对新行为进行修改。

    • 获取多个锁的能力引入了客户端之间死锁的可能性。MDL 子系统检测死锁并 ER_USER_LOCK_DEADLOCK在发生这种情况时返回错误。

    • MDL 子系统对锁名称施加了 64 个字符的限制,因此此限制现在也适用于命名锁。以前,没有强制执行长度限制。

    • 获得的锁 GET_LOCK()现在出现在 metadata_locksPerformance Schema 表中。列OBJECT_TYPE表示 USER LEVEL LOCKOBJECT_NAME列表示锁名称。

    • 一个新功能, RELEASE_ALL_LOCKS()允许一次释放所有获得的命名锁。

    有关详细信息,请参阅锁定函数

  • 不兼容的更改: 以前, mysql_upgrade通过调用mysqlmysqlcheck客户端 执行升级mysql_upgrade已被重新实现以生成所需的 SQL 语句本身并通过直接与服务器通信来执行它们。

    由于此更改,mysql_upgrade 现在支持 --bind-address启用用于连接到要选择的服务器的网络接口的选项。它还支持 --net-buffer-length--max-allowed-packet 选项,允许指定初始和最大通信数据包大小。

    同样由于此更改, mysql_upgrade不再支持该 --tmpdir选项。此选项指定用于向 mysql提供输入的临时文件的位置,但它不再有任何用途,因为mysql_upgrade不再调用 mysql。必须修改 任何调用 mysql_upgrade和使用 的升级脚本以删除该选项。--tmpdir

  • InnoDB: 为了获得最佳的关闭和恢复性能,关闭和恢复阶段现在由innodb_page_cleanersMySQL 5.7.4 中引入的多线程页面清理功能 () 提供支持。(漏洞 #18805275)

  • InnoDB: 已完成引入可附加事务概念的工作InnoDB(用于 AutoCommit / ReadOnly / ReadCommitted / NonLocking 事务)。这用于从InnoDB数据字典表中读取。与此同时,可附加的交易也暴露给了服务器。Data Dictionary 访问代码将使用它们来读取Data Dictionary 数据。

  • InnoDB: 您现在可以截断驻留在撤消表空间中的撤消日志。innodb_undo_log_truncate 使用配置选项启用此功能 有关详细信息,请参阅 截断撤消表空间

  • InnoDB: InnoDB内存分配现在已针对 性能模式进行检测,并将出现在 内存摘要表中。

  • InnoDB: 不再一次插入一条索引记录,而是 InnoDB在创建或重建索引时执行批量加载。这种创建索引的方法也称为排序索引构建。这种提高索引创建效率的增强功能也适用于全文索引。空间索引不支持它。

    一个新的全局配置选项, innodb_fill_factor定义了在排序索引构建期间每个页面上填充数据的空间百分比,剩余空间保留用于未来的索引增长。有关详细信息,请参阅 排序索引构建

  • InnoDB:FIL_PAGE_FLUSH_LSN字段,写入每个InnoDB系统表空间文件的第一页和InnoDB撤销表空间文件,现在只写入 InnoDB系统表空间的第一个文件(页码0:0)。

    作为这个补丁的结果,如果你有一个多文件系统表空间并决定从 MySQL 5.7 降级到 MySQL 5.6,你可能会在 MySQL 5.6 启动时遇到一条无效消息,指出日志序列号 xyibdata 文件中的不匹配yib_logfiles 中的日志序列号 。如果您遇到此消息,请重新启动 MySQL 5.6 以确保启动已正常运行。无效消息不应再出现。

  • InnoDB:innodb_buffer_pool_size 参数现在是动态的,允许您在不重新启动服务器的情况下调整缓冲池的大小。涉及将页面移动到内存中的新位置的调整大小操作是分块执行的。块大小可以使用新的 innodb_buffer_pool_chunk_size 配置选项进行配置。Innodb_buffer_pool_resize_status 您可以使用新的状态变量监视调整大小的进度 有关详细信息,请参阅 在线配置 InnoDB 缓冲池大小

    有关更多信息,请参阅在线配置 InnoDB 缓冲池大小

  • Replication: 从MySQL 5.6.0之前版本的master复制到MySQL 5.6.0及以上版本的slave时,slave需要的master_uuid值是 server_uuidmaster的值。该master_uuid值在较旧的 master 上不受支持,并且在这种复制情况下,在较新的 slave 上可能会变得无效。现在检查是否为空 master_uuid可确保从站对 . 使用空值master_uuid。(漏洞 #18338203)

  • 复制: 现在支持在从站上启用多线程时重试事务。在以前的版本中, slave_transaction_retries在使用多线程从站时被视为等于 0。(漏洞 #16390504,漏洞 #68465)

  • 复制: 只要在服务器上启用全局事务标识符 (GTID),它们现在就会记录在 MySQL 系统表中,这解除了之前在使用 GTID 进行复制时使用二进制日志记录的要求。如果禁用二进制日志记录,服务器会在 mysql.gtid_executed执行事务时将每个事务的 GTID 存储在表中。如果启用了二进制日志记录,那么,每当二进制日志轮换或服务器关闭时,服务器也会将先前二进制日志中所有事务的 GTID 写入新的二进制日志。

    由于该mysql.gtid_executed表可能会充满许多具有相同原始服务器和顺序事务 ID 的单事务 GTID 行,因此只要启用 GTID,服务器就会定期压缩此表。executed_gtids_compression_period您可以通过设置系统变量来控制压缩表的频率 。此变量的默认值为 1000,这意味着在每 1000 个事务之后应用表压缩。您可以将 设置 executed_gtids_compression_period为 0 以完全禁用压缩,但您应该意识到这样做可能会导致此表所需的空间显着增加。(见 mysql.gtid_executed 表压缩.)

    mysql.gtid_executed 表的压缩由专用线程执行。threads 您可以在Performance Schema 表中获取有关此线程状态的信息。(漏洞 #14730192)

  • 复制: 新变量 simplified_binlog_gtid_recovery 可用于更改二进制日志文件在恢复期间搜索先前 GTID 的方式,从而在存在大量二进制日志文件时加快该过程。(错误#69097、错误#16741603、错误#74071、错误#19686914)

  • 复制: 新的系统变量 binlogging_impossible_mode 控制如果服务器无法写入二进制日志时发生的情况,例如,由于文件错误。为了向后兼容,默认为 binlogging_impossible_modeIGNORE_ERROR这意味着服务器记录错误、停止记录并继续更新数据库。将此变量设置为ABORT_SERVER使服务器停止记录并在无法写入二进制日志时关闭。(错误#51014,错误#11758766)

  • 复制: 为了更容易地监视复制设置,各种与复制相关的变量已移至 performance_schema表中。这对于监控多源复制特别有用。

  • Replication: 新的SQL函数 WAIT_FOR_EXECUTED_GTID_SET() 使slave与master的当前同步选项独立于slave线程,并改进了返回值。

  • Replication: 新选项 binlog_group_commit_sync_delaybinlog_group_commit_sync_no_delay_count 提供了一种配置二进制日志同步的方法。这使得更多的事务可以同时同步到磁盘,从而减少提交一组事务的总时间,因为较大的组每组需要较少的时间单位。

  • 复制: 多线程从站可以使用新 slave_preserve_commit_order 变量来确保事务在主站上提交的顺序保留在从站上。这可以防止 slave 进入 master 未处于的状态,并且非常适合使用多线程 slave 进行复制读取横向扩展。

  • 5.6.17 引入的新 Debian7、Ubuntu12.04 和 Ubuntu14.04 发行版支持现在带有特定于平台的打包源,位于 packaging目录下,在 deb-precisedeb-wheezydeb-trusty目录中。(漏洞 #19020385)

  • CMake支持已更新以处理 CMake版本 3。(缺陷 #19001781)

  • 用于SAFE_HASH 实现的 rwlock 现在已针对性能模式进行了检测。仪器名称是 wait/synch/rwlock/mysys/SAFE_HASH::lock。(漏洞#18991366)

  • (未记录的)binary-configure.sh脚本已从 MySQL 发行版中删除。(漏洞#18694238)

  • 5.7 不支持 RHEL 4,因此该 support-files/RHEL4-SElinux文件已被删除。(漏洞 #18651087)

  • 删除 了(未记录的)FEATURE_SET CMake选项。(漏洞 #18521389)

  • Clang 的 -Wunused-private-field编译器警告选项报告的未使用私有字段已被删除。(漏洞#18489724)

  • thr_alarm.h并被 thr_alarm.c删除,因为它们几乎只包含死代码。剩余的实时代码已移至mysqld.cc. my_alarm.h并且 my_alarm.c也被删除了,实际使用的代码被移到了 my_lock.c. (漏洞#18411456)

  • 更新了CMake支持以处理 Sun C++ 5.13 的新目录布局。(错误#73034,错误#19010286)

  • 过时且无人维护的charset2html 实用程序已从 MySQL 发行版中删除。(错误#71897,错误#18352347)

  • --general_log澄清了mysqld的帮助文本 感谢 Andrew Gaul 提供的补丁。(错误#71463,错误#18127243)

  • 用于加载服务器端帮助表内容的fill_help_tables.sql文件现在包含以下语句以抑制二进制日志记录并防止表内容复制到从属服务器:

    SET sql_log_bin=0;

    因为帮助表内容特定于特定服务器版本,这可以防止将不正确的内容加载到从服务器中,而从服务器不一定运行与主服务器相同版本的 MySQL。(缺陷 #69564,缺陷 #17015822)

  • 为数字或枚举选项(例如--port="")提供的空字符串会产生不一致或令人困惑的行为。这样的空选项值现在被错误拒绝。(缺陷 #68055,缺陷 #16102788)

  • mysqladmin flush-logs命令现在允许提供可选 的日志类型,以指定要刷新的日志。在命令之后,flush-logs您可以提供以下一种或多种日志类型的空格分隔列表: binary、、、、、、、。 这些对应于可以为 SQL 语句指定的日志类型。感谢 Daniël van Eeden 提供补丁。(缺陷 #60878,缺陷 #12368203)engineerrorgeneralrelayslowFLUSH LOGS

  • 新的状态变量 Max_used_connections_time指示 Max_used_connections达到其当前值的时间。感谢 Jordi Prats 提供的补丁。(错误#59738,错误#11766596)

  • 以前,在 Unix 和类 Unix 系统上,MySQL 对发送服务器错误日志的支持syslog是通过让mysqld_safe捕获服务器错误输出并将其传递给syslog. 服务器现在包括本机syslog 支持,已扩展到包括 Windows。应使用mysqld 选项控制服务器错误记录到syslog、事件日志或文件。现在不推荐使用mysqld_safe选项这样做。有关将服务器错误输出发送到的详细信息,请参阅 错误日志syslog

    此外,在所有平台上,系统日志输出控制不同于将错误输出发送到文件或控制台。以前,这仅适用于 Windows。在 Unix 和类 Unix 系统上,错误输出现在可以根据需要定向到文件或控制台,以补充或代替系统日志。对于mysqldmysqld_safe都是如此。以前, mysqld_safe忽略了它的 选项,如果也给出--syslog了警告。--log-error(错误#55370,错误#11762739)

  • 如果连接 ID 超出 32 位限制并从 1 开始,服务器现在确保不会重新发布仍在使用的 ID。(缺陷 #44167,缺陷 #11752851)

  • 在内部,空间数据类型如 Geometry表示为 值,因此当使用该选项 BLOB调用时 , mysqldump现在以十六进制显示空间值。(错误#43544,错误#11752369)--hex-blob

  • 表的可扩展性InnoDB通过避免THR_LOCK锁得到改善。由于此更改,InnoDB之前等待THR_LOCK锁定的表的 DML 语句将等待元数据锁定:

    • 更新任何表(事务性或非事务性)的显式或隐式启动的事务将阻塞并被LOCK TABLES ... READ该表阻塞。这类似于LOCK TABLES ... WRITE工作原理。

    • 现在隐式锁定的表LOCK TABLES将使用元数据锁而不是THR_LOCK锁(对于 InnoDB表)进行锁定,并且除了锁之外还使用元数据锁进行THR_LOCK锁定(对于所有其他存储引擎)。隐式锁定发生在锁定视图的基础表、锁定表的触发器使用的表或从此类视图和触发器调用的存储程序使用的表。

      多表更新现在将阻塞并被LOCK TABLES ... READ 更新中任何表上的并发语句阻塞,即使该表仅用于读取。

    • HANDLER ... READ对于任何存储引擎都会阻塞并被并发阻塞LOCK TABLES ... WRITE,但现在使用元数据锁而不是THR_LOCK锁。

    前面的更改可以通过多种方式看到。例如,当一个会话中的 DML 语句 INSERT INTO t1 在另一个会话中被阻塞 LOCK TABLES t1 READ时:

    由于这些锁定更改而消失的问题:

    • 对于调试版本,并发执行LOCK TABLES ... READ影响同一个InnoDB表的 DML 语句可能会导致 Found lock of type 6 that is write and read locked错误日志中出现警告。

    • 在以下情况下执行 DDL 语句LOCK TABLES可能会导致死锁:1) 该 LOCK TABLES语句除了要被 DDL 更改的表之外,还有一些表被读取锁定或隐式锁定(例如,通过触发器)和 2) 有一些并发 DML 被阻塞在由LOCK TABLES和 3持有的PREPARE表级锁上必须等待 DML 语句的语句。

    (错误#42147,错误#11751331)

  • mysql客户端 现在指示 USE语句是否产生警告。(缺陷 #29965,缺陷 #11746951)

  • 在MySQL客户端/服务器端协议中,EOF和OK报文的作用是一样的,标记一次查询执行结果的结束。由于最近对 OK 数据包的更改(例如会话状态跟踪),并且为了避免重复 EOF 数据包中的更改,现在不推荐使用 EOF 数据包。

  • mysql系统数据库 中的服务器端帮助表和时区表现在 是InnoDB(事务性)表。以前,这些是MyISAM(非事务性)表。受影响的表是:

    help_category
    help_keyword
    help_relation
    help_topic
    time_zone
    time_zone_leap_second
    time_zone_name
    time_zone_transition
    time_zone_transition_type

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到 mysql数据库中。

    START TRANSACTIONCOMMIT语句已添加到用于填充时区表的mysql_tzinfo_to_sql的输出中,以确保重新加载操作是永久性的。

  • MySQL 服务器现在支持具有以下特征的离线模式

    • 没有 SUPER权限的已连接客户端用户将在下一个请求时断开连接,并出现相应的错误。断开包括终止正在运行的语句和释放锁。此类客户端也无法启动新连接,并收到相应的错误。

    • SUPER具有权限的 已连接客户端用户 不会断开连接,并且可以发起新的连接来管理服务器。

    • 复制从属线程被允许继续向服务器应用数据。

    只有拥有SUPER 权限的用户才能控制离线模式。要将服务器置于离线模式,请将新 offline_mode系统变量的值从OFF更改为ON。要恢复正常操作, 请offline_mode从 更改ONOFF。在离线模式下,拒绝访问的客户端会收到 ER_SERVER_OFFLINE_MODE错误消息。

  • ALTER TABLE ... EXCHANGE PARTITION语法现在包含一个可选 {WITH|WITHOUT} VALIDATION子句。WITHOUT VALIDATION指定时, 在 ALTER TABLE ... EXCHANGE PARTITION与分区交换填充表时不执行逐行验证,允许数据库管理员承担确保行在分区定义边界内的责任。WITH VALIDATION是默认行为,无需明确指定。有关详细信息,请参阅 使用表交换分区和子分区

  • mysqlslap现在有一个 --sql-mode选项可以为客户端会话设置 SQL 模式。

  • 现在可以 通过设置新的 系统变量来指定服务器用于磁盘内部临时表的存储引擎(请参阅MySQL 中的内部临时表使用)。internal_tmp_disk_storage_engine允许的值为MYISAM (默认值)和INNODB.

    由于此更改,不再阻止服务器使用内存中的临时表来查询GROUP BYor DISTINCT子句中包含大于二进制字符串 512 字节或非二进制字符串 512 个字符的字符串列。

  • Windows 的自定义 rwlock 实现已替换为标准 Windows API 调用。由于此更改,Windows 二进制文件需要 Windows 7 / Windows Server 2008 R2 或更新版本。特别是,Windows 二进制文件不再适用于 Windows Vista 或 Windows Server 2008(普通版,非 R2)。

  • Boost.Geometry 库现在需要构建 MySQL。两个新的CMake选项可以控制库源位置,以及是否自动下载:

    • -DWITH_BOOST=path_name 指定 Boost 库目录位置。也可以通过设置 BOOST_ROOTWITH_BOOST环境变量来指定 Boost 位置。

    • -DDOWNLOAD_BOOST=bool 指定如果 Boost 源不在指定位置,是否下载它。默认值为 OFF

    例如,如果您通常构建 MySQL 并将对象输出放在bldMySQL 源代码树的子目录中,则可以像这样使用 Boost 构建:

    mkdir bld
    cd bld
    cmake .. -DDOWNLOAD_BOOST=ON -DWITH_BOOST=$HOME/my_boost

    这会导致将 Boost 下载到 my_boost您的主目录下的目录中。如果所需的 Boost 版本已经存在,则不进行下载。如果所需的 Boost 版本发生变化,则会下载较新的版本。

    如果本地已经安装了 Boost 并且您的编译器会自行找到 Boost 头文件,则可能不需要指定前面的CMake选项。但是,如果MySQL需要的Boost版本发生变化,而本地安装的版本还没有升级,则可能会出现构建问题。使用CMake选项应该可以成功构建。

修正错误

  • 重要变更;分区:ALTER TABLE声明中,服务器接受REBUILD子分区的名称作为有效语法,即使 REBUILD在这种情况下关键字什么也没做。Now REBUILD在这种情况下被拒绝,并导致语句因错误而失败。(缺陷 #19075411,缺陷 #73130)

    参考资料:此问题是 Bug #14028340、Bug #65184 的回归。

  • 重要变更;复制: 如果一条DROP TABLE语句包含常规(非临时)表和临时表,或者如果它包含同时使用事务和非事务存储引擎的临时表,则在将其发送到二进制日志之前可能会被分成多条语句。现在,当使用 GTID 时,DROP TABLE不再允许影响这些表组合的语句,除非gtid_next系统变量的值为AUTOMATIC. 这是因为,在服务器上启用DROP TABLEGTID 的情况下,在刚才描述的情况下发出一个,而每个语句只有一个 GTID 关联(​​SQL 线程执行以下操作 SET gtid_next='uuid:number') 当没有足够的 GTID 分配给原始 . 之后的所有结果语句时,会导致问题DROP TABLE

    由于DROP TABLE语句相对于当前事务的行为因表特征而异,因此语句可能会被拆分,如下所示:

    • DROP TABLE立即提交常规(非临时)表

    • DROP TABLE使用事务存储引擎的临时表的一部分与当前事务一起提交(以下 COMMIT

    • DROP TABLE立即提交使用非事务性存储引擎的临时表

    在单个语句中命名所有这三种类型的表 会导致 MySQL 服务器在二进制日志DROP TABLE中将原始语句分成三个单独 的语句。DROP TABLE如果启用了 GTID 但 的值gtid_next 不是AUTOMATIC,则发出DROP TABLE混合前面描述的任何表类型的语句会导致服务器没有足够数量的 GTID 将所有结果语句写入二进制日志。此外, DROP TABLE IF EXISTS总是为语句中指定的所有表写入二进制日志,即使某些或所有表不存在。

    因为临时表的处理方式 DROP TABLE取决于它们是使用事务性存储引擎还是非事务性存储引擎,所以任何由DROP TEMPORARY TABLE不存在的语句命名的表都被假定为事务性的。这意味着,如果DROP TEMPORARY TABLE在 master 上发布了一个具有两个非事务性临时表的表,它只会写入一个DROP TABLE语句命名两个表。如果其中一个临时表不再存在于slave上,那么当SQL线程执行该语句时,由于它影响了一个非事务性(但存在的)临时表和一个不存在的事务性临时表,它试图将其分成多个语句;这会导致问题,因为 SQL 线程只有一个 GTID 用于原始语句,但必须在二进制日志中 DROP TABLE写入两个语句。DROP TABLE

    此外,当从服务器检测到主服务器已重新启动后删除临时表时,它会 DROP TABLE为每个伪线程和每个数据库记录一个语句,但在单个DROP TABLE语句中使用事务和非事务存储引擎组合临时表。

    现在,如果 gtid_next设置为 uuid:number 值,我们会在客户端会话中抛出一个错误,并DROP TABLE发出一条混合了前面描述的任何表类型的语句。

    此外,我们现在将不存在的临时表分组,并假设它们只有在语句删除至少一个事务性临时表时才是事务性的。如果没有事务性临时表被删除,任何不存在的临时表都被假定为非事务性临时表。

    如果主服务器重新启动,从服务器现在还可以正确处理临时表的删除。(漏洞 #17620053)

  • 重要变更;Replication:CHANGE MASTER TO语句中 密码的最大长度 以前,当使用更长的密码时,它会被接受,但任何多余的长度都会被服务器悄悄截断。在此修复之后,当密码的长度超过 32 个字符时,CHANGE MASTER TO将失败并出现错误。(缺陷 #11752299,缺陷 #43439)

  • 表现; Replication: 在处理dump线程时,半同步replication master通过检查 的值来检查dump线程是否来自半同步slave rpl_semi_sync_slave_enabled,但是对这个线程执行的每一个操作都这样做,这对性能有很大的负面影响。现在这个检查只会在转储线程启动时进行一次,这在大多数情况下应该会显着提高半同步复制的性能。(漏洞 #17932935)

  • 创新数据库;分区:在 MySQL 5.6 或 5.7 中使用 大量分区InnoDB 表可能会消耗比以前版本的 MySQL 服务器中使用的相同表所使用的内存更多的内存。(错误#17780517,错误#70641)

    参考资料:此问题是 Bug #11764622、Bug #57480 的回归。

  • 创新数据库;Linux:使用 Linux futex 的TTASFutexMutex互斥实现未能请求 m_lock_word对齐。(缺陷 #19525395,缺陷 #73760)

  • InnoDB: 如果在操作期间删除索引操作后发生崩溃 TRUNCATE TABLE,则根页面可能处于空闲状态。在崩溃恢复时, LSN检查在尝试固定根页面时无法检查空闲页面,从而导致断言。(漏洞 #19520482)

  • InnoDB:用中 函数中 替换了goto语句 。(漏洞 #19488149)iffil_mutex_enter_and_prepare_for_iofil0fil.cc

  • InnoDB:INSERT对具有空间数据列的表 的(漏洞 #19474851)

  • InnoDB: 删除了与InnoDB trx_sys页面中存储的二进制日志信息相关的未使用代码。(漏洞#19471743)

  • InnoDB: 操作ALTER TABLE ... ADD FOREIGN KEY可能导致严重错误。(缺陷 #19471516,缺陷 #73650)

  • InnoDB: 减少mem_heap_zalloc调用 upd_create. 只需一次调用即可为 分配内存upd_t。(缺陷 #19297656,缺陷 #73272)

  • InnoDB: 在调试版本中,INSERT 影响压缩表的操作会引发与同步相关的断言。(漏洞 #19295893)

  • InnoDB: 一个ALTER TABLE操作提出了一个fk_tables.empty()断言。调用后 dict_load_foreigns(),应加载所有由外键链接的关联表,以确保缓存外键。(漏洞 #19267051)

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

  • InnoDB: 从事务池返回的事务未处于干净状态。(漏洞#19244969)

  • InnoDB:MLOG_CHECKPOINT执行日志检查点时错误地省略了标记 。(缺陷 #19233510,缺陷 #73304)

  • InnoDB: 在崩溃恢复时,InnoDBexit()在遇到损坏或不一致时调用。一些exit()电话已被删除,以允许InnoDB正常关闭。(缺陷 #19229231,缺陷 #73300)

  • InnoDB: 当定义了多个 daemon_memcached_option选项时, INFORMATION_SCHEMA.GLOBAL_VARIABLES 表和SHOW VARIABLES 语句应该只显示 daemon_memcached_option在命令行字符串或MySQL配置文件中定义的第一个选项。(缺陷 #19204759,缺陷 #73287)

  • InnoDB:在性能测试条件下反复 运行SHOW ENGINE INNODB STATUS可能会导致严重错误。(漏洞 #19196052)

  • InnoDBone_flush: 从storage/innobase/include/log0log.h. (错误#19192364,错误#73269)

  • InnoDB: 使用单个 get命令检索多个值将返回不正确的结果而不是错误消息。InnoDB memcached插件当前不支持使用单个 get命令检索多个值。(缺陷 #19172212,缺陷 #72453)

  • InnoDB: 尝试对超时键执行操作会导致memcached守护进程崩溃并重新启动。(错误#19172013,错误#72586)

  • InnoDB:ALTER TABLE不对聚集索引执行排序 的(漏洞 #19163915)

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

  • InnoDB: 改进了与崩溃恢复错误处理相关的错误处理、诊断和测试覆盖率。(缺陷 #19145637,缺陷 #73179)

  • InnoDB: 改进了对 handler::records(). (漏洞 #19142753)

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

  • InnoDB: 事务隔离级别小于或等于 READ COMMITTED,在扫描唯一二级索引以检查重复项时未采用间隙锁。因此,重复检查逻辑无法在唯一二级索引中允许重复的键值。(漏洞 #19140907)

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

  • InnoDB:innodb_adaptive_hash_index动态禁用 导致清除线程断言 时发生的竞争条件 (缺陷号 19069698)

  • InnoDB: 在MySQL 5.7.5 中删除了CMake选项。默认情况下启用此选项,但对于不支持原子操作的系统可以禁用。从 MySQL 5.7.5 开始,构建 MySQL 需要支持原子操作,这使得该 选项已过时。(漏洞 #19061440)INNODB_PAGE_ATOMIC_REF_COUNT INNODB_PAGE_ATOMIC_REF_COUNT

  • InnoDB: 在调试版本中,无效rw_latch == RW_NO_LATCH断言会导致服务器停止。(漏洞#18977128)

  • InnoDB: 向自适应哈希索引代码添加调试断言,以检查缓冲区块中的表空间 ID 是否与索引空间匹配。(错误#18965518,错误#72986)

  • InnoDB: 在恢复期间,将表标记为损坏时会发生分段错误。(漏洞#18942294)

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

  • InnoDB:os_event_is_set 函数 的代码注释storage/innobase/os/os0event.cc 不正确。(错误#18940008,错误#72919)

  • InnoDB:BLOB插入数据 时会发生锁定顺序冲突 (漏洞 #18883885)

  • InnoDB: 对于 PowerPC,互斥自旋循环InnoDB中硬件线程的优先级 InnoDB感谢斯图尔特史密斯的贡献。(缺陷 #18842925,缺陷 #72754)

  • InnoDB: 运行innodb_memcached_config.sql脚本后配置脚本失败 mysql_secure_installation,删除了 MySQLtest数据库。如果数据库不存在, innodb_memcached_config.sql脚本现在会创建该test(错误#18816381,错误#72678)

  • InnoDB:从InnoDB memcached API 中 删除了未使用的函数定义和声明 (缺陷 #18815992,缺陷 #72723)

  • InnoDB: CACHE_LINE_SIZE对于 PowerPC,从 64 字节更改为 128 字节。(缺陷 #18814859,缺陷 #72718)

  • InnoDB: 打开具有数千个子表的父表可能会导致信号灯等待时间过长。(漏洞 #18806829)

  • InnoDB: trx_cleanup_at_db_startup无法重置 trx->rsegs->m-redo调试代码中的内容。(漏洞#18795594)

  • InnoDB:mysqldinnodb_data_file_path启动时,使用该选项指定多个数据文件 在数据写入第二个文件后返回fsp 标头错误中的 Space id 。(漏洞#18767811)

  • InnoDB: 存储BLOB数据时, InnoDB未能在分配页面之前保留所需的表空间页面,从而引发断言INSERT。(漏洞#18756233)

  • InnoDB: 一个失败的就地ALTER TABLE 操作会在数据字典中留下非唯一的临时文件名,从而防止ALTER TABLE由于临时文件名冲突而在同一个表上进行未来的操作。ut_time()为避免此问题,通过附加一个静态全局编号使临时文件名具有唯一性,该全局编号使用和初始化为随机分布的 32 位编号 ut_crc32()。然后为每个分配的临时文件名自动增加该数字。以前,临时文件使用格式命名#sql-ibtid,其中 tid是表 ID。临时文件现在使用格式命名#sql-ibtid-inc,其中tid表 ID 和 inc是递增的数字。(错误#18734396,错误#72594)

  • InnoDB: 错误 #11758237 的修复引入的回归导致cursor->index->name == TEMP_INDEX_PREFIX断言。(漏洞 #18723872)

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

  • InnoDB: 对于单项全文搜索,已删除的文档包含在逆向文档频率 (IDF) 计算中。(错误#18711306,错误#72548)

  • InnoDB:page_create函数已经过优化,可以使用更简单的函数来初始化页面。(漏洞 #18704384)

  • InnoDB:DELETE对具有全文搜索索引的表 的(漏洞 #18683832)

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

  • InnoDB: 待导入的表空间文件(FIL_TYPE_IMPORT) 转换为普通表空间文件( ) 后没有刷新FIL_TYPE_TABLESPACE,导致打开的文件过多。(漏洞#18663997)

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

  • InnoDB:InnoDB构建为共享库时,尝试加载InnoDB全文搜索 (FTS)INFORMATION_SCHEMA插件将失败,并出现无法打开共享库 'ha_innodb.so'错误。(缺陷 #18655281,缺陷 #70178)

  • InnoDB: 调用memcached flush_all命令时,InnoDB 尝试初始化连接和事务。如果事务处于TRX_STATE_NOT_STARTED 状态,InnoDB未能设置 CONN_DATA->CRSR_TRX为 NULL,导致严重错误。(漏洞#18652854)

  • InnoDB:对包含列的表 的INSERT操作BLOB引发了断言。(漏洞 #18646430)

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

  • InnoDB:INSERT对具有 GEOMETRY列 的rtr_page_split_and_insert(). (漏洞#18644435)

  • InnoDB: 临时表空间文件 (ibtmp1) 由page_cleaner线程保持打开状态,无法在启动时删除,导致挂起。(漏洞#18642372)

  • InnoDB: MySQL 5.6.5 中引入的回归会导致在系统表空间(空间 0)中创建全文搜索索引表,即使 innodb_file_per_table已启用。(漏洞#18635485)

  • InnoDB: 从 5.6.10 升级到 MySQL 5.6.18 及以下版本后,InnoDB将尝试在服务器启动时重命名过时的全文搜索辅助表,从而导致断言失败。(缺陷 #18634201,缺陷 #72079)

  • InnoDB: 在极少数情况下,清除过程会尝试删除未标记为删除的二级索引记录,从而导致二级索引不一致。(漏洞#18631496)

  • InnoDB:OPTIMIZE TABLEInnoDB表上运行后,运行SELECT使用空间索引的语句可能会导致崩溃。(错误#18619945,错误#72361)

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

  • InnoDB: 在启动时 在遇到活动的主线程时innodb_file_per_table=ON会引发 srv_get_active_thread_type() == SRV_NONE(缺陷号 18598813)

  • InnoDB: InnoDB会尝试合并一个 b 树更改缓冲区以用于专用的撤消表空间。(漏洞 #18593561)

  • InnoDB: 包含unistd.hinnodb.cmake调试版本中启用 futexes。(错误#18522549,错误#72225)

  • InnoDB: 将在操作的步骤中TRUNCATE TABLE写入页面级重做日志。(漏洞#18511398)DROP TABLETRUNCATE TABLE

  • InnoDB:COMMIT与全文搜索相关 的(漏洞 #18503734)

  • InnoDB: srv_active_wake_master_thread()直接在innobase_commitand innobase_prepare,唤醒master线程自增srv_activity_countsrv_active_wake_master_thread()只应在提交写入事务后调用,而不应在只读事务或回滚后调用。此修补程序还将对的一些调用替换为srv_active_wake_master_thread() 对 的调用ib_wake_master_thread()。(错误#18477009,错误#72137)

  • InnoDB: 在外DB_LOCK_WAIT键检查期间导致冗余删除标记,导致断言失败。(漏洞 #18451287)

  • InnoDB:UNIV_SYNC_DEBUG启用后,延迟调用 将sync_check_enable()导致 m_enabled断言失败。(漏洞#18433658)

  • InnoDB: 将在表空间导入完成之前InnoDB写入重做日志以进行 IMPORT TABLESPACE(漏洞#18424134)

  • InnoDB:InnoDB memcached 插件将 在plugin_del不获取lock_plugin互斥锁的情况下调用。此错误修复还解决了 ib_cursor_delete_row. (漏洞 #18409840)

  • InnoDB: 函数os_event_wait_time_low有时会OS_SYNC_TIME_EXCEEDED在同步时间结束前返回。(漏洞#18386498)

  • InnoDB: 启用持久统计信息后,SHOW TABLE STATUS输出和 TABLE_ROWSINFORMATION_SCHEMA.TABLES可能会报告具有外部存储页面的表的表行数不正确。(漏洞 #18384390)

  • InnoDB:在分区表上 运行SELECT导致内存访问冲突memcpy()。(漏洞 #18383840)

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

  • InnoDB: 错误#18069105 的修复引入的回归可能导致表损坏和断言失败。(漏洞 #18368345)

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

  • InnoDB: 数据文件在调用之前没有打开 fil_fusionio_enable_atomic_write(),导致断言失败。(漏洞#18368241)

  • InnoDB: Bug#17699331 的修复导致读/写锁的创建和销毁率很高,从而导致性能下降。(漏洞 #18345645,漏洞 #71708)

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

  • InnoDB: 重做日志子系统的代码质量改进。(漏洞 #18345004)

  • InnoDB:ostream添加了用于错误记录 的 C++(漏洞 #18320915)

  • InnoDB: 删除了recv_max_parsed_page_no仅在诊断错误消息中使用的代码变量。(漏洞 #18312967)

  • InnoDB: buf_pool->flush_rbt仅用于恢复,将分配给数据库创建并且永远不会释放。(漏洞 #18253089)

  • InnoDB: 调用sched_getcpu会导致页面错误。(漏洞 #18225489)

  • InnoDB: 在调用之前 ib_heap_resize无法验证 new_size是否大于或等于 。(漏洞 #18178915)old_sizememcpy

  • InnoDB: 崩溃恢复并UNIV_DEBUG 启用后,清除因buf_pool_from_bpage(bpage) == buf_pool断言失败而失败。(漏洞#18154145)

  • InnoDB:buf_page_release_latch() in中的 断言代码buf0buf.ic过于严格。(漏洞 #17869571)

  • InnoDB: 对于每个插入,memset将被调用三次来为系统字段分配内存。为了减少 CPU 使用率,这三个memset调用现在合并为一个调用。(缺陷 #17858679,缺陷 #71014)

  • InnoDB: Bug#16418661 的修复 启动代码buf_flush_list()的逻辑 InnoDB(错误#17798076,错误#70899)

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

  • InnoDB:在操作 期间重命名临时表的问题ALTER TABLE会引发断言并向错误日志打印警告。临时表名称不够唯一。(漏洞 #17713871)

  • InnoDB:需要重建表 的就地ALTER TABLE操作会对聚簇索引进行排序,即使主键顺序保持不变。此行为导致不必要的临时表使用和 I/O。(漏洞#17657223)

  • InnoDB: 在某些情况下,自适应哈希索引闩锁 (btr_search_latch) 是持久的。使用基于原子的 rw-locks(读写锁),持久自适应哈希索引锁存器是不必要的,并且可能会阻止其他自适应哈希索引更新。(错误#17554489,错误#70216)

  • InnoDB: 竞争条件fts_get_next_doc_id 导致Duplicate FTS_DOC_IDCannot find index FTS_DOC_ID_INDEX in InnoDB index translation table错误。(错误#17447086,错误#70311)

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

  • InnoDB: 启用InnoDB表监视器会导致ib_table->stat_initialized 断言失败。(漏洞 #17039528,漏洞 #69641)

  • InnoDB: 为大型外部存储字段重做日志写入 BLOB可能会覆盖最近的检查点。5.6.20 补丁将重做日志 BLOB写入的大小限制为重做日志文件大小的 10%。5.7.5 补丁在不施加限制的情况下解决了该错误。对于 MySQL 5.5,该错误仍然是一个已知限制。(错误#16963396、错误#19030353、错误#69477)

  • InnoDB:CREATE TABLE当字段数超过行大小限制时 BLOB打印 的错误日志消息 TEXT没有提供足够的信息。错误消息现在提供最大行大小、当前行大小以及导致超过最大行大小的字段。(错误#16874873,错误#69336)

  • InnoDB:ALTER TABLE对具有损坏的外键约束的表进行 就地(漏洞 #16869435)

  • InnoDB:lock_number_of_rows_locked函数使用位向量来跟踪事务持有的记录锁的数量。为了优化报告,位向量被一个简单的计数器取代。(漏洞 #16479309,漏洞 #68647)

  • InnoDB: 将一条记录插入到一​​个InnoDB表中,其键落在整页的最大键和下一页的最小键之间,可能会导致不必要的页面拆分和页面填充不足。如果插入点位于页面末尾,InnoDB现在会尝试在拆分页面之前插入到下一页。(漏洞 #15923864,漏洞 #67718)

  • InnoDB:在脏页百分比达到至少 1% 之前, 使用 innodb_max_dirty_pages_pct=0 缓冲池不会启动刷新,这将留下最多 1% 的脏页未刷新。(缺陷 #13029450,缺陷 #62534)

  • InnoDB: 由于不同处理器类型的内存顺序不同,一些互斥锁和读写锁标志的读取不一致。(缺陷 #11755438,缺陷 #47213)

  • InnoDB: 文件中的调试断言代码row0ins.cc没有说明 rw-lock 共享独占(sx-lock)模式,导致断言失败。(错误#73534,错误#19420253)

  • InnoDB: 使用foreign_key_checks=0InnoDB允许删除外键约束所需的索引,将表置于不一致状态并导致在表加载时发生的外键检查失败。InnoDB现在可以防止删除外键约束所需的索引,即使使用foreign_key_checks=0. 在删除外键索引之前必须删除外键约束。(错误#70260,错误#17449901)

  • 分区:index_merge_intersection标志(默认启用)或 index_merge_union通过系统变量的设置启用标志时 存储引擎的分区表以及缺少主键的optimizer_switch分区表执行时返回不正确的结果 (漏洞#18167648)MyISAMInnoDB

    参考资料:另请参阅:Bug #16862316、Bug #17588348、Bug #17648468。

  • 分区: 从主键中有多个列并按 分区的表中进行选择,主 键定义中列出的最后一个(最右边的)列返回了不正确的结果。(缺陷 #17909699,缺陷 #71095)LIST COLUMNS(R)R

  • 复制: 修改了误导性或混淆性错误消息,这些消息是在以下 2 种情况下使用 带有 选项 的mysqlbinlog时产生的:--raw

    (缺陷 #19459836,缺陷 #73625)

  • 复制: 修复 Bug #16861624 后,杀死等待提交锁的多线程从属工作者导致调试断言失败。此修复可确保不会发生这种情况。(漏洞 #19311260)

  • 复制: 与正在重试事务的从属工作线程相关的临时错误在SHOW SLAVE STATUS. 此修复可确保从属工作线程不会在从属状态中存储临时错误。(漏洞 #19282301)

  • 复制: 损坏的标头长度 FORMAT_DESCRIPTION_LOG_EVENT可能导致服务器意外停止。这是因为 FORMAT_DESCRIPTION_LOG_EVENT如果标头长度太短,则会被视为无效。(漏洞 #19145712)

  • 复制: 删除了在将 GTID 添加到 GTID 集时由内部函数获取的不必要的写锁,这将提高函数的性能以及在此类操作期间依赖它的代码。(缺陷 #18963555,缺陷 #72977)

  • 复制:rpl_semi_sync_master_wait_no_slave设置 和 rpl_semi_sync_master_wait_for_slave_count 变量后, 半同步复制未按预期工作 变量的值改变了,但是相关的内部状态在初始化时没有更新。(错误#18835117,错误#18466390)

  • 复制: RESET SLAVE ALL没有清除 IGNORE_SERVER_IDS,尽管此语句应该清除由设置的任何值 CHANGE MASTER TO。现在 RESET SLAVE ALL总是清空要忽略的服务器 ID 列表,无论何时执行。(漏洞#18816897)

  • 复制: 相同的内部功能在重置或启动从站时会产生三个类似的问题。这三个问题列在这里:

    • RESET SLAVE自动将心跳周期 ( Slave_heartbeat_period) 设置为其默认值。

    • RESET SLAVE自动设置 SSL_VERIFY_SERVER_CERT为默认值。

    • 当服务器未配置为从服务器时(即,CHANGE MASTER TO尚未执行任何语句时),随后的失败 START SLAVE是预料之中的,但具有将心跳周期重置为默认值的意外副作用。

    该函数已被重写,这样影响心跳或 SSL 证书使用的代码已被删除或移动到更合适的位置,消除了以前看到的副作用RESET SLAVE或失败 START SLAVE

    作为此修复的一部分,为了能够在更改 master 时默认启用心跳,如果给定主机和端口但未在 CHANGE MASTER TO语句中指定心跳周期,我们将其强制为默认值。(错误#18791604、错误#18778485、错误#18777899)

  • 复制: mysqlbinlog --raw没有检查由失败的写入引起的错误,这可能导致二进制日志的静默损坏。现在在这种情况下它会因错误而停止。(错误#18742916,错误#72597)

  • 复制: 提交事务时,现在使用一个标志来检查线程是否已创建,而不是检查线程本身,这会占用更多资源,尤其是在使用 master_info_repository=TABLE. (漏洞 #18684222)

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

  • 复制: 当一个从属工作线程试图执行一个太大的语句时,产生的错误导致崩溃。现在在这种情况下,错误会被截断以适应缓冲区的大小。(漏洞#18563480)

  • 复制: 日志轮换事件可能导致 group_relay_log_pos在组内错误地向前移动。这意味着,当事务被重试时,或者如果 SQL 线程在一个或多个日志轮换后的事务中间停止(例如事务或组跨越多个中继日志文件),部分或全部组是默默跳过。

    此问题已通过更正用于在更新日志位置作为中继日志轮换的一部分时避免触及 SQL 线程的坐标的逻辑中的问题得到解决,从而可以在不使用多线程从属时更新 SQL 线程的坐标,即使在一群人中间。(漏洞#18482854)

  • 复制: 当使用启用的 GTID 时 由于部分事务在恢复 I/O 线程之前未正确回滚而MASTER_AUTO_POSITION 失败并出现 ER_GTID_NEXT_TYPE_UNDEFINED_GROUP此修复可确保正确回滚部分事务。(漏洞 #18472603)

  • 复制: 当使用基于行的复制时,更新或删除主服务器上不存在的行会导致从服务器在尝试处理更改时失败。InnoDB缺少主键的表会出现此问题(错误#18432495,错误#72085)

  • 复制: 多线程从站现在检查是否有空闲工作人员可用于分派下一个事件。在以前的版本中,如果线程协调器找不到空闲的工作线程,则多线程从站会因工作线程错误而崩溃。崩溃是在协调器没有返回空闲工作人员时引起的,例如,如果协调器同时使用 STOP SLAVE. (漏洞 #18363515)

  • 复制: 从 MySQL 5.5 或更早版本的主服务器复制到 MySQL 5.6 或更高版本SOURCE_UUID的从服务器时,从服务器表的列 performance_schema.replication_connection_status 包含随机数据。现在在这种情况下, SOURCE_UUID留空。(漏洞 #18338203)

  • 复制: 在中继日志初始化期间,线程上下文被用作重建检索到的 GTID 集的标志,该操作不依赖于此参数。如果在遗留复制场景以外的其他上下文中调用中继日志初始化,这可能会出现问题;如果调用是在线程上下文始终存在的上下文中进行的,则会阻止集合的重建。当线程上下文不存在时,也会发生相反的情况,这会导致执行两次初始化。

    为避免此类问题,线程上下文标志被替换为允许在所有上下文中重建但防止多次调用的新标志。(漏洞#18337036)

  • 复制:mysqlbinlog将多个二进制日志文件处理成单个输出文件时,该文件不处于对时间点恢复有用的状态,当它因错误而失败时,当@@SESSION.GTID_NEXT 设置为 GTID 时,您必须在 COMMIT 或 ROLLBACK 之后显式地将其设置为不同的值。请查看 GTID_NEXT 变量手册页以获取详细说明。当前 @@SESSION.GTID_NEXT 是 ' xyz'。当 mysqlbinlog处理包含 GTID 的二进制日志时,它会输出 语句,但 每当发生提交时都会设置为未定义;这离开了SET gtid_nextgtid_nextgtid_next当服务器完成处理 mysqlbinlog的输出时未定义。当下一个二进制日志文件以一个或多个匿名语句或事务开始时,gtid_next 的组合在第一个二进制日志末尾未定义,第二个二进制日志包含匿名事务,导致前面描述的错误(错误 1837, ER_GTID_NEXT_TYPE_UNDEFINED_GROUP)。

    为了解决这个问题,现在,每当mysqlbinlog 遇到这种情况时,它都会SET gtid_next = AUTOMATIC根据需要插入,以避免使以前的二进制日志gtid_next未定义。

    此外,作为此修复的结果, mysqlbinlog不再为每个二进制日志输出会话变量信息;现在,这个值只打印一次,除非它发生变化。(错误#18258933,错误#71695)

  • 复制:LOAD DATA当写入二进制日志时, 引号并不总是被正确处理 (缺陷 #18207212,缺陷 #71603)

  • 复制:在和master_info_repository 之间 更改在输出列和表列 中 产生重复值 。这可能是因为在将新值插入列表时检查重复项之前,服务器内部存储的 ID 列表并不总是排序。现在,在执行此检查之前,始终对要忽略的服务器 ID 列表进行排序。(错误#18192817、错误#18593479、错误#18920203)TABLEFILEReplicate_Ignore_Server_IdsSHOW SLAVE STATUSIgnored_server_idsmysql.slave_master_info

  • 复制: 在某些情况下,服务器错误处理了触发器和存储过程,这些触发器和存储过程在被调用时试图修改其他表 CREATE TABLE ... SELECT。现在,这已作为错误正确处理。(漏洞 #18137535)

  • 复制:REPLICATE_WILD_DO_TABLEREPLICATE_WILD_IGNORE_TABLE选项 CHANGE REPLICATION FILTER可用于不包含句点 (.) 字符的值,即使这些选项的值必须采用 .. 格式(错误 #18095449)db_name.tbl_name

  • 复制: 在使用事务存储引擎的表上使用时,失败TRUNCATE TABLE仍会写入二进制日志,因此会在从属服务器上重放。当主服务器保留从服务器上删除的数据时,这可能会导致不一致。

    现在,在这种情况下TRUNCATE TABLE,只有在成功执行时才会记录。(缺陷 #17942050,缺陷 #71070)

  • 复制: 从 MySQL 5.6.20 开始,当用户指定的 AUTO_INCREMENT值超出当前值与当前AUTO_INCREMENT 值和影响行数的总和之间的范围时,它会被正确复制。在以前的版本中,即使用户指定的 AUTO_INCREMENT值超出范围,从站也会生成错误。(错误#17588419,错误#70583)

  • 复制: 当 I/O 线程在事务中间使用 GTID 和多线程从属重新连接到主时,它未能中止事务,在中继日志中留下部分事务,然后再次检索相同的事务。这发生在执行中继日志轮换时。现在,当重新连接时,服务器会在这种情况下轮转日志之前进行检查,并首先等待任何正在进行的事务完成。(漏洞 #17326020)

  • 复制: 在 Windows 上,如果错误日志文件已从活动的 MySQL 服务器中删除(丢失) ,则mysqldump会失败。(漏洞 #17076131)

  • 复制: 当二进制日志因收到 SIGHUP信号而旋转时,新的二进制日志不包含Previous_gtid_event后续处理该二进制日志的 GTID 事件所需的信息。现在,当 SIGHUP收到时,将采取措施确保服务器 Previous_gtid_event在将任何 GTID 事件写入新日志之前将必要的内容写入新日志。(漏洞 #17026898)

  • 复制:CLIENT_REMEMBER_OPTIONS不再重置压缩从属连接 的这会将所有选项的功能恢复到压缩的从属连接。(错误#72901、错误#18923691、错误#73324、错误#19244772)

  • 复制: 当使用基于行的复制时,将从属 slave_rows_search_algorithms 变量设置为HASH_SCAN导致 ER_KEY_NOT_FOUND错误,即使该记录存在于存储层中。此修复可确保正确维护每条记录的唯一键,并且不会发生这种情况。(错误#72788,错误#18860225)

  • 复制: 当使用基于行的复制时,如果从服务器的表结构与主服务器的表结构不兼容,则运行涉及大量事件的长事务可能会触发内存不足 (OOM) 错误。如果从属服务器上的表被手动更改,或者在具有不同数据类型的不同 MySQL 版本之间进行复制,则可能会出现这种不兼容的情况。这个 OOM 错误是因为为行转换创建的虚拟临时表直到事务结束才被释放,这在复制大量事件时是一个问题。

    从这个版本开始,这样的虚拟表在转换过程中被正确释放。(错误#72610,错误#18770469)

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

  • 复制: 复制期间复制服务器 UUID 导致问题时生成的错误消息已得到改进。slave 错误现在标识重复的服务器 UUID,master 错误标识已被杀死的僵尸线程。(错误#72578,错误#18731211)

  • 复制: 当一个事件组跨越多个中继日志文件时,从站可能会错误地识别 GTID 标头组边界。这意味着当一个事务被重试时,或者如果 SQL 线程在一些旋转之后在事务中间停止,则Gtid_log_event在从属服务器上被静默地跳过,并且事务被记录在从属服务器的 GTID 中。此问题还影响了在 启用 GTID 的情况下使用。如果在交易的中间,START SLAVE UNTIL MASTER_LOG_POS = log_pos;log_posGtid_log_event未被正确检测为事务的开始,复制在此事件之前停止。通过此修复,线程可以正确检测到它们是组的一部分,这用于检查 aGtid_log_event是否是事务的一部分。(错误#72313、错误#18652178、错误#18306199)

  • 复制:gtid_mode=ON,并且事务在从服务器上被过滤掉时,该事务的 GTID 仍然作为 事务记录在从服务器上(由 GTID 紧跟 BEGIN和 然后 COMMIT)。这对于防止下次从站重新连接或参与故障转移时重新传输事务是必要的。当前修复解决了与此类“ 交易 相关的两个问题

    (错误#71376、错误#18095502、错误#18145032)

  • 复制: 客户端应用程序应该能够 BINLOG_DUMP_NON_BLOCK在初始握手数据包 (COM_BINLOG_DUMP) 中设置标志。当服务器发送二进制日志中的最后一个事件时,连接到发出 COM_BINLOG_DUMP未设置标志的服务器的客户端不会收到 EOF,这会导致连接阻塞。这个标志在 MySQL 5.6.5 中被错误地删除,现在在当前版本中恢复了。

    作为此修复的一部分, 向mysqlbinlog--connection-server-id 添加了一个新选项。客户端可以使用此选项来测试 MySQL 服务器是否存在此问题。(错误#71178,错误#18000079)

  • 复制: 在使用半同步复制的主服务器上, rpl_semi_sync_master_wait_no_slave 已启用并 rpl_semi_sync_master_timeout设置为长时间超时,杀死 I/O 线程可能会导致服务器在关闭时挂起。此修复可确保如果转储线程发现没有半同步从站连接到主站, rpl_semi_sync_master_wait_no_slave则忽略设置并正确关闭。(错误#71047,错误#17879675)

  • 复制: 在半同步复制处于活动状态时卸载并重新安装半同步复制插件会导致复制失败。如果半同步复制处于活动状态,插件现在会检查它们是否可以卸载并产生错误。要卸载主端插件,必须没有半同步从属。要卸载从端插件,必须没有运行的半同步 I/O 线程。(错误#70391,错误#17638477)

  • 复制: 使用半同步复制时,如果二进制日志位置更改为从服务器上的未来位置,则在主服务器上生成断言错误。此修复可确保在这种情况下正确确认未来位置,并在从站上生成错误。(错误#70327,错误#17453826)

  • 复制:由于类型不兼容,来自不同 MySQL 版本 的包含时间类型字段(例如 、 和 )的表的TIMESTAMP复制DATETIME失败。MySQL 5.6.4 中添加的小数格式未正确转换。您现在可以根据 变量以任一格式正确复制 a。(错误#70124,错误#17532932)TIMETIMESTAMPTIMESTAMPTIMESTAMPslave_type_conversions

  • 复制: 当发生以下事件时,一组参与获取锁的线程可能会死锁:

    1. 转储线程从 slave 重新连接;在 master 上,一个新的转储线程试图杀死僵尸转储线程;获得了线程的LOCK_thd_data,它即将获得LOCK_log

    2. 正在执行的应用程序线程显示二进制日志,已获取LOCK_log和即将获取 LOCK_index

    3. 应用程序线程正在执行PURGE BINARY LOGS;已经获得 LOCK_index,即将获得 LOCK_thread_count

    4. 应用程序线程正在执行SHOW PROCESSLIST(或SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST)、已获取 LOCK_thread_count和即将获取僵尸转储线程的LOCK_thd_data.

    这导致 4 个线程按照与此处列出的线程相同的顺序死锁。

    出现这个问题是因为有 和 的排序规则,还有 和 LOCK_log的排序规则, 但是没有跨越这两组锁的排序规则。这是因为在函数的整个生命周期内调用的内部函数以及获取和释放每个线程 的 . 现在这个函数从全局线程列表中获取线程的副本并对它们执行遍历,并且仅在释放之后 。在此遍历期间,从全局线程列表中删除被阻止使用 LOCK_indexLOCK_thread_countLOCK_thd_datamysqld_list_processes()SHOW PROCESSLISTLOCK_thread_countLOCK_thd_dataLOCK_thread_countLOCK_thd_remove这样,否则会因删除而被销毁的副本在遍历期间仍然有效。此处显示了此修复后的锁定顺序:

    LOCK_thd_remove -> LOCK_thd_data -> LOCK_log -> LOCK_index -> LOCK_thread_count

    (漏洞 #69954,漏洞 #17283409)

    参考资料:另请参阅:Bug #73475、Bug #19364731、Bug #19365180。

  • 复制: 当一个正在等待提交锁的 SQL 线程被杀死并重新启动时,它会导致在从服务器上跳过一个事务。此修复可确保正确保留线程位置并在正确位置恢复事务。(漏洞 #69873,漏洞 #17450876)

  • Microsoft Windows: 为了帮助在 Windows 上进行崩溃分析,已将更多信息添加到写在 mysqld abort core-file选项启用时的核心文件中。(漏洞 #14041454)

  • 启用 DTrace 支持后,某些其他编译选项可能会导致构建失败。(漏洞 #19506247)

  • yaSSL 客户端代码未验证加密大小或会话 ID 长度,这可能会导致客户端退出。(错误#19463277,错误#19463565)

  • 在 fsync 操作之前,服务器报告等待,但它报告的是表锁定等待而不是同步等待。这是一个小问题,可能会导致线程池插件统计信息不正确。(漏洞 #19428231)

  • 由于在对内部临时表进行排序时不正确地处理表映射,优化器可能会引发断言。(漏洞 #19416826)

  • 如果客户端提供的缓冲区长度不准确,yaSSL 可能会导致预授权失败。(漏洞 #19370676,漏洞 #19355577)

  • 使用多范围读取 (MRR) 进行表访问可能会泄漏 Performance Schema 检测表句柄。(漏洞 #19301539)

  • 对于InnoDB全文搜索,无效的多字节gb10830字符可能导致服务器退出。(漏洞 #19233075)

  • 线程之间的竞争可能会导致尝试轮换审计日志文件时超时失败。(漏洞 #19184973)

  • 在 Windows 上,sql_yacc.ccsql_yacc.h构建过程中生成两次。如果允许并行进程,这可能会导致编译失败。(错误#19060850、错误#27470071、错误#89482)

  • 作为参数调用的重复函数 ExtractValue()并不总是被正确处理。(漏洞 #19051306)

  • 对于大型集,EXPORT_SET() 可能会产生未定义的结果或导致服务器退出。(漏洞 #19048609)

  • 无效utf16数据可能会导致服务器停止响应。(漏洞#18937504)

  • LPAD()如果填充字符串参数格式不正确,RPAD()可能会导致服务器退出。(漏洞 #18935421)

  • 优化器可以为临时表创建零长度列,从而导致服务器退出。(漏洞#18928848)

  • 在调试版本中,某些范围查询可能会导致断言失败。(漏洞#18921626)

  • Prepared_statement在和数据结构 之间不正确地复制查询字符串 THD 可能会导致服务器退出。(漏洞 #18920075)

  • Performance Schema 内存检测不支持表中的 ENABLED标志 setup_instruments或表中的消费者setup_consumers 。这已得到纠正,结果是不会收集不必要的统计信息并减少了开销。(漏洞 #18900309)

  • 当 a在其列表 SELECT中的联接中包含派生表并且列表包含 时, 即使基础结果集为空,也会返回 1。(漏洞#18853696)FROMSELECTCOUNT(DISTINCT)COUNT()

    参考资料:这个问题是 Bug #11760197 的回归。

  • 严格 SQL 模式下“日期的 转换失败可能会导致服务器退出。(漏洞 #18840123)

  • 在某些情况下,对值的模运算DECIMAL 可能会溢出并导致服务器退出。(错误号 18839617)

  • 启用优化器跟踪可能会导致服务器退出子句中带有子查询的查询HAVING。(漏洞 #18791851)

  • SHA 和 MD5 函数对使用内部 filename字符集的操作失败,并可能导致服务器退出。(漏洞#18786138)

  • 传递给mysqldump的大参数可能导致缓冲区溢出和程序退出。(漏洞#18779944)

  • 如果物化子查询从视图读取,并包含一个内部子查询,该内部子查询具有对视图列的外部引用,则结果可能不正确。(漏洞 #18770217)

  • 将错误的参数传递给SHA2() 可能会导致服务器退出。(漏洞#18767104)

  • 表上的空间操作InnoDB可能无法尝试访问不存在的索引统计信息。(漏洞#18743725)

  • ORDER BY给定无效参数的 GIS 函数的调用可能会导致服务器退出。(漏洞 #18701868)

  • 处理gb18030字符集的代码对单字符无效字符的断言过于严格。(缺陷号 18700668)

  • 元数据更改后,重新准备的触发器可能会导致服务器退出或修剪不正确的分区。(漏洞 #18684393)

  • mysql_secure_installation忽略了在无法识别的选项之后定义的选项。(漏洞 #18659533)

  • VALIDATE_PASSWORD_STRENGTH() 可以为某些参数进入无限循环。(漏洞 #18636291)

  • ALTER TABLE在分区表上可能会导致将错误的存储引擎写入表的.frm文件并以 SHOW CREATE TABLE. (漏洞 #18618561)

  • 在该表被截断后,服务器可能无法正确地重新准备引用另一个表的触发器。(错误#18596756、错误#72446、错误#18665853)

  • 编译器标志未传递给 DTrace,导致 32 位构建在 64 位平台上交叉编译时出现问题。(漏洞#18593044)

  • 对于表单上的条件t.key NOT IN (c1, c2, ...),如果一个或多个c1, c2NULL,则优化器生成了不正确的范围谓词,可能会产生不正确的结果。

    范围优化器将为空列表构建谓词(因为NULL值已从 中删除 NOT IN (in-list))。(错误#18556403,错误#18715670)

  • 将内存中的内部临时表转换为磁盘后,服务器可以使用指向旧表的指针,从而导致服务器退出。(漏洞 #18535226)

  • 对于使用松散索引扫描执行的查询,如果索引统计信息不可用,可能会产生不正确的成本估计。(漏洞#18497308)

  • 设置default_storage_engine 为错误的值可能会导致服务器稍后出现故障。(漏洞#18487724)

  • 在调试版本中,MAKE_SET() 在一个GROUP BY子句中提出了一个断言。(漏洞 #18487060)

  • 在调试版本中,子查询优化可能会过于积极地提出断言。(漏洞 #18486607)

  • 在调试版本中,对十进制值的 qsort 操作可能会引发断言。(漏洞 #18486249)

  • 对于调试版本,针对尝试在存储例程中使用游标获取INT无法放入变量 ( TINYINT) 的大值 ( ) 提出了断言。(漏洞 #18484649)

  • MOD对于非常小的十进制右手参数可能会导致服务器退出。(漏洞#18469276)

  • max_heap_table_size 系统变量设置为较大值 (20GB) 时,创建临时表或使用MEMORY 存储引擎创建表会导致服务器退出。(漏洞#18463911)

  • mysql_session_track_get_first() 并且 mysql_session_track_get_next() 仅在type 参数为时才返回信息SESSION_TRACK_SYSTEM_VARIABLES,并返回所有类型的信息,而不仅仅是 SESSION_TRACK_SYSTEM_VARIABLES. 现在他们返回所请求类型的信息,并且只返回该类型。(漏洞#18463441)

  • 对于mysql_upgrade,指定 --defaults-extra-file不存在的文件会在某些平台上导致分段错误。(漏洞#18443096)

  • 为系统变量分配一些值 session_track_system_variables 可能会导致服务器退出。(漏洞 #18405677)

  • mysql_install_db在读取 /dev/random以生成随机 root密码时可能会挂起。(漏洞 #18395378)

  • EXPLAIN FOR CONNECTION显示动态范围查询的过滤值不正确。(漏洞 #18395059)

  • 客户端库现在包含 X509_verify_cert_error_string()对 SSL 证书验证代码的调用,以便更可靠地检测无效证书。(漏洞 #18384260)

  • 使用AES_ENCRYPT()AES_DECRYPT()RANDOM_BYTES()无法缓存但被允许进入查询缓存的查询。(漏洞 #18383169)

  • 如果 MySQL 是使用该 -DINSTALL_LIBDIR=lib64选项 构建的,如果 MySQL 包被解压到具有不同安装前缀的位置,则mysql_config不起作用。此外,mysql_config不适用于某些 RPM 构建,因为它使用了不正确的安装前缀。(漏洞 #18382225)

  • 对于使用 Performance Schema 编译的插件,嵌入式服务器中的插件注册代码(在没有 Performance Schema 的情况下编译)失败。(漏洞#18363910)

  • 对于前缀或字符串列上的索引,由于不正确的字符计数,可能会在将二进制数据分配给列时发生索引损坏。(漏洞#18359924)

  • 由于缺少包含文件, HAVE_IB_LINUX_FUTEX CMake检查失败。(漏洞 #18353271)

  • MySQL 5.7.4 代码重组后,ORDER BYfor multiple-tableUPDATE 语句被忽略。(漏洞#18352634)

  • 在 MySQL 5.7.4 中将会话状态信息添加到客户端/服务器协议的 OK 数据包导致 mysql->info成员缺少终止空终止符。(漏洞 #18349102)

  • 优化器对连接缓存的不正确链接可能会导致服务器退出。(漏洞#18335908)

  • 在调试版本中,缺少十进制对象的正确对象初始化导致引发断言。(漏洞#18335446)

  • UNCOMPRESSED_LENGTH()可以NULL在不应该的时候返回。(漏洞 #18335269)

  • 在 Windows 上,由于mysqltest没有正确测试服务器终止 ,一些测试用例运行速度太慢 。(漏洞#18330694)

  • COM_RESET_CONNECTION命令未重置某些会话系统变量 :rand_seed1、、 rand_seed2timestamp此外,它没有清除警告,并且尽管它重置了 profiling变量,但没有重置分析信息。(错误#18329348、错误#18329560、错误#18328396、错误#18329452)

  • 某些INFORMATION_SCHEMA查询可能会导致服务器退出。(漏洞 #18319790)

  • EXPLAIN对于某些全文查询可能会引发断言。(漏洞 #18313651)

  • Solaris 特定的脚本包含在非 Solaris 软件包中并由其安装。(漏洞 #18305641)

  • DELETE在基表上定义为连接的视图上不允许。但是,MySQL在此类视图上错误地允许REPLACE(类似于 和 的组合DELETE) 。INSERT(漏洞#18286777)

  • 对于调试版本,0x00全文查询字符串中使用 ujis_japanese_ciutf8mb4_turkish_cieucjpms_bin排序规则的字符可能引发断言。(漏洞#18277305)

  • innobase_strnxfrm()写了一个字节太多。(漏洞#18277082)

  • 在 Windows 上,使用gb18030_unicode_520_ci 导致服务器退出。(漏洞 #18271429)

  • 内部likely()unlikely()宏与 Boost 符号冲突。为了解决这个问题,宏被转换为内联函数。(漏洞 #18242233)

  • 如果谓词的左侧IN是标量子查询但未返回任何行,则服务器可以退出。(错误#18223655,错误#18447874)

  • 对于涉及AND两个几何范围之一的查询,优化器可能会决定没有可用的索引,但无论如何都会尝试使用它,从而导致服务器退出。(漏洞 #18220153)

  • memmove()改进了调用的 参数检查my_net_read()。(漏洞 #18184793)

  • mysql_upgrade调用了 mysqlmysqlcheck 客户端,命令参数对其他进程可见。此问题已通过重新实现 mysql_upgrade以直接与服务器通信来解决,该更改在这些发行说明的其他地方进行了描述。(缺陷号 18180398)

  • yaSSL 代码在证书解码中有一个差一错误,可能导致缓冲区溢出。

    yaSSL 代码有一个opendir()没有相应的closedir(). (错误#18178997,错误#17201924)

  • EXPLAIN在带有 EXISTS包含 a 的子查询的查询 上UNION可能会导致服务器退出。多次执行准备好的EXPLAINUNION查询可能会导致服务器退出。(漏洞 #18167356)

  • mysqladmin 密码屏蔽了命令行上给出的旧密码,但没有屏蔽新密码。(漏洞 #18163964)

  • 对于InnoDB表,以 结尾的术语的布尔全文查询*可能会返回不正确的结果。(缺陷号 18128757)

  • 对于 XA 事务,-1 可能被指定为 XID 值的格式 ID 部分,导致并发 XA 语句的处理不当(服务器挂起或退出)。(漏洞 #18107853)

  • 如果发生数据包缓冲区内存的重新分配,客户端库可能会由于错误地将客户端错误编号映射到相应的消息而导致客户端退出。(漏洞 #18080920)

  • 对于表的全文查询InnoDB,尝试访问已删除的文档 ID 可能会导致服务器退出。(漏洞 #18079671)

  • MERGE 在为表查询 构建执行计划时,优化器可能会计算出负成本值。(漏洞#18066518)

  • ARCHIVE 在具有列 的表上执行相关子查询会AUTO_INCREMENT导致服务器挂起。(漏洞 #18065452)

  • mysql_get_server_version()使用无效的连接处理程序参数调用导致客户端退出 。 现在它返回 0 并报告 CR_COMMANDS_OUT_OF_SYNC错误。(漏洞 #18053212)

  • MyISAM临时文件可用于发起代码执行攻击。(漏洞 #18045646)

  • 如果优化器选择执行索引扫描,在某些情况下它可以选择非覆盖索引而不是覆盖索引。(漏洞 #18035906)

  • CMake -DWITHOUT_PARTITION_STORAGE_ENGINE=1选项不起作用 。作为解决此问题的一部分,实现了禁用存储引擎的首选语法。现在语法 优于 . 例如,使用: -DWITH_engine_STORAGE_ENGINE=0-DWITHOUT_engine_STORAGE_ENGINE=1

    -DWITH_EXAMPLE_STORAGE_ENGINE=0
    -DWITH_FEDERATED_STORAGE_ENGINE=0
    -DWITH_PARTITION_STORAGE_ENGINE=0

    而不是:

    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
    -DWITHOUT_FEDERATED_STORAGE_ENGINE=1
    -DWITHOUT_PARTITION_STORAGE_ENGINE=1

    (漏洞#17947926)

  • 使用客户端插件时,C 客户端库可能会泄漏内存。(漏洞#17933308)

  • 对于调试版本,DROP FUNCTION 函数名称太长会引发断言。(漏洞 #17903490)

  • BEFORE UPDATE触发器可以插入 到NULLNOT NULL 中。(漏洞#17864349)

  • UNION ALL 带有 一个查询块SQL_CALC_FOUND_ROWSLIMIT偏移量的查询报告了不正确的找到行数。(漏洞 #17833261)

  • 对于调试版本,DELETE 带有子查询的语句在需要标量子查询的上下文中返回多行可能会引发诊断区域断言。(漏洞#17787664)

  • GROUP BY在子查询的or 子句中 使用外部引用ORDER BY可能会导致服务器退出。(漏洞 #17748273)

  • 对于从 events_statements_current Performance Schema 表中选择的查询,添加ORDER BY 子句可能会产生不正确的结果。(漏洞 #17729044)

  • LOCK_thd_dataInnoDB trx_sys互斥锁 之间可能会发生(罕见的)死锁 。一个线程可以在另一个线程删除查询字符串时读取它。(漏洞 #17606098)

  • 在 Windows 上,调用mysql_thread_init()call withoutmysql_init()会导致客户端退出。视窗。mysql_thread_init()现在它返回一个非零结果,因为在使用 初始化客户端库之前 调用它是错误的mysql_library_init()。(漏洞 #17514920)

  • 对于REPLACE视图,视图中被替换的行可能与基表中的一行或多行冲突,其中一些行可能无法被视图访问。在某些情况下,可以替换视图无法访问的行。(漏洞 #17487701)

  • mysqldump可以在转储文件中创建表定义,从而在重新加载转储文件时导致Too many columns错误。(漏洞#17477959)

  • 使用LOAD DATA将固定长度的数据加载到视图中可能会导致服务器退出。(漏洞 #17458965)

  • 在子查询被转换掉的情况下,优化器跟踪可能导致服务器退出。(漏洞 #17458054)

  • UPDATE修改全文索引的语句可能导致服务器退出。(漏洞#17457755)

  • 向mysql 发送SIGQUITor SIGINT信号 可能会导致双重释放或损坏错误。(漏洞#17297324)glibc

  • 服务器可以让其套接字文件由第二个服务器接管,该服务器侦听不同的 TCP/IP 端口但具有相同的套接字文件。套接字文件也将通过第二台服务器的正常关闭而取消链接。为避免这种情况,服务器现在使用与套接字文件同名且具有 .lock后缀的锁定文件。(例如, /tmp/mysql.sock有一个锁文件 /tmp/mysql.sock.lock。)锁文件包含创建套接字文件的服务器进程的进程 ID。(漏洞 #17286856)

  • 如果查询同时具有MIN()/MAX()aggregate_function(DISTINCT) (例如,SUM(DISTINCT))并且使用松散索引扫描执行,则结果值 MIN()/MAX()设置不正确。(漏洞 #17217128)

  • 对于UNION语句,行检查值计算错误。ROWS_EXAMINED这表现为Performance Schema 语句表(例如 )列的 值过大 events_statements_current。(漏洞 #17059925)

  • 当一个没有索引的大表连接到多个有索引的小表时,优化器选择在大表上连接作为最后一个表,导致大量大表扫描。(漏洞#16838146)

  • 的行构造函数参数 INTERVAL()可能导致服务器退出。(漏洞 #16439419)

  • TINYBLOB在列中的 a或 GEOMETRY列 的前缀上创建索引时可能会引发断言InnoDB。(错误#16368875、错误#18776592、错误#17665767)

  • mysql_config_editor 将一些不再需要的文件打开,导致 Valgrind 警告。(漏洞#16368498)

  • ONLY_FULL_GROUP_BY与SQL 模式 相关的几个问题 已得到纠正:

    • ONLY_FULL_GROUP_BY 启用后,如果访问的表被视图替换,一些有效查询将被拒绝 。

    • 形式的查询符合 SQL2003 禁止的条件(隐藏 列与 组合),但在启用 SQL 模式 时不会被拒绝 。SELECT DISTINCT col1 ... ORDER BY col2ORDER BYDISTINCTONLY_FULL_GROUP_BY

    (错误#16021396、错误#18993257、错误#13581713)

  • 在 MySQL 5.7.0 中所做的更改以十六进制显示 XID 值(XA RECOVER如果它包含不可打印的字符)已被恢复,因为它给某些客户端带来了问题。现在该语句采用可选CONVERT XID 关键字,以便客户端可以按需请求十六进制的 XID 值。(漏洞 #14670465)

  • 使用非多字节算法跳过多字节字符串中的前导空格可能会导致服务器退出。(错误#12368495,错误#18315770)

  • 在安全更新模式下对没有键的表执行DELETE语句会导致 ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 错误。对于调试版本,IGNORE在语句中使用会导致引发断言。(错误#74493,错误#19873291)

  • MySQL.prefPaneOS X 10.8 及更高版本的二进制 MySQL 发行版现在将和 工具作为可配置选项 捆绑 MySQLStartupItem.pkg到主包中,而不是单独的包。(错误#74123,错误#19701502)

  • 对于调试版本,性能模式表的SELECT负载不足 events_statements_current 可能会引发断言。(漏洞 #73530,漏洞 #19419463)

  • root如果帐户身份验证插件是mysql_secure_installation则无法正常运行sha256_password。(错误#73148,错误#19127636)

  • lower_case_table_names服务器在确定从中读取文件的数据库目录 时未考虑该 值db.opts,因此可能从不正确的目录中读取文件。(错误#72900,错误#18923685)

  • SHA2()NULL如果散列长度参数是 NULL或不是允许值之一,则返回失败 。(错误#72856,错误#18899869)

  • 如果禁用, mysql_install_db将无法创建初始 root帐户 autocommit(错误#72724,错误#18911807)

  • mysql客户端显示 数据gb18030不正确。(错误#72573,错误#18726196)

  • gb18030_chinese_ci排序规则被 视为'Y'等于'~'。(错误#72565,错误#18729428)

  • CASCADE DELETE当指定了orCASCADE UPDATE引用约束并且数据库名称或表名称包含特殊字符 时,表的查询缓存未失效 。(错误#72547,错误#18710853)

  • NOW(N) 在视图定义中存储为NOW(),因此丢失了小数秒部分。(错误#72472,错误#18675237)

  • 如果正在执行的准备好的语句产生错误,则服务器无法将该语句写入通用查询日志。(错误#72375,错误#18616826)

  • 新的CMake选项 SUNPRO_CXX_LIBRARY启用链接libCstd而不是 stlport4在 Solaris 10 或更高版本上。这仅适用于客户端代码,因为服务器依赖于 C++98。用法示例:

    cmake -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd

    (错误#72352,错误#18605389)

  • 使用SELECT子查询UNIONORDER BY不允许在外部语句中使用别名的语句。(错误#72189,错误#18498344)

  • UNION子句中带有聚合函数的查询ORDER BY没有被拒绝,因为它们应该被拒绝。现在,此类查询会因ER_AGGREGATE_ORDER_FOR_UNION 错误而被拒绝。例子:

    SELECT 1 AS foo UNION SELECT 2 ORDER BY MAX(1);

    应用了的非聚合查询ORDER BY 不能包含聚合函数,但没有被拒绝,因为它应该被拒绝。现在,此类查询会因 ER_AGGREGATE_ORDER_NON_AGG_QUERY 错误而被拒绝。例子:

    SELECT a FROM t1 ORDER BY COUNT(*);

    (错误#72174、错误#18503515、错误#72512、错误#18694751)

  • MODDECIMAL带前导零的值的操作可能会产生不正确的结果。(错误#72100,错误#18509896)

  • mysqlslap接受了 --iterations选项值 0,这导致了被零除错误。现在最小选项值为 1。感谢 Tsubasa Tanaka 提供的补丁。(错误#72082,错误#18430704)

  • 如果 mysql.user表包含多个具有相同用户名和主机名但主机名的字母大小写不同的帐户, mysql_upgrade可能会失败。这仍然是不允许的,但现在 mysql_upgrade打印了一条信息更丰富的错误消息以指示问题的性质:

    ERROR 1644 (45000): Multiple accounts exist for user_name, host_name
    that differ only in Host lettercase; remove all except one of them

    (错误#72066,错误#18415196)

  • ER_CANT_CREATE_GEOMETRY_OBJECT 被视为致命错误,因此无法被条件处理程序捕获。(错误#72064,错误#18413646)

  • BIGINT有符号和无符号值 之间的一些比较可能会产生不正确的结果。(错误#72046,错误#18408499)

  • 对于IN()值与键数据值不同的谓词,优化器有时会在可以进行范围扫描时使用表扫描。(错误#71962,错误#18364815)

  • 当给选项一个空参数时, mysql_config_editor--login-path退出。(错误#71837、错误#18311024、错误#18830493)

  • 使用 RPM 包进行升级可能会更改安装目录的所有权。(错误#71715,错误#18281535)

  • threadsPerformance Schema 表显示了复制线程 的PROCESS_ID值 。 现在它显示与 表NULL相同的 ID 。(错误#71682,错误#18259356)SHOW PROCESSLISTINFORMATION_SCHEMA.PROCESSLIST

  • DIGEST_TEXTPerformance Schema 语句事件表的列中,对表单系统变量的引用 存储为. (错误#71634,错误#18304086)@@var_name@ @ var_name

  • 对于mysqldump,包含反斜杠 ( '\') 的数据库名称的转储和恢复操作失败。感谢 Xiaobin Lin 的补丁。(错误#71437,错误#18109728)

  • 同一个表上的 同步OPTIMIZE TABLE和联机可能会导致死锁。(错误#71433,错误#18110156)ALTER TABLEInnoDB

  • XA START在使用现有 XID 重新启动服务器后 XA COMMIT,提交失败。(缺陷 #71352,缺陷 #18068253)

  • 如果代理用户密码已过期,代理用户将无法执行语句。(错误#71337,错误#18057562)

  • MySQL 未使用 Bison 3 进行编译。(Bug #71250、Bug #18017820、Bug #18978946)

  • INSTALL PLUGIN如果三个线程同时执行, SHOW VARIABLES, 和 , 可能会发生死锁 mysql_change_user()。(错误#71236、错误#18008907、错误#72870、错误#18903155)

  • 以下形式的语句破坏了基于行的复制,因为它创建了一个表,该表的数据类型字段的 BIGINT显示宽度为 3000,超出了最大可接受值 255:

    CREATE TABLE t1 AS SELECT REPEAT('A',1000) DIV 1 AS a;

    (错误#71179,错误#17994219)

  • 当 MySQL 在 Windows 上作为服务运行时, NTService.Stop()在关闭期间启动关闭和退出事件。在 MySQL 5.7.3 中的代码重组后,clean_up()错过了对的调用,导致启动崩溃恢复。(错误#71104,错误#17980260)

  • MIN()如果or 引用的列上有一个谓词, MAX()并且该谓词不存在于复合索引中早期关键部分的所有析取中,松散索引扫描将返回不正确的结果。(错误#71097,错误#17909656)

  • 如果在语句准备完成后mysql客户端连接丢失,并且至少有一个语句处于初始化状态但尚未准备好,则在 使用准备好的语句时可能会发生无效内存访问。(错误#70429,错误#17512527)

  • 客户端自动重新连接对链接到 的客户端不起作用 libmysqlclient,即使 已MYSQL_OPT_RECONNECT启用。

    此外,如果在过期FEDERATED后访问表 ,则会在没有尝试重新建立连接的情况下发生错误。(错误#70026、错误#17309863、错误#14874、错误#11745408)wait_timeoutLost connection to MySQL server

  • MyISAM对包含LIMIT子句但没有 子句的表 进行全文查询WHERE可能会返回太少的行。(漏洞 #69908,漏洞 #17261347)

  • 在多个键值相同但尾随空格除外的情况下,更新可能无法更新所有适用的行。(漏洞 #69684,漏洞 #17156940)

  • 在 Windows 上,REPAIR TABLE对于 文件大于 4GB的表OPTIMIZE TABLE失败 。(漏洞 #69683,漏洞 #17235179)MyISAM.MYD

  • 对于将准备好的语句记录到一般查询日志中,该 Execute行是在语句执行之后而不是之前记录的。(错误#69453、错误#16953758、错误#20536590)

  • UNCOMPRESS()在验证压缩数据的 zip 标头期间 调用生成的 Valgrind 警告。(漏洞 #69202,漏洞 #18693654)

  • mysql_tzinfo_to_sql错误处理了缩写列表中的某些值(从时区信息文件中读取),因为未能说明附加到 char 数组末尾的空字符。(漏洞 #68861,漏洞 #16664462)

  • 某些语句可能会两次写入慢速查询日志。(缺陷 #68626,缺陷 #16467055)

  • 多个测试和配置文件的文件权限和行尾更加一致,以避免来自包检查器的警告。(错误#68521、错误#16415173、错误#16395459、错误#68517、错误#16415032、错误#71112、错误#17919313、错误#71113、错误#17919422)

  • 在某些情况下,成功CREATE VIEW可能会向视图定义中的表达式添加无效的括号。(缺陷 #67791,缺陷 #15948263)

  • 如果通用查询日志或慢速查询日志文件被设置为 FIFO 或套接字文件,并且文件读取器消失,则服务器停止执行语句。现在服务器检测到此类文件,记录一条错误消息,并继续禁用相应的日志。(漏洞 #67088,漏洞 #14757009)

  • 对于多个客户端程序的非调试版本,该 --help消息未正确指示--debug--debug-check--debug-info仅适用于调试版本。(错误#66854,错误#16272328)

  • 仅当启用了通用查询日志时,审计日志插件才会收到通用日志的事件通知。现在,无论是否启用常规查询日志,都会发布通知。(错误#60782、错误#12368204、错误#20536590、错误#75796、错误#20479643)

  • 使用的查询GROUP BY INSERT()可能会产生虚假的重复键错误。(错误#58081,错误#11765149)

  • 如果不在 MySQL 安装基目录中调用, mysql_install_db可能会失败。(错误#54034,错误#11761529)

  • big_tables启用后,在非重复键上使用具有常量相等条件的简单连接的查询 返回COUNT(DISTINCT)不正确的结果。(错误#52582,错误#11760197)

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

  • LOAD DATA LOCAL如果在没有行分隔符时发生导入错误,则可以使用所有 CPU。(错误#51840,错误#11759519)

  • 对于现有的非动态(内置)插件,尝试的错误消息具有UNINSTALL PLUGIN 误导性(插件不存在)。现在消息提示内置插件无法卸载。(错误#51771,错误#11759453)

  • LIKEsjiscp932字符集中的 HALF WIDTH KATAKANA 代码点匹配失败。(错误#47641,错误#11755818)

  • INSERT对于未提供列名但提供列值 的语句,服务器未能产生错误 。(错误#20943、错误#11745889、错误#18064775)

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

  • 连接 ID 是 32 位无符号整数,从 1 开始。当服务器分配连接 ID 并达到 32 位范围的顶部时,它会将值重新从 1 开始。如果旧线程运行时间特别长,服务器可能会为新线程分配一个连接 ID,而该 ID 仍在由现有线程使用。对于这种情况,对 ID 的引用变得不明确。例如,无法可靠地确定 要杀死哪个线程,这可能会导致未定义的行为。此行为已得到纠正,因此使用中的 ID 不会被重复使用。 KILL connection_id