Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.6 的变化(2015-03-09,里程碑 16)

MySQL 5.7.6 的变化(2015-03-09,里程碑 16)

笔记

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

账户管理注意事项

  • 不兼容 的变化:CREATE USERALTER USER语句具有额外的账户管理能力。它们现在可以一起用于完全建立或修改身份验证、SSL 和资源限制属性,以及管理密码过期和帐户锁定和解锁。例如, ALTER USER可以分配密码,可以修改用户的认证插件,不需要直接操作 mysql.user表。有关详细信息,请参阅 CREATE USER 语句ALTER USER 语句

    帐户锁定控制是一项新功能,它允许管理员完全禁止使用帐户连接到服务器。帐户锁定状态记录在表的account_locked列中 mysql.user。请参阅 帐户锁定

    新语句SHOW CREATE USER显示CREATE USER创建指定用户的语句。附带的Com_show_create_user状态变量指示语句已执行了多少次。

    一个新的系统变量, log_backward_compatible_user_definitions如果启用,会导致服务器以向后兼容(5.7.6 之前)的方式记录CREATE USERALTER USER和 语句。GRANT启用此变量可提高跨版本复制的兼容性。

    表中的authentication_stringmysql.user现在存储所有帐户的凭据信息。Password 以前用于存储使用 mysql_native_passwordmysql_old_password插件 验证的帐户的密码哈希值的列已被删除。

    如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将更改合并到 mysql数据库中。 mysql_upgradePassword列值移动到该 authentication_string列并删除该 Password列。对于没有account_locked 列的未升级安装,服务器将所有帐户视为未锁定,并尝试锁定或解锁和帐户产生错误。

    前面的更改使以下功能过时。它们现在已被弃用,并且在未来的 MySQL 版本中将删除对它们的支持:

    • 用于GRANT创建用户。相反,使用CREATE USER. 遵循这种做法使得 SQL 模式对于 语句来说变得 NO_AUTO_CREATE_USER无关紧要,因此它也被弃用了。GRANT

    • 用于GRANT修改权限分配以外的帐户属性。这包括身份验证、SSL 和资源限制属性。相反,在创建帐户时使用 建立此类属性 CREATE USER或之后使用 修改它们ALTER USER

    • IDENTIFIED BY PASSWORD 'hash_string'CREATE USERGRANT的语法 相反,使用 for 和 ,其中 值的格式与命名插件兼容。 IDENTIFIED WITH auth_plugin AS 'hash_string'CREATE USERALTER USER'hash_string'

    • PASSWORD()函数已弃用,在任何情况下都应避免使用。因此, 语法也被弃用。 不推荐使用语法;尽管如此, 现在是分配密码的首选语句。 SET PASSWORD ... = PASSWORD('auth_string')SET PASSWORD ... = 'auth_string'ALTER USER

      警告

      此版本中的更改导致一种SET PASSWORD语法的语义不兼容:

      SET PASSWORD ... = 'literal string';

      以前,SET PASSWORD 将字符串解释为要直接存储的密码哈希值。现在,SET PASSWORD将字符串解释为明文字符串,并在存储之前针对帐户身份验证插件对其进行适当的哈希处理。

      笔记

      任何 PASSWORD()用于创建散列值的应用程序(一段时间以来一直不鼓励的做法)都应该修改为使用不同的散列生成方法。有关建议,请参阅加密和压缩功能PASSWORD() 中的描述。

    • 系统old_passwords变量。帐户身份验证插件不能再在表中未指定,因此任何从明文字符串分配密码的语句都可以在将字符串存储在表mysql.user中之前明确确定要对字符串使用的哈希方法 。mysql.user这就 old_passwords显得多余了。

    笔记

    此版本中的一个已知问题是以下 SET PASSWORD语法会产生错误:

    SET PASSWORD ... = PASSWORD('auth_string');

    该语法将被弃用,而不是删除。它将在下一个版本中恢复,但由于其已弃用状态而生成警告。这些替代方案可用,第一个是首选形式:

    ALTER USER ... IDENTIFIED BY 'auth_string';
    SET PASSWORD ... = 'auth_string';

    表结构的变化mysql.user对升级和降级有兼容性影响:

    • 您可以执行二进制(就地)升级到 MySQL 5.7.6 或更高版本,并运行mysql_upgradePassword列内容迁移到该 authentication_string列。

    • 如果您计划通过从较旧的(5.7.6 之前的)MySQL 安装加载 mysqldump转储文件来升级,则必须遵守用于生成该文件 的mysqldump命令的以下条件:

      在运行mysql_upgrade 之前将 5.7.6 之前的转储文件加载到 5.7.6 服务器中。

    • 因为该Password列在 5.7.6 及更高版本中已不存在,所以降级到 5.7.6 之前的版本需要特殊的过程。请参阅 降级说明

    参考资料:另请参阅:Bug #67449、Bug #14845612、Bug #18140348。

编译笔记

  • 用于服务器构建的 Boost 库的最低版本现在是 1.57.0。(错误#74666、错误#19940297、错误#73432、错误#19320102)

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

配置注意事项

  • mysqld现在支持一个 --daemonize选项,使其作为传统的分支守护进程运行。这允许服务器与使用 systemd 进行进程控制的操作系统一起工作。优点包括故障后自动重启、处理用于运行守护程序的用户和组、资源控制和临时文件清理。

    新的CMake选项在启用时会导致安装 systemd 支持文件。此外,未安装mysqld_safe和 System V 初始化脚本等脚本。在 systemd 不可用的平台上,启用 会导致CMake出错。启用时,还可以使用新 选项 和选项分别指定服务器创建 PID 文件的 MySQL 服务名称和目录 。 WITH_SYSTEMD WITH_SYSTEMDWITH_SYSTEMDSYSTEMD_SERVICE_NAMESYSTEMD_PID_DIR

    当您使用适用于这些 Linux 平台的 RPM 发行版安装 MySQL 时,会安装 systemd 的支持文件:

    • 红帽企业 Linux 7;甲骨文Linux 7;中央操作系统 7

    • SUSE Linux 企业服务器 12

    • 软呢帽 20、21

    您还可以通过从配置有CMake选项 的源分发版进行安装来获得 systemd 支持 。-DWITH_SYSTEMD=1

    为了向管理进程提供更好的信息,服务器现在返回以下列表中描述的退出代码之一。括号中的短语表示 systemd 响应代码所采取的操作。

    • 0 = 成功终止(没有重启)

    • 1 = 未成功终止(未重新启动)

    • 2 = 不成功终止(重启完成)

    笔记

    如果只检查 1 作为失败退出值,则应修改为旧服务器编写的任何管理脚本以处理三个退出值。

    有关详细信息,请参阅使用 systemd 管理 MySQL 服务器。该部分还包括有关指定先前在[mysqld_safe]选项组中指定的选项的信息。因为在使用 systemd 时没有安装mysqld_safe,所以必须以其他方式指定此类选项。

弃用和移除说明

  • 复制: 变量 binlogging_impossible_mode已重命名为binlog_error_action. (漏洞 #19507567)

  • 复制:系统变量 的全局范围 sql_log_bin已被弃用,现在只能在会话范围内设置此变量。该语句 SET GLOBAL SQL_LOG_BIN现在产生一个错误。仍然可以读取 的全局值sql_log_bin,但这样做会产生警告。您应该立即采取行动,从您的应用程序中删除任何对读取此值的依赖;sql_log_binMySQL 8.0 中删除了全局范围(缺陷 #67433,缺陷 #15868071)

  • 对于客户端程序,--secure-auth现在已弃用并且--skip-secure=auth是非法的,但使用会--skip-secure-auth导致警告后跟帮助消息而不是错误。(漏洞 #19438612)

  • OLD_PASSWORD()已弃用,但在调用时未产生任何警告。(错误#73376,错误#19285177)

  • ALTER TABLETIME如果表中包含的时间列被发现采用 5.6.4 之前的格式( 、 DATETIMETIMESTAMP不支持小数秒精度的列),则没有利用可能适用于要执行的操作的快速更改。相反,它通过重建来升级表。两个新的系统变量可以控制升级此类列并提供有关它们的信息:

    • avoid_temporal_upgrade控制是否 ALTER TABLE隐式升级发现采用 5.6.4 之前格式的时间列。默认情况下禁用此变量。启用它会导致 ALTER TABLE不重建时间列,从而能够利用可能的快速更改。

    • show_old_temporals控制 SHOW CREATE TABLE输出是否包括注释,以标记被发现为 pre-5.6.4 格式的时间列。COLUMN_TYPE表列的 输出 INFORMATION_SCHEMA.COLUMNS 受到类似的影响。默认情况下禁用此变量。

    这两个变量都已弃用,并将在未来的 MySQL 版本中删除。(错误#72997,错误#18985760)

  • 以下项目已弃用,将在未来的 MySQL 版本中删除。在显示备选方案的地方,应更新应用程序以使用它们。

    • 、和 函数、 ENCRYPT()选项 、 系统变量、语句选项和 CMake 选项。对于,考虑使用 instead 进行单向哈希。对于其他人,请考虑使用 and 代替。 DES_ENCRYPT()DES_DECRYPT()--des-key-filehave_cryptDES_KEY_FILEFLUSHHAVE_CRYPT ENCRYPT()SHA2()AES_ENCRYPT()AES_DECRYPT()

    • 系统sync_frm变量。.frm当文件过时 时,将删除此变量 。

    • 全局 变量character_set_databasecollation_database系统变量已弃用,将在未来的 MySQL 版本中删除。

      为会话 character_set_databasecollation_database系统变量赋值已被弃用,赋值会产生警告。在未来的 MySQL 版本中,会话变量将变为只读,并且分配将产生错误。仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。

    • 将包含特殊字符的 MySQL 5.1 之前的数据库名称转换为 5.1 格式并添加 #mysql50#前缀。(有关这些转换的信息,请参阅 标识符到文件名的映射。)由于此类转换现在已弃用,因此 mysqlcheck--fix-db-names的和 --fix-table-names选项以及语句的子句 也已弃用。 UPGRADE DATA DIRECTORY NAMEALTER DATABASE

      仅支持从一个主要版本升级到另一个主要版本(例如,5.0 到 5.1,或 5.1 到 5.5),因此几乎不需要将旧的 5.0 数据库名称转换为当前版本的 MySQL。解决方法是先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到更新的版本。

生成的列

  • MySQL 现在支持在 CREATE TABLEALTER TABLE语句中指定生成的列。生成列的值是根据列定义中包含的表达式计算得出的。生成的列可以是虚拟的(在读取行时即时”计算)或存储的(在插入或更新行时计算)。INFORMATION_SCHEMA.COLUMNS表显示有关生成的列的信息。

    生成列的用途包括在应用程序使用复杂表达式从表中进行选择时简化查询、模拟功能索引或替换视图。有关详细信息,请参阅 CREATE TABLE 和生成的列

安装注意事项

  • mysqld服务器和 mysql_upgrade实用程序已经过修改 ,可以更轻松地从 MySQL 5.6 进行二进制(就地)升级,而无需使用特殊选项启动服务器。服务器检查系统表是否来自MySQL 5.7之前的版本(即 mysql.user表是​​否有 Password列)。如果是这样,它允许在其帐户行中具有空身份验证插件的用户进行连接mysql.user,只要他们的Password值是空的(无密码)或有效的本机(41 个字符)密码哈希。

    这意味着您可以连接并升级您的系统表,即使是没有命名身份验证插件root的旧 mysql.user表 。root特别是,您可以运行mysql_upgrade,连接为root,无需使用任何特殊选项启动服务器。以前,如果 root帐户的插件值是空的, 则--skip-grant-tables需要一个涉及启动服务器并多次重启的过程。现在的程序更简单。

    1. 停止旧的 (MySQL 5.6) 服务器

    2. 就地升级 MySQL 二进制文件(用新二进制文件替换旧二进制文件)

    3. 正常启动MySQL 5.7服务器(无特殊选项)

    4. 运行mysql_upgrade升级系统表

    5. 重启 MySQL 5.7 服务器

  • 以前,对于 Unix 和类 Unix 系统上的新 MySQL 安装,数据目录(包括mysql系统数据库中的表)的初始化是使用mysql_install_db完成的。在 Windows 上,MySQL 发行版包含一个数据目录,其中包含mysql数据库中的预建表。

    mysql_install_db功能现已集成到 MySQL 服务器mysqld中。要使用此功能初始化 MySQL 安装,如果您以前手动调用mysql_install_db ,请使用 或 选项调用mysqld,具体取决于您是否希望服务器为初始 帐户生成随机密码。 --initialize--initialize-insecure'root'@'localhost'

    作为此更改的结果,mysql_install_db 被弃用, mysql_install_db传递给 mysqld--bootstrap的特殊选项 也是如此。这些将在未来的 MySQL 版本中删除。此外, 不再需要mysql_install_db编写的文件。如果它存在于您的系统上,您可以将其删除。 $HOME/.mysql_secret

    使用mysqld 初始化 MySQL 安装 适用于所有平台,包括 Windows。特别是,可以在没有 mysql数据库预建表集的情况下初始化 Windows 安装。(但是,对于此版本没有必要这样做,因为 Windows 发行版仍然包含预构建的表。)

    有关详细信息,请参阅 初始化数据目录

优化器注释

  • 为了处理派生表(子句中的子查询 FROM)或视图引用,优化器可以将派生表或视图引用具体化为内部临时表或将其合并到外部查询块中。以前,派生表总是被具体化,而等效的视图引用有时被具体化,有时被合并。这种对等效查询的不一致处理可能会导致性能问题:不必要的派生表具体化需要时间并阻止优化器将条件下推到派生表。

    优化器现在以一致的方式处理派生表;也就是说,与视图引用相同。这更好地避免了不必要的具体化,并允许使用下推条件来生成更有效的执行计划。有关示例,请参阅使用物化优化子查询

    优化器还可以更好地处理子句在派生表或视图中对外部查询块的传播, ORDER BY只有在有意义时才这样做。以前,优化器总是传播 ORDER BY,即使它不相关或导致无效查询。

    对于诸如DELETEor 之类UPDATE的修改表的语句,对先前物化的派生表使用合并策略可能会导致 ER_UPDATE_TABLE_USED错误:

    mysql> DELETE FROM t1
        -> WHERE id IN (SELECT id
        ->              FROM (SELECT t1.id
        ->                    FROM t1 INNER JOIN t2 USING (id)
        ->                    WHERE t2.status = 0) AS t);
    ERROR 1093 (HY000): You can't specify target table 't1'
    for update in FROM clause

    将派生表合并到外部查询块时会发生错误,导致语句同时从表中进行选择和修改。(具体化不会导致问题,因为实际上它将派生表转换为单独的表。)为避免此错误,请 在执行语句之前禁用系统变量 的derived_merge标志 :optimizer_switch

    mysql> SET optimizer_switch = 'derived_merge=off';

    derived_merge标志控制优化器是否尝试将派生表和视图引用合并到外部查询块中,假设没有其他规则阻止合并。默认情况下,该标志是 on启用合并。将标志设置为 off防止合并并避免刚才描述的错误。(其他变通方法包括在子查询中使用SELECT DISTINCTLIMIT,尽管它们对具体化的影响并不明确。)如果 ER_UPDATE_TABLE_USED使用与子查询等效的表达式的视图引用发生错误,添加ALGORITHM=TEMPTABLE 到视图定义会阻止合并并优先超过当前derived_merge 值。

    有关详细信息,请参阅 使用合并或实现优化派生表和视图引用

    参考资料:另请参阅:Bug #20073366、Bug #59203、Bug #11766159。

包装说明

  • Microsoft Windows: 对于 Windows,noinstall Zip 存档被拆分为两个单独的 Zip 存档。MySQL 测试套件、MySQL 基准套件和调试二进制文件/信息组件(包括 PDB 文件)被移动到它们自己的 Zip 存档中,分别命名 为 64 位和 32 位。进行此更改是为了减小更常见下载的文件大小。 mysql-VERSION-winx64-debug-test.zipmysql-VERSION-win32-debug-test.zip

  • 打包脚本,例如 RPM 或 Debian 包中包含的脚本,已根据从 MySQL 发行版安装的文件应具有尽可能严格的权限的原则进行了修改。在下面的描述中,假设用于管理 MySQL 的帐户有 owner (user) = mysql, group = mysql

    • 创建帐户的安装程序使用/bin/falsemysql外壳来防止直接登录帐户。

    • 数据目录及其内容仅由 owner/group mysql/拥有和访问mysql,目录权限为 750,可执行文件权限为 755,其他文件权限为 640。

    • root其他文件(包括可执行文件和库)具有 / 的所有者/ 组 root,具有以下权限:

      • 可执行文件:755

      • 手册页、字符集文件、头文件、测试套件文件:644

      • 库文件:适用于主机系统的约定

    执行上述安装操作的打包脚本也执行它们进行升级,但如果mysql帐户存在,则保持不变,如果数据目录存在,则其权限和所有权保持不变。

性能模式注释

  • 性能模式包含以下更改:

    • Performance Schema 现在增量分配内存,将其内存使用扩展到实际服务器负载,而不是在服务器启动期间分配它需要的所有内存。因此,性能模式的配置更容易;大多数尺寸调整参数根本不需要设置。处理非常低负载的服务器将消耗更少的内存,而无需显式配置。

      这些系统变量是自动缩放的:

      performance_schema_accounts_size
      performance_schema_hosts_size
      performance_schema_max_cond_instances
      performance_schema_max_file_instances
      performance_schema_max_index_stat
      performance_schema_max_metadata_locks
      performance_schema_max_mutex_instances
      performance_schema_max_prepared_statements_instances
      performance_schema_max_program_instances
      performance_schema_max_rwlock_instances
      performance_schema_max_socket_instances
      performance_schema_max_table_handles
      performance_schema_max_table_instances
      performance_schema_max_table_lock_stat
      performance_schema_max_thread_instances
      performance_schema_users_size

      有一些以前缀命名的新工具,这些工具 memory/performance_schema/公开了为性能模式中的内部缓冲区分配了多少内存。这些工具显示在 memory_summary_global_by_event_name 表中。

      有关性能模式如何分配内存以及如何评估当前使用量的更多信息,请参阅 性能模式内存分配模型

    • 表索引和表锁的检测更灵活,内存占用更少。对于禁用索引和表锁检测的表(如表中指定setup_objects ),性能模式不会为统计信息收集分配内存。对于启用了索引和表锁检测的表,用于统计信息收集的内存分配会延迟到表开始使用为止。

      现在显式公开了表索引和表锁检测的配置:

    • 性能模式表中现在提供系统和状态变量信息:

      这些 Performance Schema 表包含的信息类似于SHOW VARIABLESandSHOW STATUS语句以及 GLOBAL_VARIABLESSESSION_VARIABLESGLOBAL_STATUS和 表中可用的信息。 SESSION_STATUS INFORMATION_SCHEMA

      Performance Schema 表具有以下优点:

      • 通过使用 variables_by_threadstatus_by_thread表,可以获得任何会话的会话变量,而不仅仅是当前会话。也可以获取会话变量,而不是会话和全局变量的混合,例如 和 返回 SHOW SESSION VARIABLESSHOW SESSION STATUS

      • 对全局变量的请求只产生全局变量,而对于 SHOW GLOBAL STATUS语句和 GLOBAL_STATUS INFORMATION_SCHEMA表,请求不仅产生全局变量,而且产生没有全局对应物的会话变量。

      • 访问 Performance Schema 表需要 SELECT特权,而SHOW语句和 INFORMATION_SCHEMA表则不需要。

      有关详细信息,请参阅 性能模式系统变量表性能模式状态变量表状态变量汇总表

      show_compatibility_56 系统变量的值会影响系统和状态变量语句和表产生的输出以及所需的特权。具体参见服务器系统变量中对该变量的描述。

      这些INFORMATION_SCHEMA表现在优先于 Performance Schema 表弃用,并将在未来的 MySQL 版本中删除。有关从 INFORMATION_SCHEMA表迁移到性能模式表的建议,请参阅 迁移到性能模式系统和状态变量表

      笔记

      此版本中的一个已知问题是 session_variablessession_status表未完全反映对当前会话有效的所有变量值;它们不包含没有会话对应项的全局变量行。这在 MySQL 5.7.8 中得到了纠正。

    • 以前,如果 setup_actors表中有一行与线程用户和主机匹配,则性能模式会为新的前台线程启用检测。现在,该 setup_actors表有一个 ENABLED列指示是否为匹配的前台线程启用检测。这允许显式禁用匹配线程的检测。有关详细信息,请参阅 按线程预过滤setup_actors 表线程表

    • SQL 语句处理的两个以前硬编码的限制现在是可配置的:

      • 语句事件表列中显示的 SQL 语句的最大字节数SQL_TEXT,例如 events_statements_current.

      • 可用于计算语句摘要的字节数。语句摘要出现在 DIGEST_TEXT语句事件表的列中。

      以前,这两个值都固定为 1024。现在可以在服务器启动时使用 performance_schema_max_sql_text_lengthmax_digest_length 系统变量更改它们。(名称 max_digest_length不以开头,performance_schema_因为语句摘要现在是在 SQL 级别完成的,即使性能模式被禁用并且可用于可以从中受益的服务器操作的其他方面。例如,查询重写插件现在使用语句摘要,即使性能模式被禁用。)

      默认值保持为 1024,但可以减少这些值以使用更少的内存或增加这些值以允许区分更长的语句以用于显示和摘要目的。每个变量的范围从 0 到 1024 × 1024。

      超出的任何字节 performance_schema_max_sql_text_length 都将被丢弃,并且不会出现在 SQL_TEXT列中。只有在该列中无法区分许多初始字节之后才不同的语句。

      摘要计算期间超出的任何字节 max_digest_length都不会计入摘要值。只有在许多字节的已解析语句标记产生相同的摘要并聚合摘要统计信息之后,语句才会不同。

      对于生成仅末尾不同的非常长的语句的应用程序,更改 max_digest_length变量的能力支持计算摘要,以区分先前聚合到同一摘要的语句。相反,管理员可以通过减少此变量的值来将更少的服务器内存用于摘要存储。管理员应该记住,较大的值会导致相应增加的内存需求,特别是对于涉及大量同时会话的工作负载。(max_digest_length每个会话分配字节。)

      有关详细信息,请参阅 性能架构语句摘要

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

    参考资料:另请参阅:Bug #71057、Bug #68514、Bug #16414081。

插件说明

  • MySQL 服务器现在支持查询重写插件:

    • 预解析查询重写插件可以在服务器处理 SQL 语句之前重写到达服务器的 SQL 语句。该插件接收一个语句字符串并可能返回一个不同的字符串。

    • 后解析查询重写插件支持基于解析树的语句重写。服务器解析每个语句并将其解析树传递给插件,插件可以遍历树。该插件可以将原始树返回给服务器进行进一步处理,或者构建一个不同的树并返回它。

    MySQL 发行版现在包含一个名为Rewriter. 这个插件是基于规则的。您可以向其规则表中添加行以引起 SELECT语句重写。

    查询重写插件的一种应用是允许将较新的服务器功能与可能无法修改的应用程序一起使用。例如,该插件可以向无法更改的旧应用程序生成的语句添加优化器提示。

    有关详细信息,请参阅 查询重写插件重写器查询重写插件

    感谢 Padraig O'Sullivan 的相关代码贡献。

安全说明

  • Incompatible Change: 系统secure_file_priv变量用于限制数据导入导出操作的影响。对服务器处理此变量的方式进行了以下更改:

    • secure_file_priv可以设置为NULL禁用所有导入和导出操作。

    • 服务器 secure_file_priv在启动时检查 的值,如果该值不安全,则将警告写入错误日志。非NULL值如果为空,或者值为数据目录或其子目录,或者所有用户都可以访问的目录,则被认为是不安全的。如果 secure_file_priv设置为不存在的路径,则服务器将错误消息写入错误日志并退出。

    • 以前, secure_file_priv系统变量默认为空。现在默认值是特定于平台的,取决于 CMake选项的值,如下表所示。 INSTALL_LAYOUT

      INSTALL_LAYOUT价值 默认secure_file_priv
      STANDALONE,WIN 空的
      DEB, RPM, SLES, SVR4 /var/lib/mysql-files
      否则 mysql-filesCMAKE_INSTALL_PREFIX 值以下
    • secure_file_priv如果您从源代码构建, 要明确指定默认 值,请使用新的CMake选项。 INSTALL_SECURE_FILE_PRIVDIR

    (错误#24679907、错误#24695274、错误#24707666)

  • yaSSL 已升级到版本 2.3.7。(错误#19695101,错误#20201864)

  • 由于 LogJam 问题 ( https://weakdh.org/),OpenSSL更改了 openssl-1.0.1n 及更高版本的 Diffie-Hellman 密钥长度参数。OpenSSL 在 http://openssl.org/news/secadv_20150611.txt提供了详细的解释。为了在 MySQL 中采用此更改, vio/viosslfactories.c用于创建 Diffie-Hellman 密钥的密钥长度已从 512 位增加到 2,048 位。(错误#77275、错误#21221862、错误#18367167、错误#21307471、错误#21449838)

  • 为了更容易生成支持使用 SSL 加密连接和使用 RSA 在未加密连接上安全密码交换所需的文件,MySQL 发行版现在包括mysql_ssl_rsa_setup实用程序。该实用程序使用openssl命令,因此它的使用取决于您的计算机上是否安装了 OpenSSL。调用时,mysql_ssl_rsa_setup检查 SSL 和 RSA 文件的数据目录, 如果它们丢失则使用openssl创建它们。有关详细信息,请参阅mysql_ssl_rsa_setup — 创建 SSL/RSA 文件

    启动时数据目录中密钥和证书文件的自动发现现在适用于使用 yaSSL 编译的服务器。以前,这仅适用于使用 OpenSSL 编译的服务器。请参阅配置 MySQL 以使用加密连接

    如果服务器自动启用加密连接,它会在错误日志中写入一条消息。如果服务器发现 CA 证书是自签名的,它会向错误日志写入警告。(如果由服务器自动创建或使用 mysql_ssl_rsa_setup手动创建,证书将是自签名的。)

空间数据支持

添加或更改的功能

  • 不相容的变化;InnoDB:索引页 的MERGE_THRESHOLD值现在可以使用、 和 语句COMMENT子句进行 如果在删除行或通过操作 缩短行时 索引页的页满百分比低于该 尝试将索引页与相邻索引页合并。默认 值为 50,这是以前的硬编码值。 CREATE TABLEALTER TABLECREATE INDEXMERGE_THRESHOLDUPDATEInnoDBMERGE_THRESHOLD

    此功能MERGE_THRESHOLD向内部SYS_INDEXES表添加一列。 SYS_INDEXES最初在 5.7.5 或更早版本中创建的表的记录不包括此列。在升级到 MySQL 5.7.6 或更高版本后重建或导入这些表可以正确地 SYS_INDEXES使用新 MERGE_THRESHOLD列更新记录。否则, TRUNCATE TABLE或者 ALTER TABLE ... RENAME INDEX在服务器重启或表重新加载之后的操作会导致错误。此错误已在 MySQL 5.7.8 中修复(错误号 20882432)。

    有关详细信息,请参阅 配置索引页的合并阈值

  • 不兼容的更改: 一个新的 C API 函数, mysql_real_escape_string_quote()已被实现作为替代, 启用 SQL 模式mysql_real_escape_string() 时可能无法正确编码字符 NO_BACKSLASH_ESCAPES在这种情况下, mysql_real_escape_string() 除非将引号字符加倍,否则无法转义引号字符,并且要正确执行此操作,它必须了解比可用信息更多的有关引号上下文的信息。 mysql_real_escape_string_quote() 需要一个额外的参数来指定引用上下文。有关使用详情,请参阅 mysql_real_escape_string_quote()

    笔记

    应将应用程序修改为使用 mysql_real_escape_string_quote(), 而不是 ,如果启用 mysql_real_escape_string(),现在会失败并产生 CR_INSECURE_API_ERR错误 。NO_BACKSLASH_ESCAPES

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

  • InnoDB: 所有与系统变量相关的剩余代码 innodb_file_io_threads,在 MySQL 5.5 中被删除,从源代码中删除。(漏洞#19843885)

  • InnoDB: InnoDB系统表空间数据现在暴露在Information Schema 表中 INNODB_SYS_TABLESPACESINNODB_SYS_DATAFILES

  • InnoDB: 为了将分区引擎模块化并从服务器代码库中解耦,存储引擎处理程序类中的分区操作被移动到一个新的 partition_handler基类,它现在是特定于分区的存储引擎功能的接口。

  • InnoDB: InnoDB现在支持使用CREATE TABLESPACE语法创建通用表空间。

    CREATE TABLESPACE `tablespace_name`
      ADD DATAFILE 'file_name.ibd'
      [FILE_BLOCK_SIZE = n]

    通用表空间可以在MySQL数据目录之外创建,能够容纳多个表,支持所有行格式的表。

    使用或 语法 将表添加到通用表空间 。CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_nameALTER TABLE tbl_name TABLESPACE [=] tablespace_name

    有关详细信息,请参阅CREATE TABLESPACE 语句

  • InnoDB: InnoDB现在支持本机分区。以前,InnoDB依赖于 ha_partition处理程序,它为每个分区创建一个处理程序对象。对于本机分区,分区InnoDB表使用单个分区感知处理程序对象。InnoDB此增强功能减少了分区表 所需的内存量

    以下更改伴随InnoDB本机分区支持:

    • .par不再为分区InnoDB 表创建 分区定义 ( ) 文件。分区定义存储在 InnoDB内部数据字典中。分区定义 ( .par) 文件继续用于分区 MyISAM表。

    • 对于分区InnoDB表, FLUSH TABLES不重置下一个 AUTO_INCREMENT 值。相反,下一个AUTO_INCREMENT 值将在FLUSH TABLES操作后保留和使用。如果最高 AUTO_INCREMENT值在 FLUSH TABLES操作之前被删除,则之后不会重用。

    • 对统计信息的微小更改可能会导致执行计划发生变化。

    • 分区表的最小行数估计为 InnoDB1 而不是 2。

    • InnoDB分区表索引 上的范围读取估计的最小行数是每个分区 0 而不是 1。

    • 在计算索引范围内的匹配行时,不是只包括最大的分区,而是包括读取集中的所有分区(修剪完成后)。因此,匹配索引行的统计信息更加准确,但对于具有多个分区的表,在优化器阶段花费的时间可能会增加。

  • InnoDB: MySQL 5.7.6 中包含以下与缓冲池刷新相关的增强功能:

    • 如果与最旧的 LSN 关联的页面分布较高,则自适应刷新算法会刷新刷新列表末尾的所有页面。

    • 一旦重做空间达到 30% 已满,对缓冲池实例的预扫描将确定每个缓冲池实例中最早修改的页面。基于此信息,自适应刷新算法确定在单次刷新过程中要从每个缓冲池实例中刷新的页数。这种方法有助于确保首先刷新最旧的修改页面。

    • 在可能且 mysqld执行用户被授权的 Linux 平台上, setpriority()系统调用用于为 page_cleaner线程提供高于其他 MySQL/InnoDB 线程的优先级,以帮助页面刷新与当前工作负载保持同步。mysqld执行用户授权可以在 /etc/security/limits.conf. 有关详细信息,请参阅您的 Linux 操作系统文档。

    • 当最早的修改 LSN 接近定义的最大值 ( max_modified_age_sync) 时,将启动缓冲池页面的同步预刷新,这可能会导致用户线程出现刷新等待情况。为了平滑吞吐量,用户线程只需要等待达到目标 LSN,而不是等待整个刷新批处理完成。用户线程等待被表的 buffer_flush_sync_waits度量 报告为同步刷新等待INFORMATION_SCHEMA.INNODB_METRICS

    • 添加了一个块以防止日志写入机制覆盖最后一个检查点 LSN。

    • 如果 innodb_io_capacity_max 设置太高,则会在服务器错误日志中打印一条消息。

    • page_cleaner 表中添加了用于监视线程活动的 新指标INNODB_METRICS

      • buffer_flush_adaptive_avg_pass:最近平均期间通过的自适应刷新次数。

      • buffer_flush_adaptive_avg_time_est:估计最近用于自适应刷新的时间(毫秒)。

      • buffer_flush_adaptive_avg_time_slot:最近每个插槽自适应刷新花费的平均时间(毫秒)。

      • buffer_flush_adaptive_avg_time_thread:最近每个线程自适应刷新花费的平均时间(毫秒)。

      • buffer_flush_avg_pass:最近平均期间通过的刷新次数。

      • buffer_flush_avg_time:最近用于刷新的平均时间(毫秒)。

      • buffer_flush_n_to_flush_by_age:LSN Age 用于刷新的目标页数。

      • buffer_LRU_batch_flush_avg_pass:最近平均期间通过的 LRU 批量刷新次数。

      • buffer_LRU_batch_flush_avg_time_est: 估计最近 LRU 批量刷新花费的时间 (ms)。

      • buffer_LRU_batch_flush_avg_time_slot:最近每个插槽的 LRU 批量刷新花费的平均时间(毫秒)。

      • buffer_LRU_batch_flush_avg_time_thread:最近每个线程用于 LRU 批量刷新的平均时间(毫秒)。

      • buffer_LRU_get_free_loops:LRU 中的总循环得到释放。

      • buffer_LRU_get_free_waits:LRU 中的总睡眠等待得到释放。

  • InnoDB: 性能模式现在检测用于监视InnoDB ALTER TABLE和缓冲池加载操作的阶段事件。新的舞台活动包括:

    • stage/innodb/alter table (read PK and internal sort)

    • stage/innodb/alter table (merge sort)

    • stage/innodb/alter table (insert)

    • stage/innodb/alter table (flush)

    • stage/innodb/alter table (log apply index)

    • stage/innodb/alter table (log apply table)

    • stage/innodb/alter table (end)

    • stage/innodb/buffer pool load

    有关详细信息,请参阅 InnoDB 与 MySQL Performance Schema 的集成保存和恢复缓冲池状态

  • InnoDB: 添加了与复制相关的支持 InnoDB,可以在死锁场景中优先处理从属应用程序事务而不是其他事务。此事务优先级排序机制保留供将来使用。

  • InnoDB: 索引CHECK TABLE的功能得到了增强InnoDB SPATIAL以前, 索引CHECK TABLE执行最少的检查InnoDB SPATIAL增强的功能包括 R-tree 有效性检查和检查以确保 R-tree 行计数与聚集索引匹配。

  • InnoDB:internal_tmp_disk_storage_engine 选项的默认设置现在是 ,它定义了服务器用于磁盘内部临时表的存储引擎 INNODB。通过此更改,优化器使用InnoDB存储引擎而不是MyISAM内部临时表。有关相关信息,请参阅 MySQL 中的内部临时表使用

  • InnoDB: InnoDB现在支持 32KB 和 64KB 页面大小。对于这两种页面大小,最大记录大小为 16KB。 ROW_FORMAT=COMPRESSED不支持 32KB 或 64KB 页面大小。对于 32KB 页面大小,扩展区大小为 2MB,对于 64MB 页面大小,扩展区大小为 4MB。innodb_log_buffer_size默认值从 8MB 增加到 16MB 以支持新的页面大小。 innodb_log_buffer_size 使用 32KB 或 64KB 的页面大小时,应将其设置为最小值 16MB。

  • InnoDB: 为了支持未来的发展,重构了初始化、验证和处理表空间和表标志的代码。并且对fil_create_ibd_tablespace函数进行了重构,对一些单表空间相关的函数和变量进行了重命名。

  • 复制: 在启用二进制日志记录的情况下使用 InnoDB 时,写入 InnoDB 重做日志中的并发事务现在在同步到磁盘之前分组在一起,当 innodb_flush_log_at_trx_commit 设置为 1 时,这减少了同步操作的数量。这可以提高性能。(漏洞 #19424075)

  • 复制: 添加了许多与性能模式和组复制相关的功能和增强功能。此处列出了这些新增内容:

  • 复制: 现在Previous_gtids每个二进制日志中都有一个事件,无论 gtid_mode. 在以前的版本中,它仅在 gtid_mode=on. 同样,现在Anonymous_gtid每笔交易之前都有一个事件 whengtid_mode=off。这些更改确保无论使用何种类型的二进制日志记录,都会生成类似的每个事务事件。以及启用新增加的在线更改功能 和 gtid_mode恢复也有积极影响 。 gtid_purgedgtid_executed

  • 复制: 现在使用了一种新的更通用的并行化算法 slave_parallel_type=LOGICAL_CLOCK,取代了以前仅限于不同数据库上事务的算法。当 master 上的事务不相互依赖时,这会提高吞吐量。现在即使主服务器上的两个并发事务也可以在从服务器上并行执行,如果它们持有主服务器上的所有锁。此外,现在通过添加到二进制日志中的复制事务的额外字段在从站上跟踪事务依赖性。

  • 复制: 现在可以更改复制模式,而无需关闭服务器或同步拓扑。作为此功能的一部分,进行了以下更改:

    有关详细信息,请参阅 更改联机服务器上的复制模式

  • 复制: MySQL 多源复制增加了从多个主服务器复制到一个从服务器的能力。MySQL Multi-Source Replication 拓扑可用于将多台服务器备份到单台服务器、合并表分片以及将多台服务器的数据整合到单台服务器。请参阅 MySQL 多源复制

    作为 MySQL 多源复制的一部分,添加了复制通道。复制通道使从站能够打开多个连接进行复制,每个通道都是到主站的连接。为了能够选择特定通道,与复制相关的 SQL 语句现在支持可选子句。请参阅 复制通道FOR CHANNEL channel

  • C 客户端库中未记录的函数现在已隐藏。这有助于最大限度地减少命名空间污染,并允许链接需要来自 yaSSL(在客户端库中)和 OpenSSL 的功能的应用程序。(错误#20476596,错误#18427840)

  • CMake支持已更新以处理 CMake版本 3.1。(缺陷号 20344207)

  • 以前,Windows 上的调试版本是使用 构建的 /Ob0,它禁用函数内联。构建现在用于/Ob1启用内联。新的CMake选项可用于控制内联。默认值为(启用内联);如果设置为,则禁用内联。(缺陷号 20316320)WIN_DEBUG_NO_INLINE OFFON

  • 新的-DWITH_UBSAN=ONCMake 选项启用未定义的行为消毒器。GCC 4.9 及更高版本以及 Clang 3.4 及更高版本支持此功能。(漏洞 #19587393)

  • 中 SSL 证书的有效日期范围 mysql-test/std_data已扩展到 2029 年。(漏洞 #18366947)

  • 减少了查询的开销,例如通过 sysbench order-by-range测试测试的查询。(错误#75390,错误#20296891)

  • mysql客户端程序 现在支持 \Cprompt命令中表示当前连接标识符。感谢 Tsubasa Tanaka 提供补丁。(缺陷 #75242,缺陷 #20227145)

  • 服务器现在在将初始“开始消息 写入错误日志时包括其版本号,以便更容易判断错误日志输出适用于哪个服务器实例。version该值与系统变量中可用的值相同 。(缺陷 #74917,缺陷 #20052694)

  • 以前,auth_socket身份验证插件仅根据客户端程序向服务器指定的 MySQL 用户名检查套接字用户名。现在,如果这些名称不匹配,插件还会检查套接字用户名是否与 authentication_stringmysql.user行列中指定的名称匹配。在任何一种情况下,插件都允许连接以进行匹配。感谢 Daniël van Eeden 提供补丁。(错误#74586,错误#20041925)

  • 版本号libmysqlclient已增加到 20.0.0。(错误#74206,错误#19729266)

  • 一个新的CMake选项 WITH_MSCRT_DEBUG可用于控制 Visual Studio CRT 内存泄漏跟踪。默认值为 OFF。(错误#73064,错误#19031370)

  • 从 MySQL 5.7.2 开始,服务器在启动时禁用任何没有身份验证插件的帐户。在这种情况下,服务器现在会向错误日志写入更详细的消息,以指示如何重新启用此类帐户。(错误#73026,错误#19011337)

  • 系统变量的最小值 stored_program_cache已从 256 更改为 16,以便能够配置更小的内存量专用于存储的程序缓存。(错误#72451,错误#18661573)

  • 中的代码my_strnxfrm_simple()不是最理想的并且已得到改进。感谢 Alexey Kopytov 提供的补丁。(漏洞 #68476,漏洞 #16403708)

  • 元数据锁定子系统(请参阅 元数据锁定)已扩展为涵盖对表空间的并发访问。这包括显式影响表空间的 DDL 语句:ALTER TABLESPACECREATE TABLESPACEDROP TABLESPACE。它还包括影响表空间内容 的 DDL 语句 : ALTER TABLE、、、、、、、、和 。 CREATE INDEXCREATE TABLEDROP INDEXDROP TABLELOCK TABLESRENAME TABLETRUNCATE TABLE

  • 对于与 结合ORDER BY的 查询,LIMIT优化器可能会切换到适用于ORDER BY. 在某些情况下,转换的决定是基于启发式而非成本。优化器现在统一决定是否以成本为基础进行切换。当切换会导致查询读取整个索引或其中的大部分以查找符合条件的行时,这应该会带来更好的性能。

    参考资料:另请参阅:Bug #78993、Bug #22108385、Bug #73837、Bug #19579507、Bug #16522053。

  • 服务器和客户端错误的编号范围分别从 1000 和 2000 开始。但是,服务器错误号接近 2000,导致与客户端错误号的潜在冲突。为了解决这个问题,MySQL 5.7 的服务器错误编号现在有一个从 3000 开始的范围。这是通过允许多行 in 来实现的,每行都将编号重置为。 start-error-number Nsql/share/errmsg-utf8.txtN

  • 优化器内的重构导致以下EXPLAIN输出改进:

    • 为隐式分组查询显示的输出不再如此。 ORDER BY col_name

    • 涉及分区修剪的语句的输出INSERT现在仅显示实际使用的分区,而不是表中的所有分区。

    • UPDATE在未使用连接缓冲的情况下, INSERT、 或 语句 的输出DELETE不再显示使用连接缓冲区

    此外,对于之前返回的错误是未知错误的终止查询,错误现在是 查询执行被中断

    参考资料:另请参阅:Bug #70553、Bug #17575172。

  • MySQL 现在提供了一个内置的支持中文、日语和韩语 (CJK) 的 ngram 全文解析器插件,以及一个可安装的日语 MeCab 全文解析器插件。解析器插件可以InnoDBMyISAM表一起使用。

    内置的MySQL全文解析器使用单词之间的空格作为分隔符来确定单词的开始和结束位置,这是内置MySQL全文解析器对不使用单词分隔符的表意语言的限制。ngram 和 MeCab 全文解析器插件的添加解决了这一限制。

    有关详细信息,请参阅 ngram Full-Text ParserMeCab Full-Text Parser Plugin

  • 系统数据库 中 的pluginservers 表现在是(事务)表。以前,这些是(非事务性)表。 mysqlInnoDBMyISAM

    由于此更改,INSTALL PLUGIN现在UNINSTALL PLUGIN包含在导致隐式提交的语句中(请参阅导致隐式提交的 语句)。

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

  • 新的session_track_gtids 系统变量配置了一个会话跟踪器,它捕获 GTID 并将它们从服务器返回给客户端。从 C API 中,GTID 信息可以通过 SESSION_TRACK_GTIDS作为 type参数传递给 mysql_session_track_get_first()mysql_session_track_get_next() 函数来获取。有关详细信息,请参阅 客户端会话状态的服务器跟踪

修正错误

  • 不相容的变化;InnoDB: 如果您的系统包含在 MySQL 5.1 之前创建的表空间数据文件,请在升级到 MySQL 5.7.6 之前仔细阅读本说明。

    在 MySQL 5.1 之前创建的表空间数据文件有时FIL_PAGE_TYPE在某些页面中包含垃圾值。为解决此问题,添加了一个新的文件页面类型常量 ( FIL_PAGE_TYPE_UNKNOWN),并且FIL_PAGE_TYPE现在将未知值重置为 FIL_PAGE_TYPE_UNKNOWN

    FIL_PAGE_INDEX但是,当一个字段中包含无效或 FIL_PAGE_RTREE值 的非索引页FIL_PAGE_TYPE写入磁盘时,您仍然可能会遇到失败。您可以通过修改数据文件以将无效FIL_PAGE_TYPE值 替换为 来解决故障FIL_PAGE_UNKNOWNFIL_PAGE_TYPE错误日志消息提供了具有无效值 的页面的表空间 ID 和页码。

    在 MySQL 5.6 之前,InnoDB页面大小始终为 16384 字节。FIL_PAGE_TYPE定义为 24。因此,如果表空间数据文件的页码 P 受到影响,则字节偏移量 16384*P+24 处的数据应包含字节 0x45 0xbf( FIL_PAGE_INDEX) 或0x45 0xbe ( FIL_PAGE_RTREE)。0x00 0x0d 用( )替换这些字节 FIL_PAGE_UNKNOWN

    如果该页包含字符串infimumsupremum字节偏移量为 99 或 101(开始后 75 或 77 个字节FIL_PAGE_TYPE),则该页可能是索引页,并且可能存在实际损坏。

    警告

    不要试图直接修改数据文件,除非您确切地知道您在做什么并且完全理解其中的含义。MySQL 5.7.7 中不再需要手动修改数据文件,修复了 Bug #20691930。

    如果在您的 MySQL 5.5 之前的数据文件FIL_PAGE_TYPE中重置为 FIL_PAGE_TYPE_UNKNOWN,您可能会在重新启动服务器时遇到页面损坏错误。该错误是由于 页面校验和中FIL_PAGE_TYPE的一个字段 InnoDB仍设置为以前的FIL_PAGE_TYPE值。要解决该错误,请使用 innochecksum工具重写页面校验和。MySQL 5.7.7 中 Bug #20691930 的补丁通过在重置 FIL_PAGE_TYPE值后重新计算页面校验和解决了这个问题。(错误#17345513、错误#17332603、错误#19658698)

  • 创新数据库;Microsoft Windows: 在 Windows 上,重命名FULLTEXT搜索文件名会引发断言。(漏洞 #20001827)

  • 创新数据库;Microsoft Windows: 简化了用于在 Windows 上选择本机异步 I/O (AIO) 的逻辑。MySQL 5.7 支持的所有 Windows 版本现在都支持原生 AIO。不再需要处理不支持本机 AIO 的旧 Windows 版本所需的逻辑。(漏洞 #19803939)

  • InnoDB: 打开和关闭优化的临时表导致InnoDB 监视器输出中出现负表引用计数。(缺陷号 20608113)

  • InnoDB: 从中删除了重复的数据库页面损坏错误消息buf0buf.cc。(缺陷号 20605167)

  • InnoDB:表 的NAMEINFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO 被错误地声明为 192 个字符宽。正确的长度是 64 个字符。(缺陷号 20512578)

  • InnoDB: 全文短语搜索返回了错误的结果。标记新插入的行时错误处理了空字符串。(缺陷 #20465273,缺陷 #75755)

  • InnoDB: 删除了 MySQL 5.7.0 中引入的解决方法,在 Bug #14658648 的补丁中。解决方法允许 MySQL 在崩溃恢复期间禁用查询缓存。如果 MySQL 在启用查询缓存的情况下 XA 事务处于 PREPARED 状态时崩溃,则在崩溃恢复期间可能会产生不一致的数据。错误#16593427 的补丁在 MySQL 5.7.2 中修复了该错误。(缺陷号 20461632)

  • InnoDB: 在调试版本中,与调整缓冲池大小相关的断言代码导致 Valgrind 测试时间显着增加。(缺陷号 20461123)

  • InnoDB: 对空间索引使用更改缓冲引发了断言。不应为空间索引设置更改缓冲区标志。(缺陷 #20452564,缺陷 #75718)

  • InnoDB: 在 上ALTER TABLE ... IMPORT TABLESPACE,内存不足 (OOM) 上缺少字典解锁调用,这可能导致在为.ibd文件路径字符串分配内存时失败。(缺陷号 20430105)

  • InnoDB:DWITH_EXTRA_CHARSETS=none使用 .build MySQL时 发生未定义的引用错误 (缺陷号 20429800)

  • InnoDB: 优化FULLTEXT索引引发了断言。FULLTEXT索引 的最后一个优化词 定义为 CHAR(50)CONFIGvalue当最后优化的单词长度超过 50 个字符时,会引发断言。从CONFIGvalue 列定义为 CHAR(200)。

    如果您的 innodb_ft_max_token_size 设置大于 50,建议您InnoDB FULLTEXT 在升级到 MySQL 5.6.24 或 MySQL 5.7.6 后重新创建现有索引以避免此问题。FULLTEXT升级到 MySQL 5.6.24 或 MySQL 5.7.6 后创建的索引不受影响。(缺陷号 20418326)

  • InnoDB:删除 了innodb_optimize_point_storage选项和相关的内部数据类型(DATA_POINTDATA_VAR_POINT(缺陷号 20415831)

  • InnoDB: 在服务器开始关闭时fts_optimize_thread()设置一个 NULL 启动。(缺陷号 20389745)exit_eventfts_optimize_thread

  • InnoDB: memcached提出 process_arithmetic_command了一个断言。decr为不存在的密钥返回了错误的错误代码 (缺陷号 20386835)

  • InnoDB:忽略了使用memcachedexptime命令定义 的过期时间 (memcached将过期时间设置为一个间隔值而不是系统时间值。(缺陷 #20381342,缺陷 #70055) setInnoDB

  • InnoDB: GIS 相关 mbr_join_square函数中的 NaN 值引发断言。(缺陷号 20379160)

  • InnoDB:删除 了innobase_close_thd函数和相关的包装函数和指针。这些函数和指针是随InnoDB memcached插件引入的,但从未使用过。(缺陷号 20369370)

  • InnoDB: 当全文搜索 fts_savepoint_release()功能释放命名事务保存点和所有后续保存点时,引发了断言。只应释放初始保存点。(缺陷号 20341916)

  • InnoDB:InnoDB表名称在存储持久统计信息的表 的诊断输出中显示不一致(缺陷号 20330831)

  • InnoDB:为MySQL 5.7.2 中的表启用 的状态的已恢复事务进行(缺陷号 20303205)INFORMATION_SCHEMA.TABLES UPDATE_TIMEInnoDBXA COMMITXA PREPARE

  • InnoDB:/storage/innobase/trx/trx0trx.cc. trx->lock.rec_pool.empty()被用来代替trx->lock.table_pool.empty(). (缺陷 #20294158,缺陷 #75373)

  • InnoDB: 在MySQL 5.7.5 中添加的返回中缺少/storage/innobase/handler/ha_innodb.ccava_end()(缺陷 #20285744,缺陷 #75323)

  • InnoDB: 全文搜索优化操作提出了断言。(缺陷号 20281800)

  • InnoDB: 表空间导出操作将清除状态设置为 PURGE_STATE_STOP,但清除线程直到当前清除操作完成后才检查清除状态。在历史列表很大的情况下,表空间导出操作被延迟,等待当前清除操作完成。现在检查每个清除批次的清除状态。(错误#20266847,错误#75298)

  • InnoDB: 当从磁盘读取页面时,会检查挂起的插入缓冲区条目,这涉及获取插入缓冲区页面上的锁存器。如果找到未决条目,则将它们合并。因为change buffer只适用于非临时表空间的B-tree secondary leaf pages,insert buffer merge并不是所有页类型都需要的。使用从磁盘读取的页面中的 page_type、page_level 和表空间类型信息,对于不适用的页面类型,现在会跳过插入缓冲区合并。(缺陷号 20220909)

  • InnoDB:InnoDB为重做日志 创建的内部伪表空间的名称ib_logfile101innodb_redo_log。新名称与其他使用 innodb_前缀的 MySQL 5.7 内部表空间名称一致。(缺陷号 20204978)

  • InnoDB:ALTER TABLE ... ADD INDEX由于断言代码不允许在线索引状态,操作引发了 断言ONLINE_INDEX_ABORTED_DROPPED。断言代码放宽了。(缺陷号 20198726)

  • InnoDB: 尝试访问由于先前的不一致而为 NULL 的表的表名导致 innobase_update_foreign_cache()打印错误时崩溃。(缺陷号 20146176)

  • InnoDB:push_warning_printf在服务器恢复期间调用函数 时发生错误 此函数以前用于向客户端打印警告消息。此外, current_thd在服务器重新启动时为 NULL。(缺陷号 20144839)

  • InnoDB: 关闭时的最后一个刷新循环没有调用 buf_flush_wait_LRU_batch_end(),导致断言失败。(缺陷号 20137435)

  • InnoDB:删除了使用不一致和冗余 的dict_index_t::auto_gen_clust_index标志。(缺陷号 20136192)

  • InnoDB: 内存访问冲突 fts_optimize_thread导致服务器停止。表已释放但未从全文搜索优化队列中删除。(缺陷号 20125560)

  • InnoDB: 在级联更新后更新引用表的统计信息时引发断言。(缺陷号 20125466)

  • InnoDB:btr_cur_latch_leaves 执行加载操作时 发生崩溃检查页面状态而不锁定页面会导致不一致。页面状态只应在页面被锁定后检查。(缺陷 #20111105,缺陷 #74596)

  • InnoDB: 计数器未能报告计数器数据。(缺陷 #20080942,缺陷 #74511)INNODB_METRICS adaptive_hash_searches_btree

  • InnoDB: 由于 MySQL 5.6.20 中引入的回归,当memcached插件处于活动状态时, mysqld 停止不会停止mysqld服务器进程(缺陷 #20078646,缺陷 #74956)InnoDB

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

  • InnoDB: 删除了在表和索引创建期间使用和 的commit_node成员 该成员已初始化但从未使用过。未使用 和 执行步骤也被删除。(缺陷号 20060218)tab_node_tind_node_tcommit_nodeTABLE_COMMIT_WORKINDEX_COMMIT_WORK

  • InnoDB:具有索引的表上 的ALTER TABLE ... RENAME故障 FULLTEXT引发了断言。(缺陷号 20043707)

  • InnoDB:在对临时表 进行操作期间遇到重复键错误 REPLACE引发断言。(缺陷号 20040791)

  • InnoDB:更改外键列名称 的ALTER TABLE操作导致重新加载外键约束时失败。之前的列名保留在数据字典缓存中,而不是被逐出。(缺陷号 20031243)

  • InnoDB: ALTER TABLE无法检查表是否已损坏。如果聚集索引已损坏或表被标记为已损坏,则应拒绝ALTER TABLE影响 的InnoDB如果ALTER TABLE 未重建表并且损坏的二级索引将在操作后保留,则也应拒绝 ALTER TABLE操作。(缺陷 #20015132,缺陷 #74810)

  • InnoDB: 行更新操作在 row_upd_sec_index_entry(). 在 row_merge_read_clustered_index()中,缓存的空间索引未在小事务提交之前插入。提交小事务后,聚集索引页将被更新或释放,导致缓存空间索引条目的主键字段指向无效地址。(漏洞#19999469)

  • InnoDB:btr_cur_search_to_nth_level函数 中提出了一个断言 共享锁(s-locks)和共享独占锁(sx-locks)都应该被允许用于所有闩锁模式。(漏洞#19984494)

  • InnoDB:ALTER TABLE对具有索引的表 的FULLTEXT引发了断言。该表已存在于缓存中并且 FULLTEXT索引已初始化。重新加载表时,FULLTEXT 索引再次初始化,导致断言。(漏洞#19978288)

  • InnoDB:对压缩临时表 的UPDATE操作引发了断言。扩展压缩临时表的表空间时使用了共享临时表空间属性。(漏洞#19976331)

  • InnoDB:修改了有关单个事务中 的大小限制 BLOBTEXT(漏洞#19975322)

  • InnoDB: 服务器日志报告了向量下标超出范围错误。(漏洞#19955501)

  • InnoDB: CHECK TABLE在执行验证之前无法检查表是否处于损坏状态,导致断言。(漏洞#19954054)

  • InnoDB: 为了避免很少写入的表空间上的 I/O,该 fsp_get_available_space_in_free_extents 函数现在从缓存字段而不是缓冲池中的表空间标题页访问元数据。

    此补丁还包括以下优化:

    • 为了避免查找,fsp_fill_free_list() 一些其他函数现在采用 fil_space_t指针而不是数字表空间标识符。

    • fil_extend_space_to_desired_size 函数已重命名为fil_space_extend 并简化了其 API。

    • 添加了一种新方法, undo::Truncate::was_tablespace_truncated以避免在刷新截断的撤消表空间文件之前进行一致性检查。

    (漏洞#19949683)

  • InnoDB: 失败的DROP TABLE操作可能会使表处于不一致状态,而不会将表标记为已损坏。(缺陷 #19946781,缺陷 #74676)

  • InnoDB: 添加了一个包装类以改进带引号的 SQL 标识符的打印,例如索引、列和表空间名称。(漏洞#19933607)

  • InnoDB: 一个ALTER TABLE操作提出了一个断言。当从字典缓存中删除外键对象时,从 rb-tree 中删除了不正确的外键对象。(漏洞 #19908343)

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

  • InnoDB: 对具有全文搜索索引的表的 DML 操作引发了无效断言。(漏洞 #19905246)

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

  • InnoDB: 一个缺失DBUG_RETURN()ha_innobase::update_row一个断言。(漏洞 #19904800)

  • InnoDB: 在调试版本中,将 innodb_limit_optimistic_insert_debug调试配置选项设置为 1 会导致无限的 B 树页面拆分。(缺陷 #19904003,缺陷 #74605)

  • InnoDB:ALTER TABLE ... DROP PRIMARY KEY, ADD PRIMARY KEY更改主键字段前缀长度的操作在批量插入代码中引发断言 。(漏洞#19896922)

  • InnoDB: 一些InnoDB到 stderr 的诊断输出包括不必要的换行符和没有前置时间戳的行。由于在几个非原子步骤中写出消息,来自多个线程的输出可能会交错。(漏洞 #19895222)

  • InnoDB:innodb_create_intrinsic删除了 MySQL 5.7.5 中引入 的(漏洞#19893327)

  • InnoDB: 从 MySQL 5.7.5 开始,MySQL 构建依赖于目标平台上存在的原子内存访问原语。为了简化代码,HAVE_ATOMIC_BUILTINS已从InnoDBMySQL 5.7.6 的源代码中删除。 InnoDB现在在 Windows 上依赖于 Microsoft 原子,在其他平台上依赖于 GCC 风格的原子。(漏洞#19856411)

  • InnoDB:ALTER TABLE将具有 UTF-8 字符集的表转换为 ROW_FORMAT=REDUNDANT. (错误#19843246、错误#19895661、错误#20219871)

  • InnoDB: 多表删除操作导致服务器停止。(漏洞 #19815702)

  • InnoDB: 缓冲池转储引用了不存在的表空间 ID。(漏洞#19814155)

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

  • InnoDB: 在调试版本中,buf_block_align()可以在调整缓冲池大小时从调试断言代码调用,从而导致竞争条件。(漏洞 #19803497)

  • InnoDB: 一个FLUSH TABLES操作提出了一个断言。(漏洞#19803418)

  • InnoDB:dict_boot()函数没有设置用于索引字段的列的最大长度,导致 dict_index_node_ptr_max_size()返回值不正确。(漏洞 #19791849)

  • InnoDB: 创建虚拟表时, 不必要地创建autoinc_mutex了对象的成员 dict_table_t同样,为虚拟索引不必要地创建zip_pad.mutex 对象的dict_index_t为了避免不必要的互斥争用,autoinc_mutex对象 zip_pad.mutex现在在第一次锁定尝试时分配和初始化。(缺陷 #19788198,缺陷 #73361)

  • InnoDB: log_sys->mutex在读取字段时未持有fil_space_t::max_lsn,导致竞争条件。(漏洞 #19729855)

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

  • InnoDB: btr_insert_into_right_sibling()可以删除父页面的节点指针。为了避免闩锁顺序违规和与其他线程的死锁,现在检查叶页和上层非叶页的锁定意图。(漏洞 #19729316)

  • InnoDB: InnoDB在表空间导出操作期间在更改缓冲区中执行不必要的表查找。(漏洞 #19724300)

  • InnoDB:在 MySQL 4.1 中添加 的 fil_tablespace_deleted_or_being_deleted_in_mem() 功能不再需要,已被删除。有一个 fil_io()返回 DB_TABLESPACE_DELETED。(漏洞 #19719727)

  • InnoDB: 为了方便以后的开发,对 ha_innobase::create函数进行了重构。(漏洞 #19718568)

  • InnoDBsrv_read_only_modeha_innobase::create(). 冗余的条件分支和未使用的局部变量已从 ha_innobase::delete_table(). (漏洞 #19712822)

  • InnoDB:InnoDB FULLTEXT删除了与索引 的 UTF-8 处理相关的未使用代码 (漏洞 #19712059)

  • InnoDB:fil_index_tree_is_freed()函数在重新分配索引根页面时返回假阴性,已被用于释放索引树的改进逻辑所取代。此补丁还删除了传递给dict_drop_index_tree(). (漏洞#19710798)

  • InnoDB: changeInnoDBbuffer tree,原本在InnoDB数据字典缓存内部创建,现在直接创建,绕过缓存。此补丁还删除了 DICT_UNIVERSALDICT_IBUF. 这两个标志都没有用于持久数据结构,因此 DICT_UNIVERSAL没有必要。(漏洞#19710650)

  • InnoDB:fil_space_t::tablespace_version字段被引入以跟踪 ALTER TABLE...DISCARD TABLESPACE后续 ALTER TABLE IMPORT TABLESPACE操作,已被删除。该 在导入tablespace_version具有相同内容的表空间时,不会对旧的缓冲条目发生更改缓冲区合并space_id该字段是多余的,不再需要。(漏洞 #19710564)

  • InnoDB: 删除了与索引名称查找相关的未使用代码,并替换了一个允许重复索引名称的函数。(漏洞 #19710348)

  • InnoDB: 列和索引名称在 InnoDB诊断消息和接口中被不必要地转义。此补丁还添加了一个新函数 , 输出innobase_quote_identifier中引用 FOREIGN KEY约束和列名 SHOW CREATE TABLE(漏洞 #19704286)

  • InnoDB: 使用 MySQL 线程池时,连接在负载测试期间遇到长信号量等待。(漏洞 #19703758,漏洞 #19887285)

  • InnoDB: 自从MySQL 5.1引入快速创建索引后,索引对象在 SYS_INDEXES提交之前被添加到内部数据字典表中。未提交的条目由前缀(定义为TEMP_INDEX_PREFIX)标识。 TEMP_INDEX_PREFIX也用于 InnoDB数据字典缓存,导致显示或比较索引名称时出现复杂情况。为了解决这个问题, dict_index_t::uncommitted引入了一个新标志以及访问器方法is_committed()set_committed(). 在此更改之前,一些 InnoDB INFORMATION_SCHEMA 表显示未提交的索引名称,前面带有问号。现在省略了问号前缀。(漏洞 #19702328)

  • InnoDB: InnoDB在诊断消息中显示的表名不一致。一些消息使用内部表示显示表名,而其他消息以翻译形式显示表名。(漏洞#19694618)

  • InnoDB: 对于FULLTEXT索引, FTS_DOC_ID_INDEX在 DML 操作期间执行了查找。为了避免代价高昂的查找,指向的指针 FTS_DOC_ID_INDEX现在在 DDL 时间缓存。(漏洞#19693488)

  • InnoDB: 为了简化代码,is_redo_skipped了 MySQL 5.7.5 中引入的具有CREATE INDEX批量加载功能的标志。该标志导致跳过页面分配的重做日志记录。现在为页面分配生成重做日志,即使在创建新表空间时也是如此。(漏洞#19693192)

  • InnoDB:MLOG_FILE_NAME即使表空间文件没有更改,也会在日志检查点上发出重做日志记录,它提供识别自上次检查点以来更改的表空间文件所需的信息 。如果表空间文件在崩溃恢复时丢失或不可读,如果没有要应用的重做日志,则应忽略不一致。有关相关信息,请参阅 崩溃恢复期间的表空间发现。(漏洞 #19685095)

  • InnoDB: 删除archive_space_id了函数中传递和忽略 的未使用参数log_group_init(漏洞 #19669129)

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

  • InnoDB: 在只读模式下,使用该 MBRCONTAINS()函数的 GIS 数据搜索引发了断言。(漏洞#19664678)

  • InnoDB: 调用之前未执行索引树的页面保留btr_page_alloc()。(漏洞 #19660261)

  • InnoDB: 使用 GCC 在 Debian 7 32 位系统上构建 MySQL 5.7.5 导致 MySQL 服务器故障。问题是由于 GCC 错误( Debian 错误报告#764220)导致当将指针或引用作为参数的函数声明为attribute((const))attribute((pure))。已知该问题发生在使用 g++-4.6 (Debian 4.6.3-14) 4.6.3 或 g++ (Debian 4.7.2-5) 4.7.2 的 Debian Wheezy 7.6 x86 以及使用 gcc ( Debian 4.9.1-15) 4.9.1 或 g++ (Debian 4.9.1-15) 4.9.1。该错误可能存在于其他 gcc-4.x 版本以及接受 attribute((const))attribute((pure))代码的任何 GCC 版本中。

    为了避免这个错误,有问题的属性已从 MySQL 函数中删除,这些函数采用它们取消引用的指针或引用。

    此补丁还删除了 的实例 attribute((nonnull)),这些实例在传递 NULL 时并不总是生成警告,并且可能不会发出用于处理 NULL 情况的代码。(漏洞#19632776)

  • InnoDB:lock_rec_free_all_from_discard_page_low()由于从索引树中删除的空页上的陈旧记录锁, 回滚操作引发了断言 (漏洞#19628598)

  • InnoDB:modify_clock现在存储 该buf_page_optimistic_get()用于对数据库页面进行乐观访问的函数在大多数情况下都能成功。已从.PAGE_HEAP_TOP_FIL_PAGE_TYPE_ btr0bulk.cc(漏洞#19611367)

  • InnoDB:dict_set_corrupted()函数试图 SYS_INDEXES错误地更新数据字典表的聚簇索引。(漏洞 #19584379)

  • InnoDB: 使用新的 Clang 3.5 版本进行编译会导致出现许多 InnoDB编译警告。(漏洞#19579603)

  • InnoDB:从源文件中api0api.h删除 了未使用的 API 定义 api0api.cc(漏洞#19579149)

  • InnoDB:DICT_TF2_USE_FILE_PER_TABLE标志应由该 dict_table_use_file_per_table函数进行测试,以验证该表是否使用 file-per-table 表空间。(漏洞 #19578222)

  • InnoDB:innodb_create_intrinsic启用后,在操作期间创建的临时表 被ALTER TABLE标记为优化的临时表,从而产生断言。启用 innodb_create_intrinsic应该只影响 CREATE TABLECREATE INDEX操作。(漏洞#19565749)

  • InnoDB: Valgrind 测试返回条件跳转或移动取决于 buf_page_is_zeroes 处的未初始化值错误。页面的未读部分包含垃圾值。(漏洞#19536534)

  • InnoDB:对空间索引 的INSERT操作导致split_rtree_node(). 该mbr_join_square函数无法检查无穷大和 NaN(不是数字)值。(缺陷 #19533996,缺陷 #73776)

  • InnoDB: 启用更改缓冲后,不应缓冲的缓冲操作序列导致 无法清除记录错误。(缺陷 #19528825,缺陷 #73767)

  • InnoDB: 校验和值为零的页面被错误地视为空页面。只有当校验和值和 LSN 字段值为零时,页面才应被认为是空的。(缺陷 #19500258,缺陷 #73689)

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

  • InnoDB:ib_logf()已删除用于编写日志消息 的 C 风格函数,ib::infoib::warnib::errorib::fatal)。(漏洞 #19495721)

  • InnoDB: 当操作更改列名的大小写InnoDB数据字典未更新ALTER TABLE ... CHANGE COLUMN(漏洞#19465984)

  • InnoDB: InnoDB为缺少的表空间文件返回一个表未找到错误。(漏洞 #19419026)

  • InnoDB: InnoDB由于处于等待状态的用户线程,关闭停止。(漏洞#19386426)

  • InnoDB: 升级到MySQL 5.7后,ALTER TABLE对MySQL 5.6中创建的包含GIS数据的表进行操作会导致严重错误。(漏洞#19368904)

  • InnoDB: 在线操作后 MySQL 5.7.5 中引入的批量插入增强功能引入ALTER TABLE ... ADD INDEX的回归,导致崩溃恢复失败CREATE INDEX(错误#19316315,错误#19308426)

  • InnoDB: 在非 Windows 平台上,os-file_pread函数 os_file_pwrite在发生错误时返回 -1。该值作为读取或写入的字节数打印在错误消息中。现在不再打印错误消息中的 -1 值,而是打印一条单独的错误消息,指示系统调用失败。感谢 David Bennett 提供的补丁。(缺陷 #19315210,缺陷 #73365)

  • InnoDB: 内存访问冲突导致 mysqldfts_optimize_thread终止 。(漏洞 #19314480)

  • InnoDB: 从函数调用以对临时表执行操作的过程导致服务器停止。(漏洞 #19306524)

  • InnoDB: 尝试在启动服务器后关闭服务器innodb_force_recovery=6 导致挂起。(缺陷 #19265668,缺陷 #73341)

  • InnoDB: andfil_inc_pending_ops()函数 fil_decr_pending_ops()已被fil_space_acquire()and fil_space_release()。此更改删除了空间 ID 查找。新功能在 、 和 中实现 buf_load()fsp_get_available_space_in_free_extents()lock_rec_block_validate()是一个调试功能。此错误的补丁也已删除 fil_tablespace_is_being_deleted(),这是一个孤立的功能。(漏洞 #19149177)

  • InnoDB: 如果日志序列号(LSN)没有增加, log_write_up_to()函数不应该启动重做日志写入。(缺陷 #19068569,缺陷 #73109)

  • InnoDB: 在具有 ext3 文件系统的 Linux 系统上运行 MySQL 服务器时, CREATE TABLE操作失败并出现表已满错误。innodb_flush_method=O_DIRECT该错误是由于posix_fallocate()时发生的内部故障引起O_DIRECT的。为了允许文件操作继续进行,内部 posix_fallocate()故障现在将错误消息打印到错误日志中。(漏洞 #18903979)

  • InnoDB: 作为InnoDB INSERT代码路径清理的一部分,断言代码被添加到ha_innobase::end_stmt()DDL 开头的其他地方。调试代码已添加到 row_log_table_apply(). 为优化的临时表相关函数添加了断言代码,并删除了未使用的参数。(缺陷号 18894337)

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

  • InnoDB: 全文搜索操作导致分段错误。(漏洞#18778259)

  • InnoDB: MySQL 5.7.5 中引入的与崩溃恢复期间的表空间发现相关的增强功能导致性能下降。(漏洞 #18645050)

  • InnoDB: 如果数据库在 MySQL 服务器上使用大写字母命名lower_case_table_names=2 (在 OS X 上是默认设置), 内部系统表 (InnoDB中指定的方式存储数据库名称,但在磁盘上以小写形式存储名称。在崩溃恢复期间,大小写不匹配导致将表空间 文件标记为丢失的冲突。此错误的补丁在崩溃恢复时将数据库名称转换为小写。(错误#18412598,错误#72043)InnoDBSYS_TABLES.ibd

  • InnoDB: 使用搜索短语加通配符运算符的全文查询扩展搜索导致InnoDB:未找到单词...查询扩展搜索错误。此补丁还解决了与全文索引被 DDL 回滚“不同步”相关的问题。(错误#18229097,错误#19831736)

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

  • InnoDB: 在调试版本中,InnoDB锁定监视器在DROP TABLE操作后断言,并且InnoDB监视器在buf_page_get_gen. (错误#18062698、错误#71343、错误#18173184、错误#68116)

  • InnoDB:CREATE TABLE启用时失败 的innodb_strict_mode 时成功而没有打印警告 innodb_strict_mode。(漏洞 #17852083)

  • InnoDB: buf_LRU_free_page()会调用 buf_page_set_sticky(bpage),在某些情况下不必要地使删除的页面变粘。(错误#17407091,错误#70228)

  • InnoDB:innodb_fast_shutdown=0崩溃恢复引发断言后 缓慢关闭(缓慢关闭没有等待后台回滚操作完成才继续。(漏洞 #16862810)

  • InnoDB: 用于定义小表空间的标准不一致。感谢 Laurynas Biveinis 提供补丁。(错误#16696906,错误#68970)

  • InnoDB: 为了显式缓存一致性,在头部添加了写屏障,os_thread_create_func()在断言代码中添加了读屏障 rw_lock_free_func()。(错误#13364876、错误#62692、错误#18870970、错误#72809)

  • InnoDB:列上 的内存缓存 append 操作INT导致分段错误。append不支持对 INT列的操作,现在已被阻止。(缺陷 #75200,缺陷 #20209756)

  • InnoDB: 对于 memcached incrdecr命令,整数列值处理不正确。(错误#69415、错误#20083106、错误#74874、错误#20044123)

  • 分区: 当在分区中使用多个列时KEY ,它们的顺序可能有助于确定行所在的分区。通过 ALTER TABLE使用 ALGORITHM=INPLACE可能会导致在分区中放置行时不一致;换句话说,在这样的操作之前插入的行被放置在一个分区中,但之后插入的同一行被放置在不同的分区中。出于这个原因,当该索引也用作分区表的基础时,不再允许在线更改多列索引的顺序KEY;相反,您必须使用复制ALTER TABLE来执行更改。(漏洞#17896265)

  • 复制: 复制管理语句的锁定行为已更改以SHOW SLAVE STATUS提高并发性。这使得该 NONBLOCKING子句变得多余, SHOW SLAVE STATUS并且它已与 Com_show_slave_status_nonblocking状态变量一起被删除。(缺陷号 20593028)

  • 复制:enforce_gtid_consistency 设置WARN为时,如果遇到事务中的第二个 GTID 一致性冲突语句,则不会发出警告。这是因为根据设计,事务上下文被标记为 GTID 违规,因此在事务提交之前不会发出其他警告。此修复可确保正确地为事务内的所有语句发出警告。(缺陷号 20414559)

  • Replication: 重启一个slave后,第一个relay log丢失了 Previous_gtidslog event。从 MySQL 5.7.6 版本开始,Previous_gtids每条日志都添加了一个日志事件。此修复可确保将 Previous_gtids日志事件正确添加到第一个中继日志。(缺陷号 20106390)

  • 复制: 当清除二进制日志时,第一个左边的二进制日志只包含一个Previous_gtids日志事件, 导致 lost_gtids->is_empty()断言。这与 Bug#16741603 的修复有关,现已更正。(缺陷号 20075721)

  • 复制: 当使用配置为使用 UTF-16、UTF-32 或 UCS-2 等特殊字符集的从站时,接收方 (I/O) 线程无法连接。该修复确保在这种情况下,如果不支持从站的字符集,则默认使用该latin1字符集。(漏洞 #19855907)

  • 复制: 如果从服务器上的客户端线程在FLUSH TABLES WITH READ LOCK主服务器执行 DML 时执行SHOW SLAVE STATUS,则在同一个客户端中执行会被阻塞,从而导致死锁。该修复确保读取锁定仅在更新中继日志期间保持,避免了死锁。(漏洞 #19843808)

  • Replication: 使用多通道多源复制,启用多线程slave时,重置slave再执行RESET SLAVE ALLSTART SLAVE或者STOP SLAVE导致crash。这个问题现在已经修复,多线程从属可以在多源复制设置中重新启动。(漏洞#19784641)

  • 复制:CHANGE REPLICATION FILTER 语句可用于创建一个空过滤器,例如在清除以前配置的复制过滤器时。REPLICATE_DO_TABLE在为、 REPLICATE_IGNORE_TABLEREPLICATE_WILD_DO_TABLE或 创建空过滤器时,这导致了以前版本的崩溃REPLICATE_WILD_IGNORE_TABLE。此修复确保可以通过将过滤器设置为空来安全地清除这些复制过滤器。(漏洞#19711674)

  • 复制: 当使用 WITH_DEBUG启用该选项编译的 MySQL 版本时,使用 expire_logs_days清除二进制日志会导致重启导致服务器崩溃。此问题在修复错误 #17283409 后出现。该修复程序确保 current_thd在调用 之前进行检查 DEBUG_SYNC()。(漏洞 #19553099)

  • 复制: 使用多线程从属服务器时,从属接收方 (SQL) 线程 ER_MTS_CANT_PARALLEL在发出LOAD DATA试图将数据加载到主服务器上的非事务表但失败的语句时停止并出错,例如由于主键冲突。这是由多线程从属应用程序错误处理DELETE_FILE事件引起的。该修复可确保多线程从站 DELETE_FILE正确处理事件。(漏洞 #19552923)

  • 复制: 有时从属 I/O 线程会在当前中继日志中留下部分组,例如当它被杀死或停止时。重新启动后,一个新的中继日志在轮换时创建,并且从主服务器复制一对ROTATE_EVENTFORMAT_DESCRIPTION_EVENT写入新的中继日志。在使用多线程slave时,在relay log中应用组的剩余部分时遇到了错误1755等问题。此修复确保如果 MASTER_AUTO_POSITION启用,则工作人员回滚部分组,完成其工作,然后应用该组的新的完整副本。如果 MASTER_AUTO_POSITION禁用,工作人员不会回滚部分组。(漏洞 #19545298)

  • 复制: 启动日志事件未被从站检查最小大小。(漏洞 #19145698)

  • 复制: 当使用 slave_type_conversions启用的基于行的复制时,连续有多个二进制日志 Rows_log_event导致崩溃。slave_type_conversions这是因为过早发布了作为流程一部分生成的临时表 此修复确保临时表不会过早释放,还确保长事务不会导致内存不足错误。(错误#18770469,错误#19704825)

  • 复制: 当使用从主服务器手动复制的二进制日志文件时,例如为了避免 I/O 线程读取延迟,多线程从服务器生成错误 1755。因为 Previous_gtids日志事件是使用主服务器server_id而不是从服务器的 server_id,先前事件记录没有被正确跳过。此修复确保 Previous_gtids始终跳过日志事件中的事件,无论它们是来自中继日志(在从属设备上生成)还是来自二进制日志(在主设备上生成并作为中继日志手动复制到从属设备)。(漏洞#17812024)

  • 复制: 从较早版本的 MySQL 主服务器(例如 4.1 版)复制时,校验和不用于事件。复制到运行较新版本 MySQL(例如 5.6 版)的从属服务器,该版本 slave_sql_verify_checksum 默认启用意味着来自旧主服务器的事件的最后 4 个字节被错误地解释为校验和。现在会生成一个警告,为避免这种情况,请设置 slave_sql_verify_checksum=0为禁用从站上的校验和。(漏洞 #17276183)

  • 复制: 在需要恢复通道的情况下使用多源复制和多线程从属服务器时,例如在从属应用线程错误之后,或者在崩溃之后,通道没有被正确恢复。这意味着没有尝试修复已停止会话留下的事务执行间隙,这导致重复应用某些事务。该修复可确保在这种情况下,将正确的通道传递给多线程从属恢复。(错误#74906,错误#20046222)

  • 复制: 可忽略的日志事件在 MySQL 5.6 中引入,但被发现无法正常运行。现在已经修复了。(错误#74683,错误#19949915)

  • 复制: 当 XA 事务处于活动状态时,执行内部回滚(例如使用 BINLOG语句)会导致断言。该修复程序确保当事务跨越多个二进制日志文件时,仅对从服务器发生回滚。BINLOG如果 Format_description 来自MySQL 客户端中正在执行的语句,现在不会发生回滚(错误#74597,错误#19928622)

  • 复制: 组中提交的事务的 GTID 未按 gtid_executed顺序添加,这有时会导致gtid_executed. 当出现这些间隙时,服务器将不得不在 GTID 集中添加和删除间隔,这需要一个互斥锁,这会导致争用并可能降低性能。该修复确保 GTID 以gtid_executed 相同的提交顺序添加到没有间隙。(错误#74328,错误#19982543)

  • 复制:gtid_mode=ONlog-bin=OFF,提交的事务 GTID 被添加到 mysql.gtid_executed表中。在这样的配置中,提交的事务 GTIDgtid_purged直到下次服务器重新启动时才被正确添加。该修复程序确保在提交gtid_purged 时添加已提交事务的 GTID。(错误#74279,错误#19781336)

  • 复制: 在复制拓扑中,其中:

    • 奴隶有GTID_MODE=ONMASTER_AUTO_POSITION=1

    • 自启动以来, master 已经执行过GTID_MODE=ON并且没有执行过任何事务

    如果从服务器使用该MASTER_POS_WAIT 函数等到它从主服务器接收到完整的二进制日志,而主服务器还没有执行任何事务,那么该MASTER_POS_WAIT函数将永远不会完成,或者会超时。这是因为在服务器重启后,master 的二进制日志以一个 Previous_gtids日志事件结束,但是这个事件没有被复制,所以 slave 不知道 master 的二进制日志位置。该修复确保 Previous_gtids日志事件被正确复制,以便从服务器知道主服务器上正确的二进制日志位置,确保 MASTER_POS_WAIT函数可以完成。(错误#73727,错误#19507923)

  • Replication: 重启MySQL并 relay_log_recovery启用从崩溃中恢复时,如果SQL线程从未启动过,则开始恢复的位置未正确初始化,因为Relay_Master_Log_File丢失。此修复可确保在这种情况下,从第一个中继日志文件开始,从主服务器搜索每个中继日志以查找轮换事件,该事件指定复制从何处开始。然后使用此轮换事件来设置 SQL 线程Relay_Master_Log_FileRelay_Log_Pos恢复将照常进行。(错误#73039,错误#19021091)

  • 复制: 当使用 GTID 进行复制并 MASTER_AUTO_POSITION启用时,如果从服务器请求的 GTID 已被主服务器清除,则主服务器将发送所有可用的 GTID。发生这种情况是因为 master 读取所有可用的二进制日志并搜索包含 GTID 的二进制日志,而该 GTID 不包含在 和 的联合gtid_executedgtid_retrieved。如果找到这样的 GTID,master 将从该位置开始发送信息。在 slave 和 set 的 gtid_executedgtid_retreived集不包含 master 的gtid_purged设置,奴隶会期待已经被主人清除的GTID。此修复可确保在这种情况下,从站的 I/O 线程会因错误“主站已清除包含从站所需的 GTID 的二进制日志”而中止。(错误#73032,错误#19012085)

  • 复制: 当使用具有基于 GTID 的复制的多线程从站时,启用 --replicate-same-server-id会导致从站线程因错误而停止并且无法启动复制。这是由于 Previous_gtids日志事件在此类设置中未被正确过滤并到达工作线程而导致的。此修复可确保Previous_gtids协调器线程正确处理日志事件。(错误#72988,错误#18967791)

  • 复制: 由于 mysqlbinlog为每个事件读取调用 localtime(),而这又调用 stat(/etc/localtime),因此导致了内核互斥锁争用。此修复确保mysqlbinlog使用 localtime_r(),它经过优化以存储只读时区内部结构。这也意味着mysqlbinlog 现在在处理开始时建立时区,您不能在处理过程中更改它。这与 MySQL 服务器的行为相同。(错误#72701,错误#18808072)

  • 复制: 在正常使用中,slave 不可能比 master 拥有更多的 GTID。但在某些情况下,例如硬件故障或错误清除后 gtid_purged,master 的二进制日志可能会被截断。此修复可确保在这种情况下,主服务器现在检测到从服务器具有不在主服务器上的 GTID 事务。现在在从站上生成一个错误,并且 I/O 线程因错误而停止。master 的转储线程也停止了。这可以防止复制期间的数据不一致。(错误#72635,错误#18789758)

  • 复制:gtid_executed当使用启用了自动定位的基于 GTID 的复制从站时,当事务的 GTID 不在从站的集合 中时,从站 I/O 线程可能会再次请求最后一次完全接收到的事务 这种情况可能会发生,例如,如果 SQL 线程没有应用事务或RESET MASTER在从站上发出一条语句来清理它的gtid_executed集合。该修复程序确保使用自动定位的基于 GTID 的复制从站不会两次请求完全接收的事务,无论从站的 gtid_executed设置如何,它现在只添加一个 GTID 到Retrieved_Gtid_Set 当收到整个交易时。(错误#72392、错误#18629623、错误#17943188)

  • Replication:SHOW SLAVE STATUS用于监控复制性能时, Seconds_Behind_Master有时会出现意外滞后于 master。这是由于 Previous_gtids日志事件被写入从服务器的中继日志,时间戳落后于主服务器,然后用于计算 Seconds_Behind_Master. 此修复可确保在从站上生成的事件被添加到中继日志并且在计算时不被使用 Seconds_Behind_Master。(错误#72376,错误#18622657)

  • Microsoft Windows: 在 Windows 上,替换实用程序不起作用。(漏洞 #16581605)

  • Solaris:stlport由于客户端程序依赖于 使用 Sun Studio 构建的 Solaris 二进制分发版现在随该(漏洞#19845068)

  • Solaris: 对于 32 位 Solaris 构建,不当使用可变参数函数参数导致的对齐问题会导致核心转储和不正确的输出。(错误#74395,错误#19821617)

  • 对于调试版本,如果空间索引使用的列也是主索引的一部分,则可以在索引选择期间引发断言。(缺陷号 20451454)

  • 在 Linux 上,尝试安装.dll插件(适用于 Windows)会导致内存泄漏。(缺陷号 20439894)

  • 在 32 位平台上, utf8参数的 字节计数计算RPAD()可能会溢出并导致服务器退出。(缺陷号 20316028)

  • 如果另一个进程关闭服务器, mysqltest 就会发生内存泄漏。(缺陷号 20221262)

  • mysql_session_track_get_first() 即使在执行有效查询以更改会话状态后,C API 函数也返回 1 而不是 0 。 (缺陷号 20126551)

  • 在 Ubuntu 14.10 上,MySQL 安装操作可能无法重新加载 AppArmor。(缺陷号 20092641)

  • 对于调试版本,服务器可能会在处理过程中引发断言, DELETE因为无法处理需要成为标量子查询但返回多于 1 行的子查询。(缺陷号 20086791)

  • mysql_list_fields()mysql_stmt_prepare()可能泄漏内存。由于对 EOF 数据包处理的更改,此问题在 MySQL 5.7.5 中引入。(漏洞 #20065461,漏洞 #20065517)

  • 某些具有无参数函数的查询,GROUP BY,并WITH ROLLUP导致引发断言。(缺陷号 20034943)

  • 名为 的用户可以在没有权限的event_scheduler情况下查看事件计划程序进程列表 。PROCESS(错误#20007583,错误#20754369)

  • 使用该选项调用时, mysql客户端可能会过早退出。--xml(漏洞#19974879)

  • InnoDBinnodb_checksum_algorithm 如果在操作期间修改了系统变量的值,则表校验和计算可能会产生不正确的结果 。(漏洞#19931177)

  • LIKE运算符可能会产生不可靠的子句结果,该 子句ESCAPE包含一个在执行时不变但在此之前未知的表达式。(漏洞#19931126)

  • BINLOG 在语句打开临时表时 执行某些语句HANDLER可能会导致服务器退出。(错误#19894987,错误#20449914)

  • 格式错误的mysql.proc表行可能导致与该行DROP DATABASE关联的数据库 的服务器退出。proc(漏洞 #19875331)

  • SHOW GRANTS使用代理用户连接后可以显示代理用户的密码哈希。(漏洞#19817663)

  • 对于调试版本,优化器在为派生表创建临时表时可能会产生错误的索引扫描成本,并因此引发断言。(漏洞#19793998)

  • 在锁定和截断临时表后解锁临时表可能会导致服务器退出。(漏洞 #19786309)

  • IN谓词可能被错误地标记为半连接展平的候选者,导致在尝试展平时引发断言。(错误#19779600,错误#18932813)

  • 较大的 transaction_prealloc_size 系统变量值可能会导致服务器分配过多的内存。最大值已向下调整为 128K。对 进行了类似的更改 transaction_alloc_block_size。如有必要,事务仍然可以分配超过 128K;此更改减少了可以预分配的数量,以及增量分配块的最大大小。(漏洞 #19770858,漏洞 #20730053)

  • RPM 和 DEB 包 sql_mode错误地设置了默认值(他们没有设置 ONLY_FULL_GROUP_BY,现在包含在默认值中)。(漏洞 #19766800)

  • 源 RPM 包缺少对 Boost 库的正确依赖。(漏洞#19714453)

  • <=>对于使用运算符比较两行并且这些行属于不同字符集 的查询,可能会发生服务器退出。(错误#19699237,错误#20730155)

  • Enterprise Encryption 插件可能会错误处理字符串参数。(错误#19688008,错误#20730103)

  • 优化器检测到形式的相等表达式的函数依赖性, 但没有检测到形式的 表达式的函数依赖性。现在它也处理后者。(漏洞#19687724)col_name = expr,(col_name, ...) = (col_name, ...)

  • 某些InnoDB错误导致存储函数和触发条件处理程序被忽略。(错误#19683834,错误#20094067)

  • 在某些 32 位平台上, 由于超时而不是等待锁定而立即返回。(漏洞#19674349)GET_LOCK(lock_name, -1)

  • 如果包含子查询的 DML 语句在内部造成死锁InnoDBInnoDB 则会回滚事务。这在 SQL 层中不会被注意到,结果继续执行,最终导致在内部引发断言 InnoDB。(漏洞 #19670163)

  • default_authentication_plugin 设置为 后 , sha256_password写入二进制日志的密码哈希格式错误。(漏洞#19660998)

  • GROUP BY或列ORDER BYCHAR(0) NOT NULL可能导致服务器退出。(漏洞 #19660891)

  • 在负载下,服务器可能会在尝试填充OBJECT_TYPE用于从 events_waits_currentPerformance Schema 表中选择的列时退出。(漏洞#19658933)

  • ST_AsGeoJson()给出非法max_dec_digitsoptions参数时可能会失败。(漏洞#19657747)

  • 当给定具有默认排序规则以外的排序规则的 geohash 参数时,Geohash 空间函数失败。(漏洞#19657725)

  • ONLY_FULL_GROUP_BY如果分组查询是 的一部分,则无法可靠地运行 由 强制执行的检查 CREATE VIEW。MySQL 服务器尝试运行这些检查并可能退出;现在只有实际使用视图的语句才会运行检查。(漏洞#19636980)

  • 对于调试版本,当分组查询引用视图时,可能会错误地引发断言。(漏洞 #19636409)

  • 对于调试版本:向POINT NOT NULL列添加唯一索引会触发警告,并且该键未提升为主键。NULL在同一个表中的不同非列上创建唯一索引然后引发断言。(错误#19635706,错误#24469860)

  • 当会话状态没有变化时,从服务器发送到客户端的 OK 数据包在数据包末尾包含一个不需要的字节。(漏洞 #19625718)

  • 由于使用了已弃用的 函数, mysql_install_db 的调试版本无法在 Solaris 11 U2 上编译。vfork()(漏洞 #19603400)

  • 可以针对以下任一情况提出断言:1) 将用于标量子查询的半连接转换应用于多行子查询。2)IN 检查左侧是转换为半连接的标量子查询的谓词,看它是否可以使用物化。(漏洞 #19586047)

  • 对于调试版本,如果中间或最终结果产生 NaN 或负数,则会 ST_Distance()导致服务器退出。此函数现在会产生 ER_GIS_INVALID_DATA错误。(漏洞#19584716)

  • -Wpointer-bool-conversion使用和 -Wundefined-bool-conversion编译器选项调整CMake配置以处理 Clang 3.5 报告的新警告 (漏洞 #19584183)

  • 如果在严格 SQL 模式下执行CREATE TABLEor ALTER TABLE分区语句并 ER_WRONG_TYPE_COLUMN_VALUE_ERROR 发生错误,sql_mode 则 将重置为''并且错误处理程序堆栈已损坏,从而导致服务器退出。(漏洞 #19584181)

  • 尝试在已使用的端口上启动服务器会产生 Valgrind 错误。(漏洞#19566148)

  • 会话状态不包含在查询缓存中保存的查询结果中。(漏洞 #19550875)

  • 非法CREATE TABLE语句可能无法创建表(如预期的那样),但仍会在 Performance Schema 中生成表统计信息。(漏洞 #19535945)

  • 设置 session_track_system_variablesNULL可能导致最终服务器退出。(漏洞 #19514067)

  • 客户端协议跟踪插件没有考虑从 MySQL 5.7.5 中的客户端/服务器协议中删除 EOF 数据包。(漏洞#19512199)

  • 非索引列上相等条件的条件过滤效果的默认值从 0.005 调整为 0.1。原始值导致对低基数列的条件过滤效果估计过高。(漏洞 #19505175)

  • 如果查询使用临时表或将结果存储在表UNION中,则第一个查询块返回一POINT列而第二个查询块返回具有非POINT值的几何列的语句失败 。(漏洞#19471564)InnoDBInnoDB

  • 如果在一个索引上使用索引扫描而在另一个索引上使用范围扫描,则可以为使用半连接 LooseScan 评估的查询提出断言。(漏洞 #19465034)

  • 在严格的 SQL 模式下,某些SELECT语句在存储过程中和不在存储过程中的执行方式可能不同。(漏洞 #19418619)

  • 如果audit_log插件遇到磁盘已满错误,服务器将退出。

    现在,如果正在写入审计日志的文件系统已满,则会将磁盘已满错误写入错误日志。审计日志记录会一直持续到审计日志缓冲区已满为止。如果在缓冲区填满时可用磁盘空间尚未可用,客户端会话将挂起,并且在客户端会话挂起时停止服务器将导致审计日志损坏。要在客户端会话挂起时避免这种情况,请确保在停止服务器之前审计日志文件系统上有可用空间。(漏洞#19411485)

  • 激活validate_password插件并启用字典查找后,将用户定义的变量传递给PASSWORD()可能会导致服务器退出。(漏洞 #19388163)

  • 无法准备使用 Geohash 空间函数的语句。(漏洞 #19383904)

  • 不带参数调用时,XPathnumber()函数失败。现在 MySQL 将 number()其视为已为当前上下文节点调用(换句话说,好像 number(.)已被使用),这是 XPath 规范中针对这种情况所要求的行为。(漏洞 #19323016)

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

  • 启用查询缓存后,某些以注释序列开头的查询可能会导致无效内存读取错误。(漏洞 #19322795)

  • 某些GRANT PROXY语句仅影响内存中的特权,并通过FLUSH PRIVILEGES服务器重启或服务器重启恢复。(漏洞 #19309652)

  • STR_TO_DATE()可能错误处理数字输入的转换,导致服务器退出。(错误号 19047644)

  • 修复了 Valgrind 解析时越界读取的警告 '0E+'。(漏洞 #19047527)

  • 在某些情况下, DATE_FORMAT()可能会为其格式参数和函数结果使用相同的缓冲区,从而导致无效的内存读取。(缺陷号 19047488)

  • 将字符串转换为 IPv6 地址可能会引发 Valgrind 警告。(漏洞 #19047425)

  • 对于由于文件描述符不足而无法创建临时表,服务器退出而不是返回错误。(漏洞#18948649)

  • 如果转储目标位于 NFS 安装上,则mysqldump无法报告磁盘已满错误。(漏洞 #18817867)

  • 在某些情况下,代理用户可能会使被代理用户的密码过期。(漏洞 #18815349)

  • 以前,InnoDB允许创建引用用户没有足够权限的父表的外键。现在,用户必须拥有 REFERENCES父表的权限才能创建外键。(错误#18790730,错误#11746917)

  • 由于优化器未能分配足够的内存来解析外部引用,服务器可能会退出。(错误#18782905,错误#19892803)

  • 如果传递无效参数, 则mysql_session_track_get_first()mysql_session_track_get_next()C API 函数可能会导致客户端崩溃。(漏洞 #18769620)

  • 如果基于相同的聚合函数创建了两个内部临时表,则服务器可能会退出。(漏洞#18766378)

  • 对于某些包含派生表(子句中的子查询 FROM)的查询,由于行计数估计不太准确,具体化延迟导致执行计划不理想。(漏洞#18607971)

  • 对于某些多表UPDATE 语句,表的连接顺序可能会错误地影响结果。(漏洞 #18449085)

  • ST_Touches()可能导致某些输入的服务器退出。(漏洞#18304448)

  • InnoDB在全文索引初始化期间,将包含全文列的表从 Windows 复制到 Linux 会导致 Linux 上的服务器退出。(错误#18285007、错误#19864963、错误#73155)

  • 运行的服务器 --default-authentication-plugin=sha256_password 拒绝了需要密码的 MySQL 5.1 客户端的连接尝试。(错误号 18160400)

  • validate_password插件没有正确地对由 sha256_password身份验证插件验证的帐户强制执行密码限制。(缺陷号 18140348)

  • 对于UPDATEand DELETE语句,服务器可能会在尝试访问未初始化的数据结构后退出。(漏洞 #18036143)

  • 执行带有嵌套 IN子查询和视图的准备好的语句可能会导致服务器退出。(漏洞 #17973601)

  • 使用start servicemysqld_safe 启动服务器可能会导致无法使用正确的插件目录。(漏洞 #17619241)

  • FLUSH TABLESFEDERATED如果表空闲时间超过 wait_timeout时间加上 TCP keepalive 时间,则在 表上失败。(漏洞#17599258)

  • 对于FEDERATED表, 语句的IGNORE处理 DELETE IGNORE 被忽略。(漏洞 #17564775)

  • ALTER TABLE对于调试版本,如果长度为 767 并且正在增加,则在访问操作修改列长度的索引列时 引发断言 。(漏洞#16886196)

  • 如果它们在表缓存中,则从中选择所有列 INFORMATION_SCHEMA.TABLES不会重新打开表,但在相同条件下选择这些列的子集会重新打开表。(漏洞 #16869534)

  • 使用 子句 创建FEDERATED包含列的表 会导致服务器退出。(漏洞 #12671631)AUTO_INCREMENTLIKE

  • 对于调试版本,缺少错误检查允许某些 ALTER TABLE应该无法继续处理的语句。(错误#76515,错误#20788817)

  • 对于基于 RPM 的安装操作,没有产生任何信息表明mysql_install_db 将初始root密码写入 $HOME/.mysql_secret. 这些操作现在使用mysqld --initialize,它将密码写入标准错误输出。(缺陷 #75859,缺陷 #20518217)

  • 对于某些全文查询,关于索引使用的优化器清理不完整可能会影响对同一表的后续查询。(错误#75688、错误#20442572、错误#20261601)

  • 对于 JSON 格式EXPLAIN的输出,该filtered值显示为无保证的位数精度。该值现在限制为小数点后两位。(错误#75663,错误#20429156)

  • 推送连接不适用于 NDB表。(错误#75256,错误#20234994)

  • 对于慢速网络连接,下载 Boost 的超时时间(600 秒)可能太短。现在可以使用新的CMake 选项DOWNLOAD_BOOST_TIMEOUT来配置超时。(错误#75238,错误#20223893)

  • 对于某些带有 的查询LIMITEXPLAIN可能表示执行将使用 完成filesort,但执行实际上是使用索引读取完成的。(错误#75233,错误#20219846)

  • 更正了错误消息和源代码中的几个拼写错误。感谢 Otto Kekäläinen 提供的补丁。(错误#75084,错误#20135835)

  • 一个 bulkINSERT后面跟着其他语句LOAD DATA 可能会产生不正确的AUTO_INCREMENT 值。(错误#75068,错误#20126635)

  • CMake没有找到需要的Boost版本时,报错信息中没有指明需要的版本。现在可以了。(缺陷 #75026,缺陷 #20108908)

  • 启用log_timestamps 系统变量错误地需要启用二进制日志记录。(缺陷 #75025,缺陷 #20108866)

  • 在令牌处理期间,解析器检查包含 7 位数据的令牌是否可以应用于错误的令牌。(错误#74984,错误#20086997)

  • 对于视图下的表的特权错误,应该为访问视图的尝试提供更一般的错误,以免提供有关视图内容的信息。这在严格的 SQL 模式下不会发生。(缺陷 #74868,缺陷 #20032855)

  • 对于在十进制上下文中使用 GET_LOCK()or 的子查询,RELEASE_LOCK()服务器可能会创建定义不正确的临时表,从而导致引发断言。(错误#74859,错误#20031761)

  • default_password_lifetime被标记为volatile,这是不必要的,因为它受互斥体保护。感谢 Stewart Smith 提供的补丁。(错误#74849,错误#20029439)

  • 从中删除了未使用的grant_option全局变量mysqld.cc。感谢 Stewart Smith 提供的补丁。(错误#74847,错误#20029398)

  • InnoDB布尔全文搜索+与括号结合使用时处理不当;例如,+word1 +(>word2 <word3)。(错误#74845,错误#20028323)

  • NULL作为表达式未被识别为用于计算性能模式语句摘要的文字。(错误#74813,错误#20015246)

  • MySQL 无法在调试模式下使用 GCC 4.9.1 进行编译。(错误#74710,错误#19974500)

  • 优化器成本模型构造函数已分配但未销毁成本常量对象,导致内存泄漏。(错误#74590,错误#19895764)

  • 当内部字符串操作生成NULL指针而不是空字符串时,某些查询可能会引发断言。(错误#74500、错误#19875294、错误#13358486、错误#79988、错误#22551116)

  • 对于mysql_install_db,该 --no-defaults选项未传递给 mysqld。(错误#74477,错误#19863782)

  • 对于调试版本,服务器可能会由于优化器未能为组引用分配足够的内存而退出。(错误#74447,错误#19855522)

  • 对于 Performance Schema 表,和值table_io_waits_summary_by_table 存在差一错误 。(错误#74379,错误#19814559)COUNT_FETCHCOUNT_READ

  • 根据内容,几何集合对象未正确销毁,导致内存泄漏。(错误#74371,错误#19813931)

  • 在左侧参数中使用with 值可能会导致断言失败。(错误#74357,错误#19805761)(row subquery1) NOT IN (row subquery2)NULL

  • 指定的任何索引注释 ALTER TABLE ... ADD INDEX都被忽略。(错误#74263,错误#19779365)

  • 在存储程序中读取具有值的系统变量NULL会导致任何后续读取返回一个 NULL值,即使变量值可能会在存储程序的调用中发生变化。(错误#74244,错误#19770958)

  • handler.hhandler.cc文件中从未调用或引用的 存储引擎 API 代码和函数 已被删除。(错误#74207,错误#19729286)

  • -DENABLED_PROFILING=0CMake 选项导致编译错误 。(错误#74166,错误#19730970)

  • 随着 MySQL 5.7.5 对数据库 InnoDB中帮助表的更改, mysql_install_db加载帮助表内容变得更慢。这是由于 语句加载时启用了自动提交。现在所有语句都作为单个事务执行,而不是每个语句一个事务。(错误#74132,错误#19703580)mysqlINSERT

  • 在CentOS 6 上,为选项指定相对路径名 --socket导致MySQL 启动脚本失败。(错误#74111,错误#19775856)

  • 系统group_concat_max_len变量可以在运行时设置为其最大值,但不能在选项文件中设置。(错误#74037,错误#19670915)

  • 服务器错误地将客户端错误消息写入错误日志:尝试获取锁时发现死锁;尝试重新启动事务。(错误#73988,错误#19656296)

  • sha256_password无法将插件 的客户端部分指定为默认客户端插件 ( --default-auth=sha256_password),以便用户使用其他服务器插件进行身份验证。(错误#73981、错误#19651687、错误#17675203)

  • 在有大量并发服务器连接的情况下,错误计算 qsort 操作的内存需求可能会导致堆栈溢出错误。(错误#73979、错误#19678930、错误#23224078)

  • REPEAT()浪费时间连接空字符串。(错误#73973,错误#19646643)

  • 在 MySQL 5.7.5中使用InnoDBfor 临时表的功能导致某些查询失败:一些涉及多表UPDATE的查询、涉及长PRIMARY KEY值的查询和涉及DISTINCT SUM(). (错误#73927、错误#19627741、错误#73932、错误#19628808、错误#73702、错误#19497209)

  • 在 Windows 上,max_statement_time 将会话变量设置为大于 0 会导致内存泄漏。(错误#73897,错误#19605472)

  • 在 Solaris 11.2 中,dtrace -V输出从 更改Sun DOracle D,导致在 MySQL 配置期间检测 DTrace 可用性失败。(错误#73826,错误#19586917)

  • DROP DATABASE.cfg如果数据库目录包含文件(例如由创建的文件 ),则失败FLUSH TABLES FOR EXPORT。(缺陷 #73820,缺陷 #19573998)

  • 在 32 位系统上, 为无限长度GLength() 的值返回非 INF 值。LineString(错误#73811,错误#19566186)

  • mysql_config --libs_r生成包含链接标志的输出libmysqlclient_r,即使该库已在 MySQL 5.5 中删除并替换为指向底层 libmysqlclient库的符号链接。现在的输出直接指向libmysqlclient. (这意味着不再需要为了能够使用mysql_config --libs_r而维护符号链接。)(错误 #73724,错误 #19506315)

  • 对于语句摘要计算,性能模式无法将带符号的文字数字识别为可表示的值, ?并为应该具有相同签名的语句创建了多个摘要。现在,所有一元加号和一元减号后跟数字的实例都减少到 ?摘要中。(缺陷 #73504,缺陷 #19389709)

  • 使用 Visual Studio 2013 在 Windows 上编译导致 未解析的外部符号错误。(错误#73461,错误#19351573)

  • 服务器警告错误消息引用了过时的 table_cache系统变量而不是 table_open_cache。感谢 Daniël van Eeden 提供修复某些实例的补丁。(错误#73373、错误#19285052、错误#75081、错误#20135780)

  • UNION DISTINCT子查询具体化或与临时表上的哈希索引一起使用的 某些查询 可能会产生不正确的结果或导致服务器退出。(错误#73368,错误#19297190)

  • 如果表有一个NOT NULL列,对于 INSERT未指定列值的表上的语句,服务器会生成, ERROR 1048 "Column cannot be null"而不是Warning 1364 "Field doesn't have a default value"如果存在BEFORE 操作类型不同于 的触发器ON INSERT。(错误#73207,错误#19182009)

  • 和函数实现包含竞争条件IS_FREE_LOCK()IS_USED_LOCK()因此当同时检查和释放用户锁时,它们可以访问释放的内存。访问释放的内存可能会导致函数返回值不正确或服务器退出。(错误#73123,错误#19070633)

  • SHOW EVENTSperformance_schema数据库中返回拒绝访问错误,而不是像 INFORMATION_SCHEMA. 现在返回一个空结果。(错误#73082,错误#19050141)

  • LOCK TABLES有时会为隐式锁定的表获取不够强的锁。(错误#72887,错误#18913551)

  • 当视图定义包含ORDER BY子句但视图是使用WHERE 子句选择时,视图输出的排序顺序可能不正确。(错误#72734、错误#18838002、错误#81235、错误#23207758)

  • 服务器不再记录以下警告,因为它们不提供信息:客户端未能提供其字符集。' charset' 将用作客户端字符集。(错误#72543,错误#18708334)

  • 默认情况下错误地启用了CMake选项。(错误#72106,错误#18448743)ENABLED_LOCAL_INFILE

  • 服务器可能无法为 SET列定义恰好有 64 个元素的列解析插入的字符串。(错误#71259,错误#18020499)

  • 使用 ODBC 格式的日期文字可能会产生不正确的查询结果。(缺陷 #69233,缺陷 #16812821)

  • mysql_setpermission未能在它生成的 SQL 语句中正确引用用户名。(漏洞 #66317,漏洞 #14486004)

  • 对于FEDERATED表, 语句作为语句发送到远程服务器 ,可能会对事务处理和处理产生副作用 。(错误#42878,错误#11751864)DELETE FROM tbl_nameTRUNCATE TABLE tbl_nameAUTO_INCREMENT

  • 如果为内部临时表创建的文件由于某种原因被孤立并且文件名被重新用于以后的查询,则可能会导致问题。(错误#32917,错误#11747548)

  • STRICT_ALL_TABLES如果时区表包含格式错误的信息,则mysql_tzinfo_to_sql在 SQL 模式下失败 (缺陷 #20545,缺陷 #11745851)